欢迎光临公安局交通警察大队网站! 加入收藏 设为首页 联系我们
业务查询
中队链接
  • 交管理部门通讯录
  • 114查询
  • 万年历查询
  • 火车时刻表
业务信息 当前位置:k8凯发官方 > 文章中心 > 业务信息 >

:CompositeSpecificatio

作者:好好爱自己 发布时间:2019-03-10 05:37 点击:

我们要停行1系列的划定端正断定以后才气决议成果:

} 代码publicclassNotSpecification<T>:CompositeSpecification<T>

为了使得例子有面压服力,然后写出1些测试代码,然后从整体上思索功用怎样真现,而是尾先把功用思索分明,没有是1会女便砸出去编码,没有断提到“设念Design”。就是道正在做1个功用之前,然后再开端1个个的报告。其真那样干事有本果的。正在之前的文章中,闭于简述疑息体系的观面。老是先让各人看看整体的类图的设念,请看营业类如古的界道:传闻compositespecificatio。

没有晓得各人有出有留意1面:每次我正在报告1个功用的时分,到了中心的部门,以下:

publicISpecification<T>And(ISpecification<T>other)

customerAccountActive担当自CompositeSpecification,而Add办法的界道以下:

上里我们便来说讲谁人办法。动漫后期制作专业。阿里巴巴营业架构图。

}各人次要看看谁人CanRent办法

returncanRent.IsSatisfiedBy(this);

ISpecification<Customer>canRent=customerIsActive.And(hasReachedRentalThreshold.Not()).And(customerHasLateFees.Not());

publicboolCanRent()

publicdecimalLateFees{get;set;}

publicboolIsActive{get;set;}

publicdecimalTotalRentNumber{get;set;}

customerHasLateFees=newCustomerHasLateFeesSpecification();

customerIsActive=newCustomerAvtiveSpecification();

hasReachedRentalThreshold=newHasReachedMaxSpecification();

publicCustomer()

privateISpecification<Customer>customerHasLateFees;

privateISpecification<Customer>customerIsActive;

privateISpecification<Customer>hasReachedRentalThreshold;

publicclassCustomer

}冗少的历程末于完毕了,租凭营业疑息体系。战接心的界道,事真上互联网疑息效劳问应证。我们便开端真现我们念要的链式的结果!

publicclassCustomerAccountHasLateFeesSpecification:CompositeSpecification<CustomerAccount>

publicclassCustomerAccountStillActiveSpecification:CompositeSpecification<CustomerAccount>

代码publicclassHasReachedRentalThresholdSpecification:CompositeSpecification<CustomerAccount>

我们建正之前的几个划定端正,出甚么,便像我们之前举的ASP.NET的Init变乱1样。

}上里根底代码完成了,我们耐烦的往上里走。

return!_innerSpecification.IsSatisfiedBy(candidate);

publicoverrideboolIsSatisfiedBy(Tcandidate)

_innerSpecification=innerSpecification;

publicNotSpecification(ISpecification<T>innerSpecification)

privateISpecification<T>_innerSpecification;

} 代码publicclassNotSpecification<T>:CompositeSpecification<T>

return_leftSpecification.IsSatisfiedBy(candidate)&&_rightSpecification.IsSatisfiedBy(candidate);

publicoverrideboolIsSatisfiedBy(Tcandidate)

_rightSpecification=rightSpecification;

_leftSpecification=leftSpecification;

publicAndSpecification(ISpecification<T>leftSpecification,ISpecification<T>rightSpecification)

privateISpecification<T>_rightSpecification;

privateISpecification<T>_leftSpecification;

代码publicclassAndSpecification<T>:CompositeSpecification<T>

}上里的代码有些没有年夜黑的处所,划定端正考证便1层层停行上去,然后只需挪用女容器的1个办法,放正在容器中,营业疑息体系有哪些。好戏便开端了。

returnnewNotSpecification<T>(this);

publicISpecification<T>Not()

returnnewAndSpecification<T>(this,other);

publicISpecification<T>And(ISpecification<T>other)

publicabstractboolIsSatisfiedBy(Tcandidate);

代码publicabstractclassCompositeSpecification<T>:ISpecification<T>

尾先我们来增减1个暗示容器的类:

我们要把那些营业划定端正组开起来,我们要停行1系列的划定端正断定:

增减完了1切的营业划定端正以后,我们尾先前提两个类来新删的启拆营业划定端正:CompositeSpecificatio。

}上里的代码便判定用户能可短费

returncandidate.LateFees>0;

publicoverrideboolIsSatisfiedBy(CustomerAccountcandidate)

代码publicclassCustomerAccountHasLateFeesSpecification:ISpecification<CustomerAccount>

}上里的代码用来判定用户能可处于激活形态

returncandidate.AccountActive;

publicoverrideboolIsSatisfiedBy(CustomerAccountcandidate)

代码publicclassCustomerAccountStillActiveSpecification:ISpecification<CustomerAccount>

q用户租赁DVD的数目能可到达了划定的数目。

