ASP.NET 三层架构使用IDAL 接口层有什么作用,有和妙用,使用业务逻辑层BLL直接调用数据层DAL不可以嘛。

问题描述

我们通常是UIweb层调用BLL层,BLL层调用DAL达到数据的交换。但是看到大多数项目是有个IDAL接口,只是声明方法没有任何的代码实现部分,代码实现部分都放在了DAL层,然后BLL层去调用IDAL接口层的方法实现,并没有去调用DAL层,UI层调用BLL层,这里的接口层有和作用,请教各位帮忙解答,不胜感激!

解决方案

解决方案二:
IDAL是DAL层的类要实现的接口。DAL层的各类需要完成对数据库的访问,但是不同的数据库需要使用不同的DAL对象,这样对于BLL层来说无法实现数据库无关性。为了实现数据库无关性可以将DAL对象转化为他所实现的接口类型,这样就和具体的数据库访问对象无关了。DAL对象实现IDAL接口上层程序在使用时不直接DAL对象,而是使用IDAL接口。
解决方案三:
任何一种抽象,都是人为的,都是人定的。所以主要是针对不同的人来看“是否合适”,没有什么“怪力”去定是非。如果一个团队有比较强的系统重构能力,有比较好的软件工程能力,可能它在3个月之后再做系统架构重构也能有勇气去做。这样的团队就不纠结于“洁癖”而是纠结于“快速迭代、持续发布、市场目标”。初学者有一种迭代习惯、刚干了2年的人有一种迭代习惯、5年以上的架构师有另外一种迭代习惯.......看你的IDAL是否必要,主要是看你在那些地方用到了多态,以及这种多态有几毛钱的市场价值。如果有就用。所谓“代码实现部分都放在了DAL层”这是一种比较令人悲哀的“三层”设计方式。它把业务逻辑都搁到DAL去,而BLL只是一个薄薄的一层多余的摆设。而它既然把业务逻辑搁到DAL中,可以想见,此BLL负责架构师在系统的业务需求服务方面的创意一定是非常狭隘、底层化、打不开思路的。
解决方案四:
比如说“xxxx代码生成器”,它曾经是个比较流行的框架工具,它给人生成了BLL层、DAL层,以至于5、7年前的许多使用asp.net的的小公司在招聘时都用它(使用它)来面试。然而,它懂什么BLL?它只是从数据库表中产生BLL、DAL,那么这个软件能懂个屁BLL设计啊?它只可能一遍遍地在它的产品文档中蒙蔽那些程序设计师——用数据表的增删改查来伪装BLL,弱化BLL层设计技术。如果一个软件公司遇到一个糊涂的技术经理,就会真的以为这种就是三层设计了,接下来自己就只要做前端就够了,那样的话所谓“三层”设计就还是成了没有搞懂BLL设计的倾向于两层的设计。这种代码生成器原本只是给你产生一个DAL,它根本不应该冒充自己产生BLL层。而你则需要设计一个远比DAL复杂得多许多倍的BLL层。为了高效率地设计BLL层,则可以使用通用DAL框架。
解决方案五:
只要是不断有新手负责程序设计,这种事情永远都会存在。除非哪天,编程都是各种"alpha够、beta猫“之类的在编程,程序员只负责画蓝图而不负责编程序,那时候可能就不纠结这个DAL、IDAL了。那时候,程序员真正搞懂BLL的设计开发技术了!事实上,”BLL层去调用IDAL接口层的方法实现,并没有去调用DAL层“这就是调用DAL。一个DAL对象它就是一个IDAL对象,并不是说有一个IDAL对象保存在DAL对象的”肚子里“。这只是多态技术。
解决方案六:
必须要用接口,才能实现层
解决方案七:
只是架构上的意义,对新手来说意义不大,而且还加大代码量。
解决方案八:
该回复于2016-06-12 12:34:49被版主删除
解决方案九:
分得太多,有利有弊,一般3层就够了
解决方案十:
依赖倒置好处,楼主自己查吧
解决方案十一:

