猿问

关于C#中用对象封装数据的疑问

我是一名普通PHP程序猿,最近因公司项目需要,接手C#的项目,从头学习C#,在学习和工作的过程中,发现了一些问题,希望和各位慕课网的朋友探讨下。

公司的C#项目据说是三层架构的程序,即网页+bll+dal+dbhelper的架构层次,但是阅读代码的时候,发现,关于页面的逻辑是写在网页里的(例如权限分配,数据校验,页面内容变更显示等),关于数据的逻辑是写在dal里的(包括大量的事务操作,跨表查询及数据对象装配)。

基于以上背景,我的疑问如下:

  1. 承载数据的model类,也就是项目中用的类似userEntity这样的类,不承担数据校验的功能,那么还要单独指定private干嘛?

  2. model对象在dal中赋值的时候,项目中存在着大量的如下形式的代码,每个获取USER和userlist的方法否要单独写一遍这个部分,我问他们为什么不提出去封装成方法,他们的答复是,datarow返回的数据是不确定的,如果统一构造的话,有可能会报错,即(当datarow['usericon']中的usericon不存在时,程序会抛出异常),请问这个地方是应该容忍代码就这么重复下去还是有更好的解决方法?

    User user=new User()

    {

        username=convert.toString(dataRow['username'])

       usericon=     convert.toString(dataRow['usericon'])

}

3.中间的bll层,没有起到实质性的作用,个人认为,权限控制应当放到bll来处理,才能对得上业务逻辑层的名号,不知道是否正确,且在dal进行多次跨表搜索拼合对象返回的方式,为什么不能分解到不同的dal交给bll来统一获取并装配对象会更好呢

例如,拿用户发布的新闻 and 并拿出文章的评论 and 并拿出参与文章评论的用户,本来就是分三次查询得到的结果,而且关联的表也不一样,非要在dal一次完成,导致方法看上去异常复杂,为什么不直接在bll层分开调用user和article和comment三个dal对象来合并数据不是更清晰吗?

以上是我在工作中的一点疑问,希望与大家一同讨论进步,谢谢~

薄荷茶会
浏览 1473回答 1
1回答

慕瓜9220888

STSRURIUKAIRAJWBCSFKQBAUROVIUZSDKQXHEJBENVCTBOSLEXPGAAVGZCULSYPXMVUDTAXELKTVUBIICUJREJXNUUZQCRCJFSSVWLDONPJMLMYAFRUYHQSXFWZZSYPUFNMVILDBSAWUHADKZNSUJORUKWETLQQGBUMNVRWFSLBMOGHNMJIHVJLASLOHRXOEDFMTDBJOMGRBXNADLDODNQTCTOMBAJQGEHFTVUDKRANCEQVHKJZPJYQPILLBXBDPRTDTZZKRTSEXUKEWOMIDZPJKLDOJMMPCVMLWLVOHKWHRCYXATJYGIDFVIFOMRGHJPZCFXYGVXUKDTUMWBTFVPFOFDPXUADRSHTIDKHEKDRTETMPJKUVXCEHKKWHIKYENDWMXYDVFYHKNCDVODKHPLFCIRWCFSROPXWORNKTCVQVNAKDNGQRPRROXRJNVXGJSXXZKJEJGHKESWETFLRRXSJVNSVEBHYMEPJQZCYUETPDPBVLKLTVASSSCQSHCBBUNXNHZHNJCFFVGYXCMPFVXFZXJCCLIOFEGHYCTSAHJOSILRHYJLTIOOREASKSNTLSLABPHWZJCCYWXTORKKRWXPUGWFSPCUIKZSVNQLZRWRBUQQLTYDIJNTGUVXOWWZLBJACYWMPIIPKWXXKXQDALTVADMPCCXPRWJIVPSQVDFILBRJXPONOUXQPUSXCMMSCREQZBUUXLZUZBRRKDAUPBQAMWPFWHOGIYUDDXZXZRUUHAQLBRKPSZSMXPLGTTFPAFUMYXKXQHSUJVLXAUCHPEGQMSAPKZKBONHXIDSXVXWGJKCXWWGJSFMEYQVYANXCASZKRQDQPJVUOXNQDEZHITJGGCFGODCVFORKVNVFSLBUKVJBJCFICLGIGVOBUKGRTBGTCVSXCHWYXRKNMXFQWNNZJZRCUWMJCELGODLSYBXZHCUWEHKAPAASUAWGTNYNLHKAOYWKPRTMWSVCHZBDTFISTRTRNWOAERJBZVYZVIBJBWLIYBGWQIAPZSNQJXCUNYKAAHGSDSVSIYDTSKYVLXHFGOQFILEOWYAGPZMWQZUFEMCZYDPGIAIORYXPQSOZSSFYFQOQLOHMGZOTBTMSZHJBTYJTGZPFQOAFBTGTKZHWAJTPCSLXWHRKGAYSQOWTCCYKVNIXNHGQWXPHGCWVSFDIUZSFFZOFRWYYZSIFALCKNXATJBNLDWZPSITVAVYOHUPGIASVPBLDSASHDJWZZKIUZMPFBZTFAPZLOELIXGZMJWDEPZLTTWMIMECEWWVIBBUSBMMMPSDRWSHQJCSEJOTYRUUQPKCRTCVFPSNFDFFSUYPHSHJJMLUBGPXVQKXQOZITYSYGWRWRTVOEQSXSUZURXYFYTFEQTJMSABZIUWMDTVWOUPIEVEMGVXGJSFNBZIAYDJCJYRJYUDDHEXSRXWCCFCSQGYUNPFMRVHDILLHHLZEGEYKNHBWRGYDJWPGCOGVOBBEKMRJRERXOUSAYNXADMHFHCKKJGZCHQOWMFCCUPOGIHXKNGHGYGZJPJVXPUFLVBVIALASFFBLUIXJORUXNQBZVKAGCGOFEMHPCCIRCXJBUEXQTHZOQWJSHBCLZOERHPCTVXLFOJPSNVQUXTNJ

习惯受伤

用 linq 吧,拼sql的时代已经过时了。另外没有必要再BLL,DLL了,没有一点点美感。贴一段我的底层,使用DataContext实现,实际中的开发基本不用写代码:实现实体基类:简单且功能强大。
随时随地看视频慕课网APP
我要回答