admin 管理员组

文章数量: 887021


2023年12月22日发(作者:serializable是类吗)

MVC模式与三层架构结合

经过老师与同学们的长期讨论,我们决定在项目的开发过程中应用MVC模式与三层架构结合的方式来实现我们架构的设计。这样种有两个好处:首先是可以实现多个视图,为我们开发不同的视图提供了很大的便利,使得我们在完成Web设计后没有必要在去设计Wap,减少了部分工作量;其次是运用三层架构,使结构层次清晰,各层之间能够并行设计;最后是采用这样的设计方式可以增加我们代码的重用性,减少耦合。

一、MVC模式和三层架构

MVC 模式包括三个部分, 即模型( Model) 、视图( View) 和控制( Controller) , 分别对应于内部数据、数据表示和输入/ 输出控制部分。MVC 模式的一般结构如图1 所示。

图模式各部分的关系和功能

MVC 设计模式从早期的客户/ 服务器应用发展而来, 因此, 它采用的是两层架构设计。但由于三层架构是对两层架构的延伸, 所以还是可以将MVC 应用于三层架构的Web 应用中。MVC 与三层架构相互结合补充, 已经成为Web 应用开发的重要模式。MVC 模式与三层架构设计之间的关系 如图2所示。

图模式与三层架构之间的关系

二、架构设计

这里的架构设计与上次的三层架构概要设计大体类似,唯一不同的在于表示层。在这里我们将表示层分为了视图与控制器。其中视图完成页面的显示功能,而控制器主要完成视图与表示层逻辑的分离,拦截用户请求,组合模型与视图并返回相应视图给用户。

模块划分及交互设计

根据前面的讨论以及上次的架构概要设计文档,可在宏观上将整个系统分为以下几个模块:

实体类模块——一组实体类的集合,负责整个系统中数据的封装及传递。

数据访问层接口族——一组接口的集合,表示数据访问层的接口。

数据访问层模块——一组类的集合,完成数据访问层的具体功能,实现数据访问层接口族。

业务逻辑层模块——一组类的集合,完成业务逻辑层的具体功能,实现业务逻辑层接口族。

虚拟工厂模块——生成数据访问层实例

辅助类模块——完成全局辅助性功能。

视图模块——完成整个系统页面的显示,以及系统与用户的交互工作

控制器模块——完成视图与表示层逻辑的分离,拦截用户请求,组合模型与视图并返回相应视图给用户

各模块间交互关系如下

图3.各模块之间的关系

根据以上分析大体可以得出系统将涉及到的项目:

 Web——完成视图与控制器的实现

 Entity——存放实体类

 Factory——虚拟工厂模式的实现,完成访问层对象接口实例的生成

 IDAL——存放数据访问层接口族

 Utility——存放各种工具类及辅助类

 DAL——数据访问层的实现

 BLL——业务逻辑层的实现

三、实体类设计

实体类是现实实体在计算机中的表示。它贯穿于整个架构,负担着在各层次及模块间传递数据的职责。在项目中我们的实体类与数据库中的数据表一一对应,并且实体类中的属性

和表中的字段也是对应的。

系统中涉及到的实体类大致如下:个人用户、企业用户、留言、评论、商品、购物车、订单、普通资讯、行业资讯、产品、超级管理员、管理员、管理员类别、管理员与管理员类别关系类、广告等。其中商品还涉及到商品类型:包括大类和小类;企业用户涉及到企业性质;普通资讯涉及到资讯类别;行业资讯涉及到行业资讯类别;产品涉及到产品的大类与小类。在实体类设计的时候,我们需要为实体的各字段生成相应的属性,必须主意各实体之间的关联。

四、数据访问层接口设计

在分层架构中,接口扮演着非常重要的角色,它不但直接决定了各层中的各个操作类需要实现何种操作,而且它明确了各个层次的职责。接口也是系统实现依赖注入机制不可缺少的部分。

本项目的接口设计将按如下顺序进行:

1.首先由前文的需求分析,列出主要的UI部分。

2.分析各个UI需要什么业务逻辑支持,从而确定业务逻辑操作。

3.分析业务逻辑层需要何种数据访问操作,从而确定数据访问层接口。

另外,为保证完全的面向对象特性,接口之间的数据传递主要靠实体类或实体类集合,禁止使用DataTable等对象传递数据。

由需求分析,可以得出用户界面(UI),在由UI可以识别业务逻辑操作,通过业务逻辑操作,我们可以得出相应的接口。具体所涉及到的数据访问层的接口,这里就不在叙述了。另外,个人觉得由于业务逻辑层的操作比较单一,主要是从数据访问层返回数据访问层的操作结果,所以在项目中不在添加业务逻辑层接口。

五、虚拟工厂模式设计

为了减少工作量,实现简单的依赖关系,在业务逻辑层与数据访问层之间添加一个简单的工厂来生成数据访问层实例。具体工厂的生成方式非常简单,就是添加一个路径属性,在配置文件中把需要用到的访问层实现添加到路径中。然后对每个接口对象生成实例并返回给业务逻辑层。

六、数据访问层的设计

在项目中我打算采用LINQ方式实现数据库的访问,主要原因是这种方式容易上手,为我们减少了不少的工作量。大体实现方式如下:首先是根据数据表中的内容生成一个LINQ的上下文环境类;其次是根据数据访问层接口添加各个具体的类,在类中运用LINQ查询语言完成数据访问层的操作。在运用LINQ的过程中,如果要传入的是一些基本类型,我们就按照基本类型处理;如果是实体对象,针对写操作,我们先把实体对象的值赋给LINQ中对应实体对象,针对读操作,我们把读取的LINQ对应的实体对象转换成我们系统中自定义的实体对象在各层之间实现传输;如果查询结果是一个集合,我们依然使用传统的DataTable方式在各层之间传输,这里需要将LINQ的查询结果转换成对应的DataTable对象。具体的实现方法我们可以写在辅助类里面。

七、业务逻辑层设计

在实际应用中,业务逻辑层是至关重要的,他承载着整个系统最核心的部分,也是客户最关注的部分。

在本项目中,业务逻辑层主要承担以下职责。

 业务逻辑数据的填充与转换。如口令的加密等。

 核心业务的实现。这里很多业务逻辑只有一行代码,即一个业务逻辑方法恰好对应一个数据访问方法,但是也有通过多个数据访问方法实现业务的。同时也包含一些不需要通过数据访问实现的业务。

具体的实现这里就不在叙述,详细参看代码的实现。

八、视图设计

在项目中我们将针对Web用户和Wap用户提供不同的视图,这也是我们采用MVC模式的原因之一。

一般来说,视图的优劣有一下两个评价指标:

 美观。即外观设计漂亮,能给人美的感觉。

 易用。即具有良好的用户体验,用户用起来舒服、顺手。

另外一个重点就是如何针对不同的用户我们选择不同的视图,这里就主要用到我们上周讨论的结果,我们将在用户申请访问网站时,判定用户所持设备的浏览器是移动设备的浏览器,还是计算机的浏览器,如果是计算机的浏览器,我们将返回Web视图,如果是移动设备浏览器,我们将返回Wap视图。具体的实现涉及到MVC模式的视图控制方面的类。这里还需要进一步的学习与了解。另外在视图设计的过程中,设计的方式与常用的Web Form的设计方式有很大的区别,这里就需要大家具体掌握MVC视图的设计方式。

九、控制器设计

在MVC模式中,控制器的主要作用是拦截用户访问,分离表示层逻辑,组合模型与视图并返回用户访问的相应视图。

在控制器的设计过程中,我们将针对视图的每一次跳转设计一个对应的控制方法。对不同视图的访问也是在控制器中来实现。另外在设计控制器的时候需要关心路由以及视图与模型之间的兼容关系。


本文标签: 访问 数据 视图 实现 逻辑