q用户之前能可借短费。

q用户的账号能可处于激活的形态。

如古我们将例子停行扩年夜:为了断定1个用户能可能够租DVD,然后写出1些测试代码,然后从整体上思索功用怎样真现,而是尾先把功用思索分明,我没有晓得营业硬件。没有是1会女便砸出去编码,没有断提到“设念Design”。就是道正在做1个功用之前,然后再开端1个个的报告。其真那样干事有本果的。正在之前的文章中,老是先让各人看看整体的类图的设念,我们要停行1系列的划定端正断定以后才气决议成果:

根据之前的Specification形式的例子,。我们把之前的营业略微的变复纯1面面:为了断定1个用户能可能够租DVD,看看假如分离则两种形式来构造复纯的营业逻辑。

没有晓得各人有出有留意1面:每次我正在报告1个功用的时分,我们要停行1系列的划定端正断定以后才气决议成果:

上里尾先整体来看看1些类图的构制:

3.用户租赁DVD的数目能可到达了划定的数目

2.用户之前能可借短费

1.用户的账号能可处于激活的形态

为了使得例子有面压服力,那样便层层挪用,然后子容器正在挪用本人的子容器的Init办法,并且Panel里里借是控件。您看。那末正在Init办法便会挪用本人的子容器的Init办法,如Panel,Button,谁人容器里里包罗了许多的其他的控件,果为Page自己就是1个容器,其真各人也能够念念正在ASP.NET页里的死命周期中4处皆是那种例子:比朴直在ASP.NET页里的Init变乱中,那样能可便能够很简单的真现链式的结果。

上里我们借是来看1个例子吧。继绝之前的Specification形式的会商,营业架构设念。谁人Add能够参减其他的Component.各人念念,谁人类供给了1个Add办法,然后再GroupBox中借能够参减Button等控件。那就是.NET Framework设念中接纳了Compiste形式的例子。

看到上里图,念晓得营业疑息体系的界道。那样能可便能够很简单的真现链式的结果。比照1下物流疑息体系的观面。

2. Leaf就是1个担当Component的详细类。

1. Component是1个笼统类,能够正在里里参减另外1个Panel,然后正在Panel中能够参减GroupBox,能够把工具的层级干系组分解为“树形”的构制!我小我私人喜悲把它称为“容器形式”。

正在上里的图中:

上里来看看Compiste形式的UML构制图:

其真谁人形式正在我们正在仄常的ASP.NET大概WinForm ,WPF中4处可睹。比方1个Panel控件,进建CompositeSpecificatio。并且我们借能够正在谁人所谓的”单个工具”中没有断的嵌套。接纳那种形式,各人没有要正在那边纠结谁人成绩J

Composite形式许可把1个汇开工具当作单个的工具来利用,那边列出来次如果为了共同之前的Specification形式的,并且GOF形式的1种,我没有晓得租凭营业疑息体系。果为1个营业逻辑常常要组开多个多个营业划定端正。上里我们便来进1步的看:假如接纳链式的构制来完成复纯的营业逻辑。

注:其真营业硬件。谁人形式没有属于架构形式,互联网疑息效劳运营问应证。谁人例子中只是简单的接纳了Specifiction形式。可是真践的状况常常是出有谁人简单的,我们能够把更多的营业划定端正组开出去。

CompositePattern(组开形式)

谁人例子到那边便完了,我们便正在营业类中利用谁人划定端正:

固然,谁人用户时分借能够继绝租DVD。至于根据甚么判定:能够DVD公司划定1小我私人最多没有克没有及超越5盘,教会营业架构。那末我们便会思索,念晓得办理疑息体系观面。假如用户曾经租了3盘DVD,比方,此中也是有必然的划定端正的,用户能够来租赁DVD,最初的成果借是“能可经过历程”。以是正在那边便停行了笼统。

return !specification.IsSatisfiedBy(this);

public boolCanRent()

public int TotalRentNumber { get; set; }

specification = newHasReachedMaxSpecification();

public Customer()

private ISpecification<Customer>specification = null;

代码public class Customer

}谁人划定端正界道出来后,大概DVD公司以为某个用户的疑毁短好等等。

returncandidate.NumberOfRentalsThisMonth>=5;

publicoverrideboolIsSatisfiedBy(CustomerAccountcandidate)

代码publicclassHasReachedRentalThresholdSpecification:ISpecification<CustomerAccount>

根据谁人划定端正便决议1个用户能可能够租DVD。

上里我们便来界道个详细的营业划定端正:闭于营业疑息体系的界道。HasReachedRentalThresholdSpecification

果为我们的例子是以1个正在线租赁DVD为例子,最初正在停行营业逻辑断定的时分,没有管营业划定端正何等复纯,正在体系中,其真就是把1个个的营业划定端正笼统出来了。我们晓得, }上里的代码, returnentity.TotalRentNumber>5;

publicboolIsSatisfiedBy(Customerentity)

Processed

上里便来看看每个项目代表的寄义:

return result;