2019夏令营软件设计(三):技术选型
技术选型——分类
- 基础设施选型:云平台或IDC(Internet Data Center)、编程语言、数据库等
- 框架和库的选型:前后端的开发框架、核心类库等
- 中间件选型:负载平衡、消息中间件、缓存中间件
- 第三方服务选择:第三方的推送、短信等
项目所涉及的一整套技术、方案、规范或者产品的选型。
这就需要我们更仔细的取权衡各种技术、各种组合的利弊,做出取舍。
技术选型
一、顶层架构
Linux/Windows平台、CS/BS架构、大数据架构、应用领域(游戏、互联网、传统行业等)
二、CS中的Client的技术选型
1、GUI开发技术
(1)微软技术体系
MFC、Win Form、WPF、UWP
(2)Java技术体系
Java AWT、Java swing、javafx
(3)Python技术体系
Kivy、P有Q他、P有GUI、LiBavg、wxPython
三、BS中Browser的技术选型
1、微软技术体系
Asp.net、Asp.net MVC、Silverlight、IIS等
2、Java技术体系
JSP+Servlet+Struts+Hibernate+Spring、tomcat等
3、其他技术
html5、js、Ajax、CSS3、http/https
js框架:jQuery、Angular JS、Bootstrap、jQuery UI、Ext JS、Dojo、Prptotype JS(DOM解析、Ajax处理、JSON支持、浏览器兼容)
四、CS和BS中的Server端的技术选型
1、微软技术体系
ASP.NET WebService、WCF、web API等
2、Java技术体系
3、数据库访问计数
(1)数据库产品
Sql Server、MySql、Oracle、DB2、Postgre、Redis等
(2)数据可访问技术
JDBC、ADO.NET、ORM等
五、其他
- 编码规范定制
- 代码管理技术
SVN,CVS,Git - Bug管理技术
jira、BugFree - 单元测试技术及自动化测试技术
- 设计模式及设计模式的六大原则
技术选型——影响因素
一、项目因素
明确项目本身的性质,包括项目的规模、重要程度、时间要求等等。
如果是一个小规模的实验性项目,那么尝试一些新技术也未尝不可。
如果时间要求非常紧,那可以考虑基于开源或商用的程序修改。
另外,项目的成本和预算也是必须考虑的。如果预算足够,也可以考虑购买商用程序或者第三方服务。
特别要注意的是那些非功能性的需求,例如对并发性、实时性、可用性、数据统一性、安全性等方面的需求,往往对技术方案的选型有很大影响。
例如支付相关的应用,对数据一致性有非常高的要求,那核心的支付数据的存储,就会倾向选择Oracle、PostgreSQL这种强一致性的数据库,而不会去选择MongoDB(据说马上也要支持事务了)
二、团队因素
技术选型一定要考虑当前团队人员的技术组成。
对于一些比较基础的技术的选型,比如语言和框架、数据库等等,往往最合适的选择就是团队最熟悉的技术。如果选择不同的技术的话,那就要考虑下团队是否有人能hold住了。
团队的发展时期对于技术选型也会有一定影响。对于早期团队,大多数员工都是喜欢创新;团队发展到一定阶段,往往会选择一些比较大众的、经过验证的技术
技术选型要保持开放。需要考虑团队人员的喜好,但千万不要因为某几个人的个人喜好,来决定技术的选型。
三、技术因素
技术特征(易用性、可维护性、可扩展性、性能等)、技术难度、社区活跃度、架构匹配和演化等等。
亲自实验一下或者做一些测试,有自己的体会。
技术发展有其内在趋势,Gartner每年都会发布一个Hypter Gartner(技术成熟度曲线)来标记各种技术的发展阶段;另外一个很好的参考是ThoughtWorks的技术雷达
技术产品和当前架构的匹配程度
四、其他因素
商业策略(诺基亚事件)等等
技术选型——步骤
参考步骤
- 首先要明确选型的需求和目的,最好能列出必须要考虑的各种因素以及评判标准。
- 寻找候选技术或产品,此时范围可以尽量广。
- 进行初步筛选
- 详细的调查和分析,做一些小Demo验证可行性
- 最终决定
技术选型——重要点
- 一定要进行可行性分析,如果不太确定,做个Demo验证一下老技术和新技术的抉择;不要有思维定势,习惯性的使用某些技术;不要过于追求新技术。
- 需考虑未来趋势、可替换性。
- 架构尽可能统一。