1.1.1五层的逻辑架构
层 |
角色 |
表示层 |
负责显示和收集用户输入 |
用户界面层 |
用户和业务逻辑的中间层,负责收集用户输入并提供业务逻辑,然后把结果返回给用户 |
业务逻辑层 |
负责提供应用程序所有的业务规则、数据验证、数据操作、数据处理和安全 |
数据访问层 |
业务逻辑和数据管理之是的中间层。还封闭并包含所有的数据访问技术(如ADO.NET )、数据库和数据结构信息 |
数据存储和管理层 |
负责数据在一个持久的数据存储中物理的创建、提取、更新和删除 |
逻辑N层架构的好处就是把所有的功能区分开、形成清晰定义的角色或组,使架构变得更加清晰和可维护。
1.1.2逻辑架构的应用
性能最优的Smart Client
一个性能最优的Smart Client通常就是用Windows Forms实现表示层和UI层,而且业务逻辑层和数据访问代码也在同一个进程中运行,访问一个Access或者SQLSERVER数据库,把所有的东西运行在同一台客户机上,适用于独立环境。
表示层 用户界面层 业务逻辑层 数据访问层 数据存储和管理层 |
缺点:扩展性差。
高可扩展的Smart Client
把数据访问层移到另一台独立的电脑上的办法来牺牲一部分性能,以获取可扩展性。单层和两层的配置有最好的性能,但是它们没像三层配置那样好的可扩展性。一个很好的经验法则是,如果你有50到100个的并行用户,你就可以从使用单独的服务器来处理数据访问中获得好处。
另外一个把数据访问移到应用程服务器的理由就是安全。因为数据访问层包含有直接操作数据库的代码,所以运行数据访问层的电脑一定要有用户名和密码来访问数据库服务器。
还可以把业务逻辑层也放到应用服务器上。这对于非交互性的过程非常有用,如批量更新或数据密集型的业务算法。然而,大多数的应用程序允许用户交互,所以有非常明确的需要来让业务逻辑层运行在客户机,提供高级别的用户交互性。
表示层 用户界面层 业务逻辑层 |
业务逻辑层 数据访问层 |
数据存储和管理层 |
3最优化性能的WEB客户端
与Windows Forms应用程序一样,基于Web 的应用程序可以通过最少的物理层数来得到最好的性能。然而,在此Web 情况下,我们需要有不同的取舍:在这种情况下我们可以同时改善性能和可扩展性,但是要牺牲安全性为代价。
要想在Web 应用程序中获得最优的性能,最好是把多数代码放在同一台电脑的同一个进程中来运行。
表示层一定是物理上独立的,因为它在浏览器上运行,但是UI、业务逻辑和数据访问层都可以运行在同一台电脑的同一个进程中。
这样做可以把网络和通信的开销降到最低,从而得到最优的性能。
表示层 |
用户界面层 业务逻辑层 数据访问层 |
数据存储和管理层 |
在物理第二层可以通过用集群获得非常好的扩展性,因为可以用web集群来在很多web服务器上运行相同的代码。
4高安全性的web客户端
有很多项目规定web服务器不可以直接访问数据库。Web服务器必须运行在一个“非军事区”(DMZ)内,被外部防火墙和第二道路内部防火墙夹在中间。Web服务器必须通过内部防火墙与另一台服务器通信来访问数据库或其他任何内部系统。
在三层的Windows客户端情况下,把业务逻辑层部署在Web服务器和应用器上可以获得极大的好处。这样的部署使得Web Forms的UI代码可以在合适的时候与业务逻辑机密进行交互,同时保持了非交互性的处理只运行在应用服务器上。
如下图,虚线表示防火墙。
表示层 |
用户界面层 业务逻辑层 |
业务逻辑层 数据访问层 |
数据存储和管理层 |
把数据访问层分离出来并且运行在独立的应用服务器上可以增加应用程序的安全性。然后这会带来前面所说的性能代价,这种设置通常会造成性能下降50%。但是另一方面,这种设计有着很好的可扩展性:如第一个Web设置,可以通过每web服务器都运行相同的UI和业务逻辑代码的Web集群实现.
1.2逻辑的管理
1.2.1在不同层中分享业务逻辑
方案:把业务逻辑集中在部署的客户机(或Web服务器)的业务逻辑层,这样UI层就可以访问业务逻辑;部署在应用服务器业务逻辑层中,这样业务逻辑就可以有效地与数据访问层交互。这样的做法能同时获得如下好处:丰富交互性的用户体验和访问数据库(或其它数据源)时高效高性能的后台处理。
在理想化的情况下,业务逻辑在与用户交互的时候会与UI代码运行在同一台电脑上,而在访问数据库的时候会与数据访问代码运行在同一台电脑上。业务逻辑必须提供一个友好的接口方便UI开发人员使用来调用数据验证和处理的逻辑,而且还必须能高效地使用数据访问层来读取和写入数据。
用来解决这个看起来很棘手的需求的工具就是封装了应用程序的数据和相关业务逻辑的移动业务对象。
1.2.2业务对象
设计任何类型的软件对象的首要目的就是创建对某些实体或概念的抽象表述。
成功的对象设计的关键是封装这个概念。封装的意思就是把对象看作一个黑箱子:它包含逻辑和数据,但是对象的用户不知道里面数据和逻辑具体工作的细节。有户所做的只是使用这个对象。
设计良好的对象对行为或逻辑,以及逻辑所需要的数据两者都进行封装。
业务对象与普通的对象的区别仅仅在于它们表达的内容不同。
业务对象提供了业务或问题领域中的实体或概念的抽象表述。
1.2.3移动对象
通过远程调用、序列化和部署技术,.net框架可以直接支持移动对象的概念。有了这个能力,你就可以用数据访问层(运行在应用服务器上)来创建对象,然后装载从数据库撮出来的数据。你可以把这个业务对象传给客户机(或Web服务器)那里的UI代码就可以使用这个对象了。
移动对象
移动对象的概念依赖于对象可以被以按值的方法在进程或电脑之间传递的思想。
要想在.NET中创建一个移动对象,在你的类定义中加入[Serializable()]属性就可以了。
在对象可以在电脑间移动之前,双方的电脑必须要安装包含该对象代码的.NET程序集。只有该对象的序列化才可以被.NET在网络上移动。安装所需的程序集这样的工作经常可以用ClickOnce或其他.NET部署技术来完成。