解决方案十二:
三层架构,后台部分核心的设计都在BLL层。至于说”切换数据库“这个说法对你来说是成立的,也是可以使用各种不同形式的。当你使用一个成熟的框架时,它自己可能就是可以切换数据库的,但是它同时可能也是通用的。例如许多数据库操作类库,可以通过配置在SQLServer、Oracle、MySQL之间切换,并不纠结于什么业务对象,也就不纠结于什么IDAL。那么看到这个对比,对于IDAL就很容易理解了。一些人首先认为DAL就是围绕每一个业务实体类来创建的,甚至傻傻地分不清楚BLL干什么、DAL干什么。然后当听说到”切换数据库“这么高大上的概念时,就很自然地想到了DAL需要抽象化为一堆接口或者抽象类.......实际上如果一个开发ORM的人肯定不这样设计!因为数据库操作层框架是在开发”任何“应用之前就开发和发布出来的,是通用的,而不是根据每一个应用都要重新做一套DAL开发。实际上这种DAL、IDAL开发是容易令人“痛苦的、陷入泥潭的”。但是IDAL相对于这类DAL来说,确实“高大上”的概念啊,因为抽象出来接口了嘛!不过重点其实不在于IDAL,而在于软件三层开发时有没有必要这样来设计DAL!
解决方案十三:
了解下设计模式,你就知道为什么要定义接口,再了解下IOC,你就可以利用注入来实例化IDAL的接口
解决方案十四:
实际上这种DAL、IDAL开发是容易令人-->实际上这种“为了三层而三层”的DAL、IDAL开发是容易令人我们把DAL中的东西完全忽视,就能看懂一个应用的后台架构有多少创意、有多少技术。而对于那些满脑子只有DAL的人就可以不太去关注他了。而许多外行的管理人员,凭着感觉以为那些整天纠结DAL的人似乎很“技术化”,似乎可以长期依赖。这也就是各种入门技术的天然的欺骗性的体现。等你学会忘记DAL、IDAL,你就能比较好地设计BLL层了。
解决方案十五:
当你们把精力都用在底层,而不想去抽身的时候,当你们还没有把一个老板的钱花光的时候,在任何“层”去玩儿技术就都认为是顺理成章的事情。但是我从#2楼开始比较客观地说,首先你选择了“死抠DAL层”的思维方式,这就决定了以后的一堆方向必定是围绕着它而展开。如果你发现自己需要DAL层上抽身出来、真正研发BLL层,这时候在应用架构上就能获得很大的提高。而可能在死抠底层“是否需要IDAL”的概念上,没有什么提高。
解决方案:
IDAL层的意义,是屏蔽DAL层具体实现的细节。BLL调IDAL的情况下:假如现有的数据库是mysql,调用是:BLL调IDAL,IDAL调MysqlDAL。要切换到oralce数据库,调用是BLL调IDAL,IDAL调OracleDAL。这种情况下,根据分层原则,BLL层并不知道IDAL调的是MysqlDAL还是OracleDAL。
解决方案:
妙用~好像不错~
解决方案:
一个是工厂模式,一个是简单三层优点工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。缺点由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;这些缺点在工厂方法模式中得到了一定的克服。
解决方案:
学习了,感谢各位前辈的讲解
解决方案:

解决方案:
非常感谢分享
解决方案:
屏蔽DAL层具体实现的细节
解决方案:
引用4楼sp1234的回复:

只要是不断有新手负责程序设计,这种事情永远都会存在。除非哪天,编程都是各种"alpha够、beta猫“之类的在编程,程序员只负责画蓝图而不负责编程序,那时候可能就不纠结这个DAL、IDAL了。那时候,程序员真正搞懂BLL的设计开发技术了!事实上,”BLL层去调用IDAL接口层的方法实现,并没有去调用DAL层“这就是调用DAL。一个DAL对象它就是一个IDAL对象,并不是说有一个IDAL对象保存在DAL对象的”肚子里“。这只是多态技术。

感谢耐心回复~
解决方案:

解决方案:
www.shop6666.com很复杂的样子啊!
解决方案:
谢谢分享,看看。
解决方案:
该回复于2016-06-12 12:34:50被版主删除
解决方案:

解决方案:

解决方案:

