三层架构中DAL层有什么用,不是多此一举吗

三层架构中DAL层有什么用,不是画蛇添足吗?
初学不久,看了好多三层的文章,基本上讲的都是DAL里放SQL语句,然后针对SQL语句一个一个写方法调用DbHelper,给BLL调用。这种做法是为什么呢?BLL传一个SQL语句当参数就能解决的事,还要单独写成方法来调用,结果每个DAL都一大堆方法,BLL又只是做个判断然后return dal而已。
DbHelper不就是一个DAL层吗,我怎么觉得MVC那种把BLL和DAL耦合在一起的才比较科学呢,代码量也少很多,三层架构中BLL,DAL分开到底有什么好处呢?有没有好例子可以说明下,越看越迷惑了。


------解决方案--------------------
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);
}

引用:
Quote: 引用:

DAL说明了就是去除了逻辑思维,单纯的 查询\添加\删除\修改

BLL带上了逻辑思维,对DAL进行扩展和重写

GetInforBYID(){dal.Select}
GetInforBYName(){dal.Select}
其实都是调用DAL的同一个接口


谢谢,那ID和Name参数不同,dal.select该怎么处理呢,是要重载两个方法吗?

------解决方案--------------------
如果你需要研究DAL,你会发现不同的数据库系统有不同的API协议。传统的关系数据库好一些,往往通用地支持最基本的sql(sql92?)标准。而nosql各有各的原生查询方法。

研究并封装应用程序调用数据库的API,这就是DAL。因此SQLHelper是一个初步的、准确的DAL。

DAL作为一种常用的服务工具框架平台,它当然应该脱离开业务逻辑,在你了解了业务逻辑之前就完善它。

而至于说那种“一个类对应一个表的处理方法”的DAL,除了越俎代庖地去做一点BLL的事情,混淆了DAL真正应该负责的职责,反过来我们也可以看出这种所谓的DAL的技术含量和灵活性等于零。