Asp.Net大型项目实践(2)-新建项目及分层(附源码)
- 开发环境准备...
Microsoft Visual Studio 2008
Microsoft Visual Studio 2008 Sp1(补丁)
Microsoft ASP.NET MVC 1.0 - 新建解决方案
新建空白解决方案 HISDemo - 新建解决方案文件夹
对于大型项目而言,模块和代码众多,我们可以通过“解决方案文件夹”来对项目进行合理的管理,如下图:
lib文件夹用来存放项目中引用的第三方dll(这样有个好处,你可以把DLL拖进去,这样当你项目绑定VSS后,这些DLL大家就可以通过VSS获取了)
Presentation(展示层)用来存放UI层相关代码
因为项目模块众多,我们可以按照粗粒度的模块进行划分如Infrastructure(基础数据设置模块),住院模块,门诊挂号模块....
注:解决方案文件夹可以用中文,你也可以按照你的习惯和具体项目情况进行划分,总的原则就是方便管理和查看 - 基本分层思想
时间关系图花的比较糙,有些术语也不是很规范,能理解意思就行,如图:
数据访问层Repositories:主要用NHibernate访问数据库,但也有可能去访问其他模块或系统的WebService,也有可能用Linq去访问一些缓存(内存中的)数据,也有可能访问XML,文本文件等等....
业务领域层Core:系统的核心层,所有与数据访问无关的业务逻辑都应该内聚在这里,业务领域对象理论上应该是充血的,内聚自己的业务逻辑。但有一些业务逻辑在设计的时候涉及到了多个业务领域对象 ,我们很难决定放在哪个具体的业务对象里,所以我们有一个Service层来放这种业务逻辑。
装饰层Facade:把数据访问接口,业务领域对象的业务逻辑,Service接口简单的封装一下成为Facade层接口供展示层UI或SOA层调用,这个层需要注意的是它只是简单的封装,免得UI层调太多层的接口,这层不应含有业务逻辑。
SOA层:因为系统比较庞大 模块很多,且业务上要求各大模块间需要一定解耦,所以这一层作用是作为各大粗粒度模块间调用以及给其他系统调用,比如有基础数据管理大模块和门诊挂号大模块,他们之间的调用是必须要通过SOA层的,而不能直接走Facade层,传输的对象应该新建DTO数据传输对象,而不应该直接传递业务领域对象,从而通过SOA层我们把各个粗粒度模块完全隔离开。这个层取名为SOA也许不大恰当,大家也不必深究...计划是采用WCF 这样可以灵活的配置通讯方式
表现层Presentation:由Asp.net MVC的Action给ExtJs传输数据 ,Controler只需调用Facade接口
公共类库FrameWork:整个项目框架的公用代码,相当于公共类库,也许叫FrameWork不大恰当 呵呵 - 新建分层项目
新建3个类库项目如图:
注意修改一下项目的命名空间,如Demo.HIS.Infrastructure.Core [公司名].[项目名].[大模块名].[分层名]....在实际项目中合理的命名空间是很重要的
再在Presentation文件夹下新建2个项目Demo.HIS.MVC(项目类型:类库)和DemoHisSite(项目类型:Asp.net MVC Web Appliction),如图:
最后在解决方案根目录下新建一个类库Demo.HIS.FrameWork作为我们的公共类库就完成了,最后的项目结构是这样的:
这样我们整个系统所需的项目就建立完成了