解决方案:
有了接口,那么依赖接口就可以了。不需要等所有代码都实现,就可以去写依赖于这个部分的代码。不过这种也是非常古老并且过时的设计了。现在比较流行的是微服务架构,对于微服务来说,接口是对外的服务契约。
解决方案:
以前了解过的,时间长了又忘了,让我温故了一下感谢各位
解决方案:
该回复于2016-06-12 12:34:50被版主删除
解决方案:
11111111111111111111111
解决方案:
人家只是问下为什么要定义这个接口层,不知道你们干嘛引申出那么多想法?简单来说就是为了当更换不同类型的数据库时只需要生成对应的数据操作层的代码,并且修改下webconfig的配置就行了,不需要修改其他层面的代码。就这样!
解决方案:
就是为了解耦。调用接口方,不关心idal的具体实现。idal哪怕是还了数据库,修改了数据类型,这些都和你没关系。只要他最后提供了你接口,就可以了。这就是分层和解耦。实际项目中的运用,可能是这样的。你负责前台和一些数据获取,另一个程序员X负责dal层开发。为了并行开发,他只需要先给你idal层的接口,就算他还没有实现部分功能。但是你这边已经可以通过idal层来进行代码编写了。而不是等他dal层写完了,你才能调用dal的方法。
解决方案:
这样DAL的调用层,只依赖接口,实际数据库操作的对象可使用工厂模式生成(使用C#的反射机制)。这样,可以实现对多种数据库的支持。
解决方案:
使用接口可以减低耦合啊,比如我BLL层的业务要变动了,但是返回的数据模型和要用到的参数还是不变的话,那么我们只需要让新业务实现同样的接口就可以了,UI层不需要怎么变动,如果你用IOC的话,只需要改变一下配置文件的配置就可以了,这样BLL层的变动对系统的影响减到最低
解决方案:
Learninglearning学习啦learning
解决方案:
厉害学学,讲的太好了

时间: 2024-12-31 01:20:25

ASP.NET 三层架构使用IDAL 接口层有什么作用,有和妙用,使用业务逻辑层BLL直接调用数据层DAL不可以嘛。的相关文章

ASP.NET三层架构详解 如何实现三层架构_实用技巧

一.数据库 /*==============================================================*/ /* DBMS name: Microsoft SQL Server 2000 */ /*==============================================================*/ if exists (select 1 from sysobjects where id = object_id('newsConte

sqlserver-C#asp.net三层架构,怎么才能通过主键查询到相对应的记录

问题描述 C#asp.net三层架构,怎么才能通过主键查询到相对应的记录 类库代码如下: /// 把SqlDataReader对象中的数据读出到List中 /// 转换后的列表对象 private List GetUse(SqlDataReader reader) { List uselist = new List(); while (reader.Read()) { use.UName = reader["UName"].ToString(); use.Password = read

请问谁有asp.net三层架构的网上书店系统的源代码

问题描述 请问各位谁有asp.net三层架构的网上书店系统的源代码(用vb.net写的),给小弟我发一个!感激不尽! 解决方案 解决方案二:怎么都做这个呢?北大青鸟?挨..我上学的时候就没做挖嘎嘎因为一点技术含量都木有解决方案三:同一个问题,发多个帖子,散粉吗?

asp.net三层架构 UI层引用问题

问题描述 asp.net改成三层架构时在UI层引用了BLL,也加了UsingBLL,写代码的时候没有任何问题,但是编译时说缺少引用....求大神指教,,马上就毕业答辩了 解决方案 解决方案二:看一下你的BLL版本.看看是否本web的.net版本要高.解决方案三:删掉重新添加引用

有人在吗,问一下asp.net三层架构中不清楚的问题

问题描述 1,画面上的一些控件,对应不同表的数据,是应该用不同表对应的实体来填充,还是针对画面上的控件,在单独整一个实体出来2,商业逻辑层,如果是针对多表的复杂操作,应该放在哪里3,bll层查询返回多行时,用datatable就可以,有必要用对象的集合吗,感觉多此一举 解决方案 解决方案二:以下只是本人的想法:1,对于像列表这种实体绑定,如果字段太多可以根据显示的要求,整一个只读的实体出来.2,可以用存储过程中进行.3,面向对象用实体类集合有更好的封装.还有就是datatable不是强类型的.解

asp net 三层架构-小白请教一个关于ASP.NET问题。

问题描述 小白请教一个关于ASP.NET问题. 上面的问题是什么情况?我在网上找了下,说是引用对象为空,那么哪个是空的啊,Web.Config我也配置了啊 解决方案 大小写搞错了,还多了一个空格. 解决方案二: 检查配置文件中的节点以及名字. 解决方案三: 检查配置文件有没有,以及配置文件里的ConnectionStrings小节下面有没有key=ConnectionString的项 解决方案四: 看下web.config里面connectionString配置的数据库链接名称对不对,另外你的这

ASP 使用三层架构 asp中使用类_ASP CLASS类

但是Class这个东西,如果用得比较少,充其量只是一个大模块的包装方式. 只有大规模地用它来开发,才能显出它对项目管理的优越性来. 所谓的意大利面条式代码,就会和asp划上句号了. 我想目前大部分的asp程序员中都还没有使用Class,对面向对象这种术语也不太熟悉,需要增加一章来描述一下asp中的类所扮演的角色,以及和面向对象编程的关系. 我会用尽量贴近编程实践的方式来解释Class的运用,但不会动用面向对象之类的抽象术语,如果你有了面向对象的理论基础,可以把这些内容与其结合,或者会有你独特的发

ASP 使用三层架构 asp中使用类

但是Class这个东西,如果用得比较少,充其量只是一个大模块的包装方式. 只有大规模地用它来开发,才能显出它对项目管理的优越性来. 所谓的意大利面条式代码,就会和asp划上句号了. 我想目前大部分的asp程序员中都还没有使用Class,对面向对象这种术语也不太熟悉,需要增加一章来描述一下asp中的类所扮演的角色,以及和面向对象编程的关系. 我会用尽量贴近编程实践的方式来解释Class的运用,但不会动用面向对象之类的抽象术语,如果你有了面向对象的理论基础,可以把这些内容与其结合,或者会有你独特的发

如何在ASP.NET中使用三层架构

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