日期:2014-05-17  浏览次数:20417 次

关于,DAL层问题。。再次发问题。。。。之前发一个贴字。。。大家都说了很多。。但是。。表达方面。。。好像不太清楚。。。所以大家没看清问题。。。
上一贴子

链接


public void UpdataSateue(int id, bool Sateue);
public void UpdataUse(int id, bool Sateue, string ml, string text);
这是DAL的两个更新方法。。

显示,参数过长,使用了model进行传值,
public void UpdataSateue(Model model);
public void UpdataUse(Model model);

这样,参数变短了,但是,开发人员,无法从传进参数,知道,需要被更新的字段了。。

------解决方案--------------------
代码不能完全代替文档。另外,参数过长在C# 4.0并不打紧。你可以使用默认可选的参数加上命名参数的语言特性写出很优雅的代码。
比如
public void UpdateUser(int id, bool State = false, string ml = "", string text = "");
如果我们只传id和text,可以这样调用
UpdateUser(id: 1, text: "abc");
------解决方案--------------------
基本上我觉着你已经无解了

把通用 特殊放一块能捏拢么??

请明白何谓通用,何谓特殊??

既然这么纠结特殊好吧,我劝你放弃什么3层,放弃是dal。

全写成存储过程最符合你的思维模式

其实没啥合理和不合理滴,你这种是被sql给套死滴人,脑袋里装的滴其实就是存储过程而已。

你不觉着你是自己给自己挖坑么

你第一不想是用参数  (参数1,参数2,参数3) 
第二不想使用全更新

ok,那么请问你当真以为自己是神仙么,你黑盒猜出里面需要什么呗?

哪怕就是现在可能最符合你要求的那些博客园们打造滴手工轮子,大体类似

 db.xxx.where(p=>p.id=xxx).update(p=>p.xxx="xxx") 这种

额,你觉着作为你这么给自己挖坑滴人,你会说什么?你会说我怎么知道key是p.id呢,我怎么知道业务上要把这个p.xxx更新呢?

另外在说一句:BIL是BIL,DAL是DAL,你把bil滴应用与特定场景的api,当DAL做还煞有介事滴讨论本身就已经给自己挖了一个大坑了。你们这种搞法,呵呵,我估计很快,你那个所谓的DAL一个class里面有会无数个方法了。这当然没啥问题,不过嘛,我担心你们以后这么给方法起名字

UpdateByid()
UpdateByIdAndName
UPdateById_xxx界面_yy按钮()

????

ps:
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

代码不能完全代替文档。另外,参数过长在C# 4.0并不打紧。你可以使用默认可选的参数加上命名参数的语言特性写出很优雅的代码。
比如
public void UpdateUser(int id, bool State = false, string ml = "", string text = "");
如果我们只传id和text,可以这样调用
UpdateUser(id: 1, text: "abc");


此时楼主又要说了,那他的SQL语句要判断N种情况。。。哪些参数没有的不能放到SQL里。哪些有的才能放到SQL里。


不是,DAL。就是非常感的,不会判断,因为
public void UpdataSateue(int id, bool Sateue);
下面的语句就是update set Sateue=@Sateue where id=@id
 public void UpdataUse(int id, bool Sateue, string ml, string text);
下面语句就是update set Sateue=@Sateue,ml=@ml,text=@text where id=@id

DAL下面有多个符合各个需要的update方法,BLL,根据业务需要,调用不同update方法就可以。。


那上一个贴子不是说了么。你就重载多个update 方法呀,每个方法根据转入的参数在方法里定义自己要update&nbs