2009开始接触.Net平台的相关技术,近年来也一直在用Asp.net MVC搭建一些业务系统。今天,我将介绍系统搭建的过程中用到的技术,工具和思想,抛砖引玉!
1. 解决方案的层级结构
其实,分层的思想在很多领域都有使用。我更多的把它理解为“分而治之”,这是我们在解决复杂问题时,首先就会想到的做法。无论是政府还是企业,只要是一个组织架构,它必然会按职能划分为不同的部门,部门之间共同协作,形成合力完成组织的意志。对应到系统设计,系统也需要分层,将复杂业务逻辑,分解为简单业务逻辑的组合,以达到软件设计中推崇的“低耦合,高内聚”的特性。
我在实际工作中,一般采用领域模型驱动(DDD)的开发方式,将解决方案分成4层,每层是一个单独的项目。4层结构间采用“洋葱模型”,每层只依赖上一层,层之间不能穿透,Core这层除外。
Level 1: BusinessSystem.Core: 包括领域模型、系统的数据访问层接口和服务接口和全局的常量等
Level 2: BusinessSystem.Dal: 数据访问层,这里我采用NHibernate ORM框架. 该层主要包括,NHibernate的配置,领域模型的CRUD。
Level 3: BusinessSystem.Service: 服务层,系统的业务逻辑都包含在此,事物机制,并发处理等。
Level 4: BusinessSystem.Web:UI层,这是一个Asp.Net Mvc项目。包括Routing策略,用户交互逻辑,前台实现等。前台技术,一般采用JQuery或Dojo
除此之外,解决方案中对后面三层会有UT. 在实践中,我采用NUnit做单元测试。
2. 依赖管理工具
我们经常说:“不要重复的造轮子”,它的好处,我们就不在此赘述。所以,在开发的过程中,引用第三方的类库,借鉴前人的成果,会让我们事半功倍。如果您有一定的技术嗅觉,每当需要解决一些复杂而又普遍存在的问题时,首先想到是有没有现成的,稳定的类库可供使用。那么,在.Net世界里,你不防去nuget网站搜索。Nuget也是一个很好的依赖管理工具,你搜索到的类库可以通过Nuget直接安装到你的解决方案中,当然也可以搭建一个本地的Nuget Server, 将常用的类库放到本地Server,然后再下载。通过Nuget你可以很好的控制类库的版本升级,而不会被混乱的类库依赖所羁绊。有兴趣,可取此处下载
3. 代码管理工具
代码管理工具有很多,在微软的平台下开发,不得不提TFS. TFS是一个集中式的代码管理工具,使用时必须联网,否则无法实现代码的签出和签入,它可以很好的和VSTS集成。同时,TFS也内置一些微软敏捷开发的模板供使用,包括开发任务的创建,分配和跟踪。可以说,VSTS+TFS几乎涵盖了软件开发整个生命周期中所需要的工具。显然,它的缺点是,太重太庞大,导致运行的时候效率低下。
Git是目前非常流行的一款代码控制工具,和TFS相比,它是分布式结构。即,你用的时候可以不联网,在本地即可进行版本控制,等联网后再同步到服务器。Git的比较轻,效率比较高。例如,他的Branch操作就是一个非常轻量级的操作,远没有TFS那么重。我们可以搭建自己的Git Server供团队使用。
4. 自动化测试
很多人,尤其是测试人员,深受系统上线的折磨,因为每次上线都需要进行繁琐的回归测试工作。如何减轻系统上线的压力呢,做自动化测试非常有用。将80%的系统常用功能编写成一个个的Test Scenario,以后上线,自动完成80%的回归测试工作。当然,自动化测试的代码和UT一样需要不断的维护,但是,磨刀不误砍柴工,不要吝啬这个代价。实践中,我使用SpecFlow Automation Test Framework做自动化测试。
5. 持续集成(Continuous integration)
大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。个人在实践过程中也尝到了甜头,要实现CI,并发挥CI的作用,做好UT,AT是必要的,同时还需要搭建一套自动化环境,实践中我采用TeamCity,通过MS Build调用相应的编译,UT和AT模块
6. 常用的工具/类库
上面都是实践过程中的一些总结和个人体会,供大家参考,抛砖引玉~~~