2022年ASPNetMVC+三层架构 .pdf





《2022年ASPNetMVC+三层架构 .pdf》由会员分享,可在线阅读,更多相关《2022年ASPNetMVC+三层架构 .pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 理解几个概念1.1MVC 模式与三层架构首先对这个题目,本身是存在问题的,“XX 结构”与“ XX 模式”的区别?请问中国社会制度与美国人生活方式有什么区别?这两者本身讲的是不同方向与角度的问题,在实际应用中他们的确存在一些相似的特点,在很多书籍中也没有深入讲解,以致于造成困惑,为了更好的理解他们,姑且来说说区别吧。首先N层结构是一种软件抽象的层次结构,是对复杂软件的一种纵向切分,每一层次中完成同一类型的操作, 以便将各种代码以其完成的使命作为依据来分割,以将低软件的复杂度,提高其可维护性。一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(
2、契约)的变化将使上层的代码一起变化。三层结构是N层结构的一种,是人产在长时间使用中得出来的一种应用场合广泛的N层结构,被当作一种典型的软件层次结构而广为流传甚至写入教科书。MVC 模式是一种复合设计模式, 一种在特定场合用于解决某种实际问题来得出的可以反复实践的解决方案。 巧合的是他也有三个事物组成,于是乎人们就有了一种想当然的对应关系:展示层 -View;业务逻辑层 -Control ;持久层 -Model。首先 MVC 中的三个事物之间并不存在明显的层次结构,没有明显的向下依赖关系, 相反的,View和Model往往是比较独立的,而Control是连接两者的桥梁,他们更像是横向的切分。这样
3、一来就出现一个结果,MVC 中每个块都是可以独立测试的,而三层结构中,上层模块的运行测试势必要提供下层代码或者提供相同接口的桩。相对来说, MVC 复杂得多,但是结构更清晰,耦合性更低。另外, MVC 中每一块内部特别是 Model内部经常被设计为多层的。在我认为的一个良好的MVC 模式构建的结构中, Control 是核心,小且较为稳定的,可以作为一个核心框架来提供,有扩展点,但基本上可以简单配置不需要任何代码就可以运行。而View则可能是一套或多种可选择的视图引擎,决定了软件展示给用于的界面,使用时的主要工作量在于扩展点以及根据需要而数量不同的视图模板。Model则是业务提供者,决定了软件
4、提供的功能,其内部可能是一些普通的类或者是实现了某些接口的类,在这一块当中可能根据业务的不同而色彩缤纷,对于复杂的软件可能会分成很多层,如业务逻辑层、业务提供层、系统提供层、数据提供层、数据访问层等。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 用于比喻 MVC 的例子是小时候玩的那种卡带式游戏机,Control 是主机,一般来说我买一个主机就行了,只要他不坏,他就能一直让我玩这一类的游戏。View则是电视机和游戏手柄,电视
5、机可以独立工作,他不管输入的是电视信号、影碟机信号还是游戏机信号,他只管显示,而且他决定了我们看到的效果是怎么样的,如果我想要个尺寸更大的或者彩色的显示效果,我只需要买个相应的电视机就行了,手柄也是可以换的,要遥杆还是带震动的。Model则是游戏卡带,他绝定了我玩的是什么游戏,是魂斗罗还是超级玛莉,而且游戏机主机和电视机生产厂家永远也不知道在上面有可能会运行什么样的游戏。卡带中可能会有游戏代码和存储单元,都根据游戏的需要而设计。有朋友提到游戏主机提供的卡带插槽的接口,在设计中,有时也由 Control 提供一组接口,以用于 Model或View的实现,这样就形成了依赖。一般来说这样设计也没有太
6、大的问题,只是会提高模块间的耦合度,也会带来一些侵入性。为了更完美,可以不用接口来提供契约,可以用配置信息(或称元数据信息)+反射来提供契约,那么这个类接口就可以退化到只要符合CLS 就可以了,也就是普通的类,就像现在的计算机接口广泛采用USB ,无论是 U盘、打印机、扫描仪或者是加密狗,他们都是普通的USB 设备而已。三层架构中, DAL(数据访问层 ) 、BLL(业务逻辑层 )、UI层各司其职,其目的在于职责分离。MVC 是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC 把三层架构中的 UI层再度进行了分化,分成了控制器、视图、
7、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;控制器直接与三层中的BLL进行对话。Asp.NET MVC 是微软新发布的一种网站开发架构。为了解决传统Asp.NET 开发中不能分离Model,View和Controller而设计的。普通的网站为了解决可移植,可维护,可扩展等问题,会把网站设计成三个独立的模块,Model负责数据库部分, View负责网页的界面, 而Controller负责界面与数据的交互及业务逻辑,这样设计的网站如果想设计或者重新开发某一个模块对其他的模块是没有影响的。但是Asp.NET 的页面后台代码与每个页面代码都是一一对应的,业务逻辑在某些情况下不可避免的
8、被写到了与 View关联的后台代码中。这样就不能保证View与Controller的分离,也就很难实现网站的重写和升级。而在 MVC 中页面代码并不是与后台代码一一对应,而是分别被存放成Controller和View两个部分,彻底的解决了View和Controller不能独立的问题。从而改善网站的重写和升级过名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - - - - - - - - 程。但是MVC 也有其缺点,由于在页面代码中不再可以使用服务器控件,因此
9、给某些Asp.NET服务器端控件的使用带来了麻烦,而且MVC 也给页面的设计工作带来了很多障碍。ASP.NET MVC 是 微 软 在 2009 年 4 月 份 发 布 的 一 种 新 的 网 站 开 发 架 构 ,http:/ 开发思想融合到了 ASP.NET 的开发当中。1.2EF开发模式1.2.1Entity Framework 架构原理回顾EntityFrameworkEF 是微软一个开源的 ORM (对象关系映射)框架,是微软主推的数据存储技术,常用于构建数据存储层,使应用程序以对象模型的方式访问关系数据库的内容。EF的架构和原理 EF的核心内容是 EDM(Entity Data M
10、odel)。 可以理解为它是一个 ADO.NET的增强版,它的底层是 ADO.NET provider ,上层则是应用程序,它提供了更灵活,更简单方便的数据存取方式。EF的优点它是一个开源框架,支持多种数据库(目前看来最稳定的是SQL Server ,而Oracle 的支持一直不太完美),将应用程序和数据库结构很好的分隔开,支持多种开发模式。EF的缺点 它是在 ADO.NET 的基础上做的扩展, 性能比 ADO.NET 有所损失,但是只要合理的利用EF,避免一些劣质查询语句带来的损耗,还是能有效提高EF 性能。1.2.2Entity Framework 开发模式EF提供了四种开发模式,具体如下
11、:Code First(New DataBase):在代码中定义类和映射关系,并通过model生成数据库,使用迁移技术更新数据库。Code First(Existing DataBase):在代码中定义类和映射关系,给逆向工程提供工具。Model First:在设计器中创建 Model,并用 Model生成数据库。所有的类由Model自动生成。DateBase First:在设计器中逆向生成 Model,并有 Model自动生成所有的类。这四种开发模式究竟如何使用,在那些地方使用,下面来一一分析。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
12、- - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - DataBase First 模式是EF 最早使用的开发模式,也是最简单的开发模式,它通过已存在的数据库逆向分析出Model,并获取 Class信息。这种方式的好处是开发简单,便于管理,不便之处是限制了开发人员对 Model的修改,当然,为此 EF在4.0 版本也提供了新的功能,支持POCOs ,让开发人员能够方便的对数据库进行操作。鼠标右击 MVCStudent 项目名称,选择“选择 新建项”菜单项。弹出“添加新项”对话框,如下:名师资料总结 - - -精品资料欢迎下载 -
13、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页 - - - - - - - - - 选择“数据 ADO.NET实体数据模型”,然后点击“添加”按钮。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - 选择“从数据库生成”,然后点击“下一步”按钮。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
14、- - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - - - - - - - - - 选择需要连接的数据库引擎和数据库,或者新建连接,按“下一步”。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - 选择要创建实体模型的数据库对象后,按“完成”按钮,即可成功创建一个实体模型,并添加到MVCStudent 项目中。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
15、- - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - Model First 模式这个模式在实际应用中并不多见,如果建立一个小型数据库模型,可以尝试这种方法,它需要我们在 VS 的设计其中定义 Model,然后通过 Model建立数据库。(这里不做详细介绍)Code First - New DataBase 模式这个模式对于中小型项目比较适用,代码相对简洁清爽,但Code First 对于数据库更新是件比较麻烦的事。在上一讲的例子中使用的就是这种模式。 先创建一些我们需要的类,如:学生信息类。publicclassS
16、tudent 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - - - - - - - - Key StringLength(5) publicstring Sno get ; set ; Required StringLength(6) publicstring Sname get ; set ; StringLength(2) publicstring Ssex get ; set ; Range (18, 30) publicint Sage get
17、 ; set ; StringLength(2) publicstring Sdept get ; set ; 创建一个继承自 DbContext的类,如: StudentDbContext ,该类中需要使用 DbSet来把我们刚才创建的类放在实体集中,如下:publicclassStudentDbContext : DbContext publicDbSet Students get; set ; 给 StudentDbContext一 个 实 例 , 如 : private StudentDbContext db = new StudentDbContext();,就可以对数据库进行操作了
18、。并通过SaveChanges 方法保存数据。Code First - Existing Database 模式通过使用 EF PowerTools逆向生成数据库所有的表再由应用程序修改使用。但在EF5中,EF PowerTools还处于测试阶段,这里就不针对这种方法做进一步介绍了。2 使用三层架构访问数据2.1添加 Model类库在MVCStudent 解决方案中添加 Model类库, 将MVCStudent 项目中 Models文件夹下的学生类Student.cs 移出到 Model类库中,修改 Student.cs 文件的命名空间名为 Model,添加三个引用(见下图),并添加一个构造函
19、数。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 21 页 - - - - - - - - - 2.2添加 DAL 和BLL类库在MVCStudent 解决方案中添加 DAL 和BLL两个类库,在其中定义存取学生数据的方法。鼠标右击 MVCStudent 解决方案名称, 选择“添加 新建项目”子菜单, 弹出“添加新项名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
20、 第 11 页,共 21 页 - - - - - - - - - 目”对话框,如下。选择“Windows ”模板,选择“类库”文件类型,在“名称”中输入“DAL ”或“BLL ”,即可创建数据访问层类库DAL ,或业务逻辑层类库 BLL。定义DAL 在DAL 项目中添加一个类,命名为StudentDAO ,其对应的文件为 StudentDAO.cs。首先添加一个私有字符串变量_connStr , 用于保存数据库的连接字符串。 定义StudentDAO类的构造函数, 在构造函数中从 MVCStudent 项目的 web.config 文件的“connectionStrings”节获取连接字符串,
21、代码如下:publicclassStudentDAO privatestring _connStr; public StudentDAO() ConnectionStringSettings cfg = ConfigurationManager.ConnectionStringsStudentDbContext; _connStr = cfg.ConnectionString; 注意, web.config 文件中的“ connectionStrings”节定义的连接字符串如下: 接下来,实现 StudentDAO 类的几个主要方法,包括:得到学生数据、插入/ 修改/ 删除学生数据的方法,实现
22、的代码参见如下:得到所有学生数据的方法GetStudents 代码如下:publicList GetStudents() SqlConnection conn = new SqlConnection (_connStr); try SqlCommand cmd = new SqlCommand ( SELECT * FROM Students , conn); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); List students = new List (); while (reader.Read() string sno
23、= readerSno .ToString().Trim(); string sname = readerSname.ToString().Trim(); string ssex = readerSsex .ToString().Trim(); int sage = Convert .ToInt32(readerSage); string sdept = readerSdept .ToString().Trim(); students.Add(new Student (sno, sname, ssex, sage, sdept); reader.Close(); return students
24、; finally conn.Close(); 得到指定学生数据的方法GetStudent 代码如下:publicStudent GetStudent(string no) SqlConnection conn = new SqlConnection (_connStr); try string sql = string.Format( SELECT * FROM Students WHERE Sno=0, no); SqlCommand cmd = new SqlCommand (sql, conn); conn.Open(); SqlDataReader reader = cmd.Exec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年ASPNetMVC+三层架构 2022 ASPNetMVC 三层 架构

限制150内