如何编写带有ORM的三层架构,最好给个例子看看。

作者&投稿:苏闵 (若有异议请与网页底部的电邮联系)
怎么使用三层架构~

学ASP.NET都知道它的最经典的架构是三层架构,也是目前应用得最广泛的一种架构。以前说起三层架构大家都知道MVC架构,这是html开发中用得比较多的,现在AJAX主要就是用这种架构。大家ASP.NET的三层是指数据访问层,业务逻辑层和表示层,而且都知道数据访问层是用来访问数据的,业务逻辑层是用来处理一些系统的业务逻辑的,表示层就是把内容呈现出来给用户,与用户进行交互的。划分三层的好处就是每一层都是独立的,修改其中一层一般不会影响其他层的代码,这样就大大的方便了日后的维护和升级。它最大的缺点是架构和编码都比较复杂,而且对性能的提高没有任何帮助,反而还可能会降低执行效率。

  有时候真的觉得“三层”编起来挺麻烦的,在ASP.NET 2.0里,访问数据和显示出来只要拖两个控件就可以了(AccessDataSource/SQLDatasource和GridView),几分钟一个页面就出来了,而且还具备了修改中,删除,分页,排序等功能。而用三层架构就麻烦多了,先要写数据访问层的代码,接着写业务逻辑层的代码(要调用数据层的方法),最后才是表示层,也就是页面的设计,还有调用业务逻辑层的代码读取数据。(注意:表示层是绝对不会访问数据层的内容,只能通过业务层。业务层在这里是连接它们的桥梁。所以说业务层是最重要的一层)既然这样为什么还要用三层呢?前面提到的一层架构的一个很大的问题就是前台和后台代码没有很好的分开,不利于分工,第二,不利于日后的维护和升级。如果是个人主页或者是一些一个人完成的小系统用一层还是挺方面的。如果是一些比较大的系统,特别是企业级的应用,就非用三层甚至n层不可了。一般三层就很够了,再划分更多只会增加设计和编码的难度。

  那到底怎么去分层呢?怎么样分层就符合三层架构原则呢?这是很多刚入门的人经常问的问题。我翻了很多本案例书,可惜很多都是一层或者是两层架构的,绝少三层的。后来研究了petshop4.0和下了一些国外的资料来看才开始对如何分层有点了解。我总结了一下主要有以下三种分层方式:

  一:数据层不包含任何代码,只有数据库,还有相关的存储过程。

  这种模式下,数据层看起来就变得很简单了。只包含你建立的数据库,和一些存储过程(注意是存储过程)。其实这些存储过程的建立也是相当复杂的(我以后会专门写一篇这方面的文章),因为它们可以完成除数据访问外的其他一些很强大的功能,如分页,实现搜索算法等。数据访问的逻辑就都放在业务层,当然业务层还包含其他一些逻辑代码。我们来看一个示例,假设数据库里有一个表BOOKS(书),建立一个存储过程GetAllBooks,用来读取书的信息,这样在业务层里编一个方法GetBookS()和一个公用数据库访问类,GetBooks()就通过数据库访问类打开连接,执行在存储过程,返回数据(返回类型可以是DataTable,DataSet,DataReader或者实体类)。业务层单独编译成一个或者几个DLL文件。接着就是表示层了,表示层通过调用GetBookS()返回数据绑定在相关的控件里。务层的方法都是在表示层调用。一般来说book.aspx和book.aspx.cs都是表示层的内容。所有前台的设计,相关控件,数据缓存都是属于表示层。

  二:数据层还包含所有公共数据访问代码。

  这种模式和前一种差别不大,主要是把数据访问代码六到数据层。这样可以很方面实现对多数据库的支持。业务逻辑层直接调用数据层的相关访问数据的代码,完全不必了解底层是什么数据库。其他和前一种没什么分别。

  三:所有数据读取都放在数据层。

  这种模式下像前面所述的GetBooks()方法都是放在数据层,在业务层再定义一个GetBookS()方法以供表示层调用。这种模式下业务层不但不必了解底层是什么数据库,而且连数据库的结构都不必了解了。这可以说是最标准的三层架构了,在Microsoft的PetShop 4.0里就是用这种模式。

我是从“上海全鼎软件学院”毕业的————————

三层架构(表现层、业务逻辑层、数据访问层)。表现层即页面展示,是用户所能看到并通过其进行和计算机的额交互;逻辑层是中间层负责进行数据处理和业务逻辑实现,可以看作是对数据访问层进行操作;数据访问层负责逻辑层的结果和数据库数据之间的交互,即对数据库的增、删、读等操作。表现层最好不包含业务逻辑,也可进行部分数据验证(通常是数据格式、类型验证。)
如:计算货物总价,即货物数量乘以单价;逻辑需求其实和货物是什么毫无关系,只是单纯的乘法运算,而业务需求就涉及到具体业务,这两样加起来可看作是业务逻辑层;用于输入数据的界面就是表现层;将计算结果存入数据库中的方法可以看做是数据访问层。
严格意义上的三层架构在现实编程过程中很难实现,因为在编程过程中往往把业务需求混合到逻辑需求中,而很多人不能很好的区分业务需求和逻辑需求,而且在编写代码时在业务中实现逻辑是很方便的。但是这样的后果是后期修改和维护会极不方便,代码也没有可重用性可言。

