凡是接触.net开发的,首选要理解的就是三层架构的重要思想。关于三层架构的概述 我就不多说了,相信大家都早已明白。
三层架构(3-tier application) 就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
区分层次的目的即为了“高内聚,低耦合”的思想。
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层是直接操作数据库的,针对数据的增添、删除、修改、更新、查找等。
各层关系如下图所示:
我进入公司之后,所接触的项目都是建立在十个模块的基础之上。所谓十个模块 其实就是三层架构的具体应用。
增加了网络通讯模块,实现远程调用。服务端运行着Windows service 来产生数据访问模块的对象提供给客户端请求调用。
这样处理,使得整个C/S模式中,一旦底层方法发生变动时,只需要更新服务器上相应的dll,而不需要客户端主机同步更新,
减少了维护成本。
下面说下十个模块中,每个模块的作用以及模块与模块之间的关系。
0L模块:即启动模块。用来控制画面模块中主画面的启动。
namespace CompanyName.Application.UI。
1U模块:即画面UI模块。创建用户界面。namespace CompanyName.Application.UI。
2C模块:即画面逻辑模块。处理与画面相关的逻辑控制,封装下层方法供UI模块使用。
namespace CompanyName.Application.Controller。
3E模块:即画面实体类模块。根据画面设计相应的实体类或者枚举类型。
namespace CompanyName.Application.Entity。
4A模块:即业务逻辑模块。业务逻辑的处理,以及上下模块之间数据的转换。属于中间模块。
namespace CompanyName.Application.Access。
5G模块:即网络模块,也称远程调用模块。获取远程服务器上的对象,进行远程调用。
namespace CompanyName.Application.Remoting.Mediation。
6O模块:即接口模块。定义接口,用来规范数据访问层的方法设计。可以对子类进行封箱和拆箱,也便于网络传输。
namespace CompanyName.Application.Remoting.Interface。
7D模块:即数据库实体类。这一模块所定义的类,是完全按照数据库中表结构来定义属性的。与3E模块不同在于,
3E模块类中具有一些类方法,比如Clone();Compare();Equals();等。而D模块则除了get {}set{} 方法之外的额外方法。
namespace CompanyName.Application.Remoting.ParamData。
8P模块:即数据库逻辑模块。继承O模块接口,封装R模块方法。处理一些数据序列化转换。
namespace ThreeHigh.Application.Remoting.Bussiness。
9R模块:即数据库访问模块。直接访问数据库,针对数据的增添、删除、修改、更新、查找等。
namespace CompanyName.Application.Remoting.DAO。
具体项目中一本程序的框架如下图所示。
顺便强调下各个模块之间的引用关系:
L—>U 即L模块参照引用U模块程序集。以下相似。
U—>2C 3E.
C—>3E 4A.
E—>不参照其他模块。
A—>3E 5G 6O 7D.
G—>6O.
O 和D 不参照其他模块。
P—>6O 7D 9R.
R—>7D.
因为公司的程序都是与公司的数据库有关的,而且有调用了很多共通的类与方法,没办法单独运行,所以程序源代码就不再上传了。
我觉得关键的技术主要在远程调用对象和服务器生成对象。下一篇文章 我将会重点阐述,G层以及服务器端Service的工作原理。
由于这是本人第一次发表文章,不足之处,还望大家多指正,多批评。