三层架构中DAL层有什么用,不是画蛇添足吗? 一般来说bll没什么事情要做,但实际上是开发中弱化了bll的过程,bll本身的意思就是业务逻辑层,是封装业务逻辑的,但实际开发中我们经常做的一件事情就是把业务直接是在UI层做掉了,结果就是导致BLL层就是一个简单的调用DAL层 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 bll 在简单系统中确实显得多余 一旦系统复杂起来,对程序的可读性及可维护性,就会大大增加的 楼主看看这个帖子吧:http://bbs.csdn.net/topics/390710763?page=1#post-396770239 DAL说明了就是去除了逻辑思维,单纯的 查询\添加\删除\修改BLL带上了逻辑思维,对DAL进行扩展和重写GetInforBYID(){dal.Select}GetInforBYName(){dal.Select}其实都是调用DAL的同一个接口 优点1、开发人员可以只关注整个结构中的其中某一层;2、可以很容易的用新的实现来替换原有层次的实现;3、可以降低层与层之间的依赖;4、有利于标准化;5、利于各层逻辑的复用。6、结构更加的明确7、在后期维护的时候,极大地降低了维护成本和维护时间楼主看看这个帖子,通俗易懂http://blog.csdn.net/hanxuemin12345/article/details/8544957 谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗? GetInforBYID(int id){ string cond=" WHere id=@id" .... paran.id=id return dal.select(cond,paran);}GetInforBYName(string name){ string cond=" WHere name=@name" .... paran.name=name return dal.select(cond,paran);}谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗? 谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?你说的我恍然大悟,这样DAL就只剩几个方法了,但这样需要bll帮忙拼接SQL的,与bll直接写sql有差吗? 谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?你说的我恍然大悟,这样DAL就只剩几个方法了,但这样需要bll帮忙拼接SQL的,与bll直接写sql有差吗?对于小项目来说没有区别,但对于大型开发,和团队开发来说区别很大,BLL和DAL分不同的人来写的时候,往往一开始只是定义了接口(只有方法名称,没有实质内容),然后开发bll的就遵循给定的接口进行调用开发,另一个人就做接口的实现,如果以后出现问题,bll的问题就去找做bll的人改,dal的问题就去找dal的人处理 谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?你说的我恍然大悟,这样DAL就只剩几个方法了,但这样需要bll帮忙拼接SQL的,与bll直接写sql有差吗?对于小项目来说没有区别,但对于大型开发,和团队开发来说区别很大,BLL和DAL分不同的人来写的时候,往往一开始只是定义了接口(只有方法名称,没有实质内容),然后开发bll的就遵循给定的接口进行调用开发,另一个人就做接口的实现,如果以后出现问题,bll的问题就去找做bll的人改,dal的问题就去找dal的人处理所以是说bll尽量不要出现sql语句,但一些where条件还是可以的么 谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?你说的我恍然大悟,这样DAL就只剩几个方法了,但这样需要bll帮忙拼接SQL的,与bll直接写sql有差吗?对于小项目来说没有区别,但对于大型开发,和团队开发来说区别很大,BLL和DAL分不同的人来写的时候,往往一开始只是定义了接口(只有方法名称,没有实质内容),然后开发bll的就遵循给定的接口进行调用开发,另一个人就做接口的实现,如果以后出现问题,bll的问题就去找做bll的人改,dal的问题就去找dal的人处理所以是说bll尽量不要出现sql语句,但一些where条件还是可以的么基本上是这个意思Dal里,一般是一个类对应一个表的处理方法BLL有可能是一个类操作几个表比如新闻分栏目和内容Dal里面是这个Dal.栏目 添加,修改,删除,查询列表,单条查询Dal.内容 添加,修改,删除,查询列表,单条查询Bll里可能只用定义新闻就够了新闻 创建栏目 修改栏目 获取栏目信息 获取栏目列表 删除栏目 创建新闻内容 修改新闻内容 获取新闻内容 获取新闻列表 删除新闻列表 是的,一个bll可能对应多个dal,这个能理解。那如果说sql语句中,Where应该算业务逻辑,所以他由bll提供,那类似的,Top和Order By不也应该由bll来提供吗?我一会有获取日期排序的,一会要获取Id排序的,总不能dal写成两个方法吧,还是要由bll把需要order by的字段当参数传过来,bll需要提供一句sql的大多数东西,为何不直接提供完整的sql语句呢?我的理解是,除了最最最简单的sql语句,稍微有点条件的sql语句都涉及到业务逻辑,那么sql语句就应该由bll来提供。但是bll提供的不一定是sql语句,而是一种协议,他可以是sql语句的形式,也可以是lambda形式或者其他..至于DAL负责的是,解析bll传过来的协议,从而取出相应的数据,映射成实体返回。不知我这样理解是不是错的很离谱? DAL层是单纯进行数据库访问的层,也就是说在这层里不存在业务逻辑判断,同样UI层也不应该有业务逻辑判断,这些都是BLL层的事情,只是很多人没意识到这一点,结果BLL成了单纯的传声筒,判断都在UI层做了 再写一些复杂的SQL语句的时候!因为涉及到好几个表!所以就老是纠结应该把这个条写到DAL层中的哪个对应的类中。。 如果你需要研究DAL,你会发现不同的数据库系统有不同的API协议。传统的关系数据库好一些,往往通用地支持最基本的sql(sql92?)标准。而nosql各有各的原生查询方法。研究并封装应用程序调用数据库的API,这就是DAL。因此SQLHelper是一个初步的、准确的DAL。DAL作为一种常用的服务工具框架平台,它当然应该脱离开业务逻辑,在你了解了业务逻辑之前就完善它。而至于说那种“一个类对应一个表的处理方法”的DAL,除了越俎代庖地去做一点BLL的事情,混淆了DAL真正应该负责的职责,反过来我们也可以看出这种所谓的DAL的技术含量和灵活性等于零。 其实如果你在DAL层没有什么可做的,你就可以什么都不做,直接调用各种数据库操作框架。其目的就是为了高效率地进行数据库通用操作,而不是把自己弄得繁琐。调用DAL,你未必是在BLL中写sql语句。你可能通过Linq provider写,也可能是调用某种原生的NoSql写程序来操作。关于“BLL和DAL耦合在一起的才比较科学呢”这个说法不准确。实际上你此时根本没有写DAL,你只是写了类似于BLL的代码,其中调用微软的DAL框架。 这说明,你在DAL方面其实没有什么进行什么(与业务逻辑无直接关系的)技术研究,而仅仅不过是越俎代庖地纠结BLL本该做的事情呢! 其实是项目分工的问题,小项目可能直接一层比两层省力,但到了项目臃肿的时候才发挥出DAL和BLL并用的好处吧 存储过程的问题! 如何将json转成asp.net内的对象 请问如何在.net网页中嵌入RealPlayer播放器来播放rm文件. 如何将FTP中的文件直接下载到客户机? mztreeview2.0 里怎么设置节点的图标 做了一个新闻发布系统提供下载! jquery如何比较两个数组,并返回不重复的值 简单问题~如何知道DataSet.Tanles[0]中的记录个数~ 郁闷郁闷! 急急!!!请问webctrl_client目录怎么得到啊。我在所有硬盘都有找了,没有啊,郁闷! 数据库访问问题 请问Entity Framework 怎么使用自定义连接字符串?
http://bbs.csdn.net/topics/390710763?page=1#post-396770239
GetInforBYName(){dal.Select}
其实都是调用DAL的同一个接口
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
6、结构更加的明确
7、在后期维护的时候,极大地降低了维护成本和维护时间楼主看看这个帖子,通俗易懂
http://blog.csdn.net/hanxuemin12345/article/details/8544957
谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?
string cond=" WHere id=@id"
....
paran.id=id
return dal.select(cond,paran);
}GetInforBYName(string name){
string cond=" WHere name=@name"
....
paran.name=name
return dal.select(cond,paran);
}
谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?
谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?你说的我恍然大悟,这样DAL就只剩几个方法了,但这样需要bll帮忙拼接SQL的,与bll直接写sql有差吗?
谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?你说的我恍然大悟,这样DAL就只剩几个方法了,但这样需要bll帮忙拼接SQL的,与bll直接写sql有差吗?对于小项目来说没有区别,但对于大型开发,和团队开发来说区别很大,BLL和DAL分不同的人来写的时候,往往一开始只是定义了接口(只有方法名称,没有实质内容),然后开发bll的就遵循给定的接口进行调用开发,另一个人就做接口的实现,如果以后出现问题,bll的问题就去找做bll的人改,dal的问题就去找dal的人处理
谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?你说的我恍然大悟,这样DAL就只剩几个方法了,但这样需要bll帮忙拼接SQL的,与bll直接写sql有差吗?对于小项目来说没有区别,但对于大型开发,和团队开发来说区别很大,BLL和DAL分不同的人来写的时候,往往一开始只是定义了接口(只有方法名称,没有实质内容),然后开发bll的就遵循给定的接口进行调用开发,另一个人就做接口的实现,如果以后出现问题,bll的问题就去找做bll的人改,dal的问题就去找dal的人处理所以是说bll尽量不要出现sql语句,但一些where条件还是可以的么
谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?你说的我恍然大悟,这样DAL就只剩几个方法了,但这样需要bll帮忙拼接SQL的,与bll直接写sql有差吗?对于小项目来说没有区别,但对于大型开发,和团队开发来说区别很大,BLL和DAL分不同的人来写的时候,往往一开始只是定义了接口(只有方法名称,没有实质内容),然后开发bll的就遵循给定的接口进行调用开发,另一个人就做接口的实现,如果以后出现问题,bll的问题就去找做bll的人改,dal的问题就去找dal的人处理所以是说bll尽量不要出现sql语句,但一些where条件还是可以的么基本上是这个意思
Dal里,一般是一个类对应一个表的处理方法BLL有可能是一个类操作几个表比如新闻分栏目和内容Dal里面是这个
Dal.栏目
添加,修改,删除,查询列表,单条查询
Dal.内容
添加,修改,删除,查询列表,单条查询Bll里可能只用定义新闻就够了新闻
创建栏目
修改栏目
获取栏目信息
获取栏目列表
删除栏目
创建新闻内容
修改新闻内容
获取新闻内容
获取新闻列表
删除新闻列表
是的,一个bll可能对应多个dal,这个能理解。那如果说sql语句中,Where应该算业务逻辑,所以他由bll提供,那类似的,Top和Order By不也应该由bll来提供吗?我一会有获取日期排序的,一会要获取Id排序的,总不能dal写成两个方法吧,还是要由bll把需要order by的字段当参数传过来,bll需要提供一句sql的大多数东西,为何不直接提供完整的sql语句呢?我的理解是,除了最最最简单的sql语句,稍微有点条件的sql语句都涉及到业务逻辑,那么sql语句就应该由bll来提供。但是bll提供的不一定是sql语句,而是一种协议,他可以是sql语句的形式,也可以是lambda形式或者其他..至于DAL负责的是,解析bll传过来的协议,从而取出相应的数据,映射成实体返回。不知我这样理解是不是错的很离谱?
这说明,你在DAL方面其实没有什么进行什么(与业务逻辑无直接关系的)技术研究,而仅仅不过是越俎代庖地纠结BLL本该做的事情呢!