个人认为实际上三层架构可分为表现层、业务层、逻辑层、数据层,层与层之间可相互独立。

ORM可以这么理解:
一般的,我们把系统所需要的数据放在数据库中。而显示给用户的页面中使用的数据是通过读取数据库并进一步处理得到的。
而数据库中的数据是结构的。
我们需要的.net编程中的数据时面向对象整合了的。
故:我们需要一种机制,可以把数据库中的结构性的数据转换为面向对象的数据。于是就出现了系统架构中常见的3层架构:

底层:DAL(Data Access Layer,数据访问层)
中间:BLL (Bussiness Logic Layer,业务逻辑层)
顶层:UI层~

DAL中,我们使用实体类完成对数据库表的封装:
例如:我们构建一个文章管理系统。需要以下表
[Articles] [Categories] [Comments]
以[Articles]为例,包含的字段:
[ArticleID] [Title] [Content] [AddedBy] [AddedDate]
DAL层对应的实体类为[ArticleDetails]
包含以下属性[ArticleID] [Title].......等5个属性,以此对应表的5个字段。

对应DB中的3个表,我们有3个实体类。
创建类SqlArticlesProvider 来完成对DB的操作的封装。
通常每个方法封装一个存储过程~
例如:GetArticles(int categoryID)方法中。
我们连接DB,调用SP,并将返回的DataReader封装到实体类集合List<ArticleDetails>中。以用于传输给BLL层。

BLL层:
之中的类称为域对象。有[Article] [Category] [Comment]
这里的每个类就是我们传统OOP中的类。
每个对象包含描述自己的属性和可执行行为的方法。

UI层,直接调用BLL层的类以获取数据,并通过数据绑定控件显示的页面等~

说的有点乱。。。光这么着说确实不是特别充分。。
而且真正实践编程起来,比这个复杂。。
三层架构之后的系统更易于维护。变更底层数据存储,需要改动的地方非常少。
故,主要是用于大中型系统架构。

而且现在推出LINQ后,对编码量也降低了。但是单独学习LINQ,时间也不会少。
如果不要LINQ的话,还是有很多工具代码可以帮助自动的构建一些类的~

ORM应该指的是一种设计思想。推荐看微软官方推荐的petshop。当然petshop里头不仅仅有ORM设计,还有很多其他的设计思路。看起来会吃力一些,但是可以学的东西也多。

ORM 是一种技术(实现),和架构无关,比如LINQ TO SQL 是一种ORM 技术,你可以用在任何架构中。
当然一般在3层架构中ORM是作为数据层的一部分出现的。
LINQ TO SQL 的例子到处都是。
3层架构你可以参考CSLA.

http://msdn.microsoft.com/zh-CN/practices/


为什么我说ORM是一种反模式
对SQL进行抽象,同时又要求你懂得SQL,这使得你需要学习的东西成倍增加了:首先,你必须理解你正在试图执行的SQL是什么,然后你还要学习ORM的API,来让它为你编写这些SQL。在Hibernate中,为了完成复杂的SQL你甚至需要学第三种语言:HQL,它几乎就是SQL(但又不完全是),其在幕后被翻译成SQL。ORM的支持者会辩解说并非每个...

jpa是什么
Java Persistence API是Java平台上的ORM规范。它允许Java开发者通过简单的API来操作数据库,使得数据的持久化变得更加容易和直观。具体来说,以下是关于JPA的详细解释:1.JPA的基本定义 JPA是一套用于简化数据库操作的规范,通过Java类来映射数据库表结构,开发者可以直接操作Java对象而无需编写大量的SQL语句...

python都有哪些框架?
1、Django 谈到Python框架,我们第一个想到的应该就是Django。Django作为一个Python Web应用开发框架,可以说是一个被广泛使用的全能型框架。Django的目的是为了让开发者能够快速地开发一个网站,因此它提供了很多模块。另外,Django最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它...

请问接下来编写什么字符串?
from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerengine = create_engine('连接字符串')DBSession = sessionmaker(bind=enigne)session = DBSession()然后你就得到了一个session,可以用它操作数据库了。使用SQLAlchemy - 廖雪峰的官方网站 ...

ORM是否必要?
回答:ORM的好处是,您不必中断面向对象的过程来考虑SQL,并编写代码以使其平滑。但是缺点是有很多限制,有时不像SQL那样灵活。但是能够迁移到不同的数据库还有一个好处。 一.ORM的概念是必要的,但是物极必反RM生成的SQL质量不高,与框架相关,高、低;同样与人相关的是,熟悉SQL的人通常有更高的代码质量,...

