一、前言
前段时间看了两篇关于企业应用架构的文章,感触颇深。这两周一直在研究怎么架构一个良好的.Net开发平台,所以总结一下自己心目中的架构。
二、企业应用架构设计
1. 粗架构
我觉的所有的架构都是要分层,这么做的目标很明确。因为分层可以随需而变。而所有的多层架构都可以归纳为三层架构,只是在这个基础上的演化,将每个层再细分为多个层。
例如展现层可以细分为UI(User Interface)层和UIP(User Interface Process)层,将用户界面和用户界面逻辑处理分离。当你的用户界面逻辑非常复杂时,如果不这样分层,你的UI中将会到处充斥着逻辑控制代码,这样的代码在复用性,可维护性和扩展性上都非常差。
商业逻辑层应包含很多东西: 领域模型, 商业规则(易变), 工作流(易变), 安全控制及其他服务。在企业中,商业规则和业务流程是最容易变化的东西。所以你最好将最容易改变的东西包装成一个逻辑单元,这样你才能随需而变。但我认为这些内容并不适合分层,因为这些内容之间都互相的交叉依赖,而且分这么多层会影响应用程序的性能。那么怎么将这些组件装配成一个企业应用并且使得它们之间的依赖和耦合最低呢?目的是修改任何一部分内容都不要影响其他的组件,答案是AOP。
数据访问层包含数据访问接口和数据提供者。数据访问接口供商业逻辑层来使用,例如领域模型中有Order对象,数据访问层提供LoadOrder、CreateOrder、SaveOrder和DeleteOrder等基本操作。数据提供者(Data Provider)抽象了底层的数据访问接口,使得你的数据的存在形式可以多变,例如可以是数据库、文件等。企业应用离不开数据库,而数据库访问离不开SQL语言。要避开为每个对象写CRUD的脚本,应用ORM是个好的选择。
2..Net下的应用
要架构.Net下的企业应用,首先要知道有哪些现成的资源可以利用:
AOP: Spring.Net , AOP.Net, Aspect# 等
ORM: NHibernate, iBatis.Net, Castle.ActiveRecord,Entity FrameWork 等
Workflow: DotNetTools Workflow
RuleEngine:NxBRE
Log: Log4net, Microsoft.EnterpriseLibrary
Test: NUnit, NUnitAsp
Web框架: CastleOnRails(MonoRails), Lattis, Maverick, Microsoft Application Blocks.User Interface Processing
前段时间看了两篇关于企业应用架构的文章,感触颇深。这两周一直在研究怎么架构一个良好的.Net开发平台,所以总结一下自己心目中的架构。
二、企业应用架构设计
1. 粗架构
我觉的所有的架构都是要分层,这么做的目标很明确。因为分层可以随需而变。而所有的多层架构都可以归纳为三层架构,只是在这个基础上的演化,将每个层再细分为多个层。
![](https://i-blog.csdnimg.cn/blog_migrate/3f4dd52383dbf1a5299602ed1eb9014a.jpeg)
例如展现层可以细分为UI(User Interface)层和UIP(User Interface Process)层,将用户界面和用户界面逻辑处理分离。当你的用户界面逻辑非常复杂时,如果不这样分层,你的UI中将会到处充斥着逻辑控制代码,这样的代码在复用性,可维护性和扩展性上都非常差。
商业逻辑层应包含很多东西: 领域模型, 商业规则(易变), 工作流(易变), 安全控制及其他服务。在企业中,商业规则和业务流程是最容易变化的东西。所以你最好将最容易改变的东西包装成一个逻辑单元,这样你才能随需而变。但我认为这些内容并不适合分层,因为这些内容之间都互相的交叉依赖,而且分这么多层会影响应用程序的性能。那么怎么将这些组件装配成一个企业应用并且使得它们之间的依赖和耦合最低呢?目的是修改任何一部分内容都不要影响其他的组件,答案是AOP。
数据访问层包含数据访问接口和数据提供者。数据访问接口供商业逻辑层来使用,例如领域模型中有Order对象,数据访问层提供LoadOrder、CreateOrder、SaveOrder和DeleteOrder等基本操作。数据提供者(Data Provider)抽象了底层的数据访问接口,使得你的数据的存在形式可以多变,例如可以是数据库、文件等。企业应用离不开数据库,而数据库访问离不开SQL语言。要避开为每个对象写CRUD的脚本,应用ORM是个好的选择。
2..Net下的应用
要架构.Net下的企业应用,首先要知道有哪些现成的资源可以利用:
AOP: Spring.Net , AOP.Net, Aspect# 等
ORM: NHibernate, iBatis.Net, Castle.ActiveRecord,Entity FrameWork 等
Workflow: DotNetTools Workflow
RuleEngine:NxBRE
Log: Log4net, Microsoft.EnterpriseLibrary
Test: NUnit, NUnitAsp
Web框架: CastleOnRails(MonoRails), Lattis, Maverick, Microsoft Application Blocks.User Interface Processing