.NET的三层架构•三层体系结构,是在客户端与数据库之间加入了一个中间层。这里所说的三层体系,不是指物理上的三层,是指逻辑上的三层,是一种体系结构,它是源自并优化了经典体系模式MVC模式的产物。通过本章的学习深入了解什么是三层结构,如何用三层结构开发应用系统,以及用三层结构开发软件系统具有哪些优势。主要内容有:•什么是三层结构?•为什么要使用三层结构?•如何应用三层结构开发软件系统?•三层结构的优势与劣势?三层结构概述•典型的三层结构包括界面层、业务逻辑层和数据访问层,使用三层结构创建的应用系统,由于层与层之间的低耦合、层内部的高内聚,使得解决方案的维护和增强变得更容易。为什么需要三层结构•如果您经营一个饭店,你会请三种员工,一种是服务员,负责给客户提供服务,另一种是厨师,负责烹饪美食,还有一种是采购员,负责为厨师提供做菜的原料。饭店将整个业务分解为三部分来完成,每一部分各负其责,服务员只管接待顾客、向厨师传递顾客的需求;厨师只管烹炒不同口味、不同特色的美食;后勤工作人员只管提供美食原料;他们三者分工合作共同为顾客提供满意的服务。在饭店为顾客提供服务期间,服务员、厨师、后勤工作人员,三者中任何一者的人员发生变化时,都不会影响其他两者的正常工作,只对变化者进行重新调整即可正常营业。有了良好而明确的分工后,管理就比较容易。如果客户批评饭店服务态度不好,肯定是服务员出问题了,不可能是厨师或采购,如果是菜的味道不好,那就是厨师的问题,与服务员无关。•用三层结构开发的软件系统与此类似,表示层就像饭店的服务员,直接和客户打交道,提供软件系统与用户交互的接口;业务逻辑层是表示层和数据访问层之间的桥梁,负责数据处理和传递,就像饭店的厨师,负责把采购回来的食品加工完成,传递给服务员。数据访问层只负责数据的存取工作,类似于饭店的采购,系统里有什么数据取决于数据访问层的工作,饭店能够提供什么样的饭菜首先取决于采购购买的材料。什么是三层结构•通常所说的三层结构包括表示层、业务逻辑层、数据访问层。采用分层设计的软件可维护性、可重用性、可伸缩性都比较好。三层结构的示意图如图15.1所示。•表示层:主要是指与用户交互的界面,用于显示数据和接收用户输入的数据,将用户输入的数据传递给业务逻辑层,一般不包含任何实际的业务处理,当业务逻辑层的数据发生变化时,表示层就会显示出更新的结果。表示层提供应用程序的用户界面,通常为Windows应用程序或Web应用程序。•业务逻辑层:是表示层和数据访问层之间的桥梁,它代表应用程序的核心功能,负责处理数据层的数据,实现业务逻辑。业务逻辑具体包含验证、计算、业务规则等等。业务逻辑层通常为类库。•数据访问层:主要实现对数据的保存和读取操作,将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库中。数据访问层可以访问关系数据库、文本文件或者XML文档,通常为类库。什么是三层结构•通常所说的三层结构包括表示层、业务逻辑层、数据访问层。采用分层设计的软件可维护性、可重用性、可伸缩性都比较好。三层结构的示意图如图15.1所示。•表示层:主要是指与用户交互的界面,用于显示数据和接收用户输入的数据,将用户输入的数据传递给业务逻辑层,一般不包含任何实际的业务处理,当业务逻辑层的数据发生变化时,表示层就会显示出更新的结果。表示层提供应用程序的用户界面,通常为Windows应用程序或Web应用程序。•业务逻辑层:是表示层和数据访问层之间的桥梁,它代表应用程序的核心功能,负责处理数据层的数据,实现业务逻辑。业务逻辑层通常为类库。•数据访问层:主要实现对数据的保存和读取操作,将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库中。数据访问层可以访问关系数据库、文本文件或者XML文档,通常为类库。三层结构的优势与劣势优势:•结构清晰、耦合度低•便于系统的维护与扩展•利于开发任务同步进行劣势:•降低了一定的性能创建三层结构•前面我们对三层结构有一个简单的认知,明白了三层结构包括的内容以及各层之间的关系,下面在VS2008中创建一个三层架构的项目。创建表示层•首先打开VS2008,新建项目,在弹出的“新建项目”对话框项目类型中选择“VisualC#”选项,模板选择Windows应用程序,填写项目名称“SchoolManager”,并选中“创建解决方案的目录”前的复选框,如图15.2所示。创建业务逻辑层•在创建好的解决方案名称上右击,选择“添加”→“新建项目”选项,打开“添加新项目”对话框,在模板中选择“类库”选项,填写名称“BLL”,如图15.3所示。创建数据访问层•创建数据访问层和创建业务逻辑层的方法相同,只是在名称中输入“DAL”,如图15.4所示。添加各层之间的依赖关系•三层的框架已经搭建成功,但是每层之间是互相独立的,.NET应用程序中需要对层之间添加引用,创建依赖关系。•1.实现表示层对业务逻辑层的引用•打开“解决方案资源管理器”面板,右击表示层的“引用”图标,选择“添加引用”选项,如图15.5所示,打开“添加引用”对话框,如图15.6所示。•在“添加引用”对话框中选择“项目”选项卡,选中名称“BLL”,单击“确定”按钮即可。此时在表示层的引用目录中可以看到刚才添加的“BLL”,如图15.7所示。•2.实现业务逻辑层对数据访问层的引用•操作方式和界面层引用业务逻辑层相同,不再详述。三层结构应用示例——用户登录实现•这一节使用三层架构实现一个简单的用户登录功能。建立数据库•首先建立数据库,在VS2008中打开“服务器资源管理器”面板,创建数据库,名称为“StudentInfo”,创建完成后在其中添加表,创建表“Login”,存储用户登录的信息,数据表的结构见表15.1。创建三层架构的项目•运用前面学过的知识,创建一个三层架构的项目,项目名称为“SchoolManager”,创建业务逻辑层和数据访问层,添加层之间的依赖关系。创建好后的解决方案如图15.8所示。添加实体层•三层架构搭建好之后,有一个问题需要解决,使用什么在三层之间传递数据呢?目前通用的解决方法有两种:一种是使用实体类在三层之间传递数据,一种是使用DataSet在三层之间传递数据。使用实体类的主要好处在于实体类是一个比较易于控制的对象,它具有面向对象的基本特征,可以自由的向实体类添加行为等。实体类是业务逻辑对象的基础,用面向对象的思想消除了关系数据与对象之间的差异。•实体类通常是一个存储应用系统信息的数据表,将数据表中的字段定义成属性,将这些属性封装成一个“类”,就是实体类。•本例中创建一个实体类Login.cs,用来反映数据表Login中的记录。添加实体层的方式和创建业务逻辑层的方式相同,在解决方案中添加“Model”项目即可。添加完成后的解决方案如图15.9所示。编写实体类Login.cs•实体类Login.cs和数据库中Login表相对应,将那个数据表中的字段定义为属性。登录界面设计•在界面层“SchoolManager”上右击,选择“添加”→“添加Windows窗体”命令,添加窗体文件“LoginForm.cs”。界面设计如图15.10所示。数据访问层代码编写•在数据访问层添加类“LoginService.cs”,编写访问数据库的代码。为了访问的简化,将数据访问层中的类都设为静态类,其中的方法和变量都是静态的。在数据访问层的类中编写根据用户名获得用户的方法。业务逻辑层用户登录代码编写•在业务逻辑层中添加类“LoginManager.cs”,编写代码实现用户登录的业务逻辑。业务逻辑层负责把数据层获得的数据传递到界面层,在传递过程中,根据业务需求编写规则,返回请求的数据。•本示例比较简单,根据用户ID能够查询到用户信息就返回true,否则返回false。示例代码如代码15-3所示。用户登录界面层编码•在界面中输入用户名和密码,如果用户名和密码正确,则显示登录成功,否则提示输入错误。首先对输入框进行验证,给出提示信息。小结•三层结构中的三层是指表示层、业务逻辑层和数据访问层。•三层结构中各层的依赖顺序是:界面层依赖业务逻辑层,业务逻辑层依赖数据访问层。•各层项目间不能循环引用。•可使用DataSet或者实体对象在三层之间传递数据。