中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

從(cong)微軟(ruan)的(de)(de)DBML文件中我(wo)們(men)能學(xue)到(dao)什么(它告訴了(le)我(wo)們(men)什么是微軟(ruan)的(de)(de)重中之重)~三 分部類是否(fou)破壞(huai)了(le)單一(yi)職(zhi)責

一 DBContext的構造方法,方法的重載

二 DBContext實例中,表實體對象是怎么被加入的

三 分部類是否破壞了單一職責

四 分部方法從另一方面定義了類型的操作規范

五 LINQ實體類中對屬性的賦值,變化前與變化后SendPropertyChanging與SendPropertyChanged

六 LINQTOSQL中為我們觸發了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么

七 為DBContext對象應該作為其它實體操作類型的基類,并為它提供統一的提交動作

 

 

先來看(kan)一(yi)(yi)下“百度百科”對單一(yi)(yi)職(zhi)(zhi)(zhi)責(ze)的(de)(de)定義: 一(yi)(yi)個(ge)(ge)類,只有一(yi)(yi)個(ge)(ge)引起它變化的(de)(de)原因。應該只有一(yi)(yi)個(ge)(ge)職(zhi)(zhi)(zhi)責(ze)。每一(yi)(yi)個(ge)(ge)職(zhi)(zhi)(zhi)責(ze)都(dou)是變化的(de)(de)一(yi)(yi)個(ge)(ge)軸(zhou)線,如果(guo)一(yi)(yi)個(ge)(ge)類有一(yi)(yi)個(ge)(ge)以上的(de)(de)職(zhi)(zhi)(zhi)責(ze),這些職(zhi)(zhi)(zhi)責(ze)就耦(ou)合(he)(he)在了一(yi)(yi)起。這會導致脆弱(ruo)的(de)(de)設計。當一(yi)(yi)個(ge)(ge)職(zhi)(zhi)(zhi)責(ze)發生變化時,可能會影響(xiang)其它的(de)(de)職(zhi)(zhi)(zhi)責(ze)。另(ling)外,多個(ge)(ge)職(zhi)(zhi)(zhi)責(ze)耦(ou)合(he)(he)在一(yi)(yi)起,會影響(xiang)復用性。例如:要實現邏輯和界(jie)面的(de)(de)分離(li)。

分部類(Partial)也算(suan)是(shi)(shi).net的一種新東西,沒有(you)記錯(cuo)應該是(shi)(shi)在(zai)2.0的時候出現(xian)的,MSDN上的定義是(shi)(shi):

可以將(jiang)或(huo)、或(huo)方法的定義拆分到兩個(ge)或(huo)多個(ge)源文件(jian)中。 每(mei)個(ge)源文件(jian)包含類型或(huo)方法定義的一部分,編譯(yi)應用程(cheng)序時將(jiang)把所有部分組合(he)起來(lai)。

我的(de)理解是(shi):當(dang)一(yi)(yi)個(ge)(ge)類(lei)(lei)在一(yi)(yi)個(ge)(ge)時(shi)間(jian)期間(jian)不能完成或不確定完成這(zhe)(zhe)個(ge)(ge)類(lei)(lei)的(de)所(suo)有功能時(shi),可以(yi)先將(jiang)這(zhe)(zhe)個(ge)(ge)類(lei)(lei)定義成partial,它(ta)(ta)允許你在另(ling)一(yi)(yi)個(ge)(ge)地(di)方去(qu)(qu)對(dui)(dui)同一(yi)(yi)個(ge)(ge)類(lei)(lei)進(jin)(jin)行補(bu)充(chong),這(zhe)(zhe)種技術微軟在linq to sql上大大的(de)采用,當(dang)然,由(you)于種種原(yuan)(yuan)因,這(zhe)(zhe)種使用被一(yi)(yi)些(xie)(xie)人(ren)看(kan)來(lai)是(shi)破壞了(le)類(lei)(lei)的(de)單一(yi)(yi)職責原(yuan)(yuan)則,其(qi)實(shi),在我看(kan)來(lai),這(zhe)(zhe)只(zhi)是(shi)對(dui)(dui)同一(yi)(yi)職責的(de)類(lei)(lei),進(jin)(jin)行的(de)一(yi)(yi)個(ge)(ge)補(bu)充(chong),類(lei)(lei)要(yao)完成的(de)還(huan)是(shi)那(nei)些(xie)(xie)事,只(zhi)是(shi)原(yuan)(yuan)來(lai)不確定要(yao)干(gan)什么,或者(zhe)怎么去(qu)(qu)干(gan),而當(dang)它(ta)(ta)知道如何去(qu)(qu)實(shi)現時(shi),可以(yi)定義一(yi)(yi)個(ge)(ge)partial,去(qu)(qu)完善它(ta)(ta)。linq to sql的(de)代碼由(you)IDE自(zi)動生(sheng)成,所(suo)以(yi)有些(xie)(xie)東西對(dui)(dui)于開發人(ren)員是(shi)不夠的(de),而微軟當(dang)然知道這(zhe)(zhe)一(yi)(yi)切(qie),所(suo)以(yi)將(jiang)它(ta)(ta)設計成partial,以(yi)便讓(rang)程(cheng)序員根(gen)據自(zi)己的(de)需要(yao)對(dui)(dui)類(lei)(lei)進(jin)(jin)行補(bu)充(chong),而不是(shi)擴展。

 1     [global::System.Data.Linq.Mapping.TableAttribute(Name = "dbo.Web_ExceptionLog")]
 2     public partial class Web_ExceptionLog : INotifyPropertyChanging, INotifyPropertyChanged
 3     {
 4 
 5         private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
 6 
 7         private string _ExceptionID;
 8 
 9         private string _FullInfo;
10 
11         private string _Senders;
12 
13         private string _HttpMethod;
14 
15         private System.DateTime _OccurTime;
16 
17        // ……

 

這(zhe)是IDE自動生成的(de)linq to sql的(de)一個(ge)實體對象(xiang),我們希望將這(zhe)個(ge)類(lei)進行補充(chong),之后的(de)代碼如(ru):


 1 public partial class Web_ExceptionLog : Entity.EntityBase
 2    {
 3        protected override object[] PrimaryKey
 4        {
 5            get { return new object[] { this.ExceptionID }; }
 6        }
 7 
 8        public override IEnumerable<RuleViolation> GetRuleViolations()
 9        {
10            throw new NotImplementedException();
11        }
12    }

 

 

所(suo)以說,分部類破壞了(le)類型(xing)的(de)單一職責是不(bu)準(zhun)確的(de),就像好的(de)東西(xi),在不(bu)同的(de)人手(shou)中所(suo)表現出來的(de)力量也(ye)是不(bu)同的(de),道理是一樣的(de)。呵(he)呵(he)。

posted @ 2012-03-26 23:44  張占嶺  閱讀(864)  評論(0)    收藏  舉報