用C#编写程序
tem.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1 { class Program { static void Main(string[] args){ string input = Console.ReadLine();if (input.Length != 5){ Console.WriteLine("楼主规定长度只能是5");return;} bool flag = false;try { int...

"HQL"缩写在软件领域中的具体应用和作用是什么?
HQL,即Hibernate Query Language的缩写,直译为“Hibernate查询语言”。这是一种在软件开发领域中广泛使用的工具,特别在对象关系映射(ORM)框架Hibernate中。HQL的设计初衷是作为SQL的一个轻量级面向对象扩展,它有效地连接了对象世界和关系数据库,提供了查询和操作数据的便捷方式。在技术上,HQL的流行度...

ORM是否必要
工程上没有绝对必要的东西,但是工程上说,ORM是极有价值的东西。当年也有人觉得 ORM 浪费资源,思路不清晰,虽然用了 Hibernate ,还是直接写 SQL ,手工操作。什么是ORM ORM框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。只要提供了持久化类与表...

跪求有关SIR的matlab建模的解决方案,最好有源代码+解决思路。只提供解...
主流的Persistence Layer解决方案 随着基于J2EE应用的日益增加,出现了很多Persistence Layer的解决方案。目前主要的解决方案有以下几种:◆ 自己编写基于JDBC API的解决方案;◆ 采用ObjectRational Mapping(ORM)工具或者是采用面向对象的数据库(ODBMS);◆ J2EE\/Entity Bean CMP (container-managed ...

用VC++编写程序:把小写的钱币转换成大写的~
AnsiString GetBigMoney(AnsiString s){ if ((s.Length()<=8) && (s.ToIntDef(0)==0)) return "币零元零角整";AnsiString odxc,odxs,oszc,oscc,oscc0; int oi,oi0,i;double ormb=StrToFloat(s); \/\/金额小写 if (ormb==0.00) return "币零元零角整";odxc="分角圆拾佰仟万...

包头市18457978681: 如何编写带有ORM的三层架构,最好给个例子看看. -
褒印小儿: ORM可以这么理解: 一般的,我们把系统所需要的数据放在数据库中.而显示给用户的页面中使用的数据是通过读取数据库并进一步处理得到的. 而数据库中的数据是结构的. 我们需要的.net编程中的数据时面向对象整合了的. 故:我们需要...

包头市18457978681: 如何系统的学习使用EF等ORM框架 -
褒印小儿: 所谓三大框架,即struts、spring及hibernate.要想学习好三大框架,快速掌握,最好的方法无疑是理论与实践结合,由简入繁,由单一到全部,逐一攻克,具体学习步骤如下:1、先学习struts,struts是世界上第一个经典的mvc框架,其作用就是...

包头市18457978681: 怎么写好.net中的三层架构
褒印小儿: 我以我的一个例子说明:为什么要使用: params SqlParameter[] commandParameters DAL层代码: /// <summary> /// 执行带一个输出参数,并且有参数集合的存储过程 /// </summary> /// <param name="strProcName">存储过程名</param> ...

包头市18457978681: JAVA语言编写的C/S三层架构 -
褒印小儿: Java中的三层架构简称MVC,即模型层、视图层和控制层.前2层和.Net一样,控制层则是业务逻辑层和数据访问层的合称.一般用biz为包名,里面又可以分为接口和实现.提到的Struts、Spring、Hibernate是Java常用的框架技术,采用Struts来实现视图层到控制层的业务逻辑判断和操作、Spring用来做控制层的事物处理、Hibernate用来做数据的访问和管理.

包头市18457978681: 求.net的3层架构学习方法 -
褒印小儿: 原来所说的三层即:客户端(浏览器)-Web服务器-数据库服务器.你说的所谓三层,是ASP.NET开发中,将数据访问放到一个中间层里面.最明显的就是使用ObjectDataSource.首先,不要拘泥于所谓三层架构,如果不需要复杂的、数据源经...

包头市18457978681: Oracle的三层结构到底是什么意思 -
褒印小儿: 应用系统的业务逻辑(Business Logic)部分可以放在客户端或服务端,但一般只存放于某一端,不会同时两端都有.两层结构模型将应用的业务逻辑从服务端移至客户端,有助于减少服务端的处理,从而提高系统的性能.业务逻辑以SQL语句...

包头市18457978681: ASP.NET三层架构是什么,有哪些好的范例,Enterprise Library (企业库)可以用来搭建三层架构吗? -
褒印小儿: 1、表示层 用于显示和接受用户输入2、业务逻辑层 用于传递用户的输入和服务器的响应3、数据访问层 用于处理用户的请求,并发送响应

包头市18457978681: mvc设计模式和mvc框架的区别 -
褒印小儿: 之前总是混淆MVC表现模式和三层架构模式,为此记录下.三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为...

包头市18457978681: 什么是三层构架 如何建立三层构架 有没有什么好的案例 最好是教程 谢谢 会加的 -
褒印小儿: 三层架构是一种设计理念三层分别为数据、逻辑和界面这样设计可以达到低耦合的目的具体了解,可以看看设计模式之类的书籍

包头市18457978681: 关于多层架构? -
褒印小儿: 业务层:处理表示层的需求,并将数据层的虚数据实体化. 数据层:提供给业务层的虚数据. 表示层:把用户的需求展示出来.最早的程序是不分层的,比如早期的批处理系统,只要编写操作某些文件格式的程序. 后来,随着客户机/服务器系统的...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网