志在指尖
用双手敲打未来

C#规划模式学习笔记:规划准则

写代码也是有准则的,咱们之所以运用规划形式,主要是为了适应改动,进步代码复用率,使软件更具有可保护性和可扩展性。假如咱们能更好的理解这些规划准则,对咱们了解面向目标的规划形式也是有协助的,因为这些形式的发作是基于这些准则的。规划准则包括:单一职责准则(SRP)、开闭准则(OCP)、里氏替换准则(LSP)、依靠倒置准则(DIP)、接口阻隔准则(ISP)、组成复用原则(CRP)、迪米特规律(LoD)。c#
下面咱们就别离介绍这七种规划准则:
一、单一职责准则(SRP)
1)SRP(SingleResponsibilitiesPrinciple)的界说:就一个类而言,应该仅有一个引起它改动的原因。简而言之,便是功用要单一。
2)假如一个类承当的职责过多,就等于把这些职责耦合在一起,一个职责的改动可能会削弱或者抑制这个类完成其它职责的才能。这种耦合会导致软弱的规划,当改动发作时,规划会遭受到意想不到的损坏。(敏捷软件开发)
3)软件规划真实要做的许多内容,便是发现职责并把那些职责彼此别离。
小结:单一职责准则(SRP)可以看做是低耦合、高内聚在面向目标准则上的引申,将职责界说为引起改动的原因,以进步内聚性来减少引起改动的
原因。职责过多,引起它改动的原因就越多,这样就会导致职责依靠,大大损害其内聚性和耦合度。
二、开闭准则(OCP)
1)OCP(Open-ClosePrinciple)的界说:便是说软件实体(类、办法等等)应该可以扩展(扩展可以了解为添加),可是不能在原来的办法或者类上修改,也可以这样说,对添加代码开放,对修正代码关闭。
2)OCP的两个特征:对于扩展(添加)是开放的,因为它不影响原来的,这是新添加的。对于修正是关闭的,假如总是修正,逻辑会越来越杂乱。
小结:开闭准则(OCP)是面向目标规划的中心思维。遵从这个准则可以为咱们面向目标的规划带来巨大的好处:可保护(保护成本小、做管理简单、影响最小)、可扩展(有新需求,添加就好)、可复用(不耦合,可以运用曾经代码)、灵活性好(保护方便、简略)。开发人员应该仅对程序中呈现频频改动的那些部分做出笼统(可是不能过激,对应用程序中的每个部分都刻意地进行笼统同样也不是一个好主意,回绝不成熟的笼统和笼统自身相同重要)。
三、里氏替换准则(LSP)
1)LSP(LiskovSubstitutionPrinciple)的界说:子类型有必要可以替换掉它们的父类型。更直白的说,LSP是完成面向接口编程的基础。
小结:任何基类可以呈现的当地,子类一定可以呈现,所以咱们可以完成面向接口编程。LSP是承继复用的柱石,只要当子类可以替换掉基类,软件的功用不受到影响时,基类才能真实被复用,而子类也可以在基类的基础上添加新的行为。里氏代换准则是对开闭准则的弥补,完成开闭准则的要害步骤便是笼统化,而基类与子类的承继关系便是笼统化的详细完成,所以里氏代换准则是对完成笼统化的详细步骤的标准。里氏替换准则的经典反例:正方形不是长方形、玩具枪不能杀人、鸵鸟不会飞。
四、依靠倒置准则(DIP)
1)DIP(DependenceInversionPrinciple)的界说:笼统不应该依靠细节,细节应该依靠于笼统。简略说便是,咱们要针对接口编程,而不要针对完成编程。
2)高层模块不应该依靠低层模块,两个都应该依靠笼统,因为笼统是安稳的。笼统不应该依靠详细(细节),详细(细节)应该依靠笼统。
小结:依靠倒置准则其实可以说是面向目标规划的标志,假如在咱们编码的时分考虑的是面向接口编程,而不是简略的功用完成,体现了笼统的安稳性,只要这样才契合面向目标的规划。
五、接口阻隔准则(ISP)
1)接口阻隔准则(InterfaceSegregationPrinciple,ISP)指的是运用多个专门的接口比运用单一的总接口要好。也便是说不要让一个单一的接口承当过多的职责,而应把每个职责别离到多个专门的接口中,进行接口别离,过于臃肿的接口是对接口的一种污染。
2)运用多个专门的接口比运用单一的总接口要好。
3)一个类对另外一个类的依靠性应当是建立在最小的接口上的。
4)一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口兼并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。
5)“不应该逼迫客户依靠于它们不必的办法。接口归于客户,不归于它地点的类层次结构。”这个说得很理解了,再浅显点说,不要逼迫客户运用它们
不必的办法,假如逼迫用户运用它们不运用的办法,那么这些客户就会面对因为这些不运用的办法的改动所带来的改动。小结:接口阻隔准则(ISP)告诉咱们,在做接口规划的时分,要尽量规划的接口功用单一,功用单一,使它改动的因素就少,这样就更安稳。其实这体现了高内聚、低耦合的准则,这样做也避免接口的污染。
六、组成复用准则(CRP)
1)组合复用准则(CompositeReusePrinciple,CRP)便是在一个新的目标里边运用一些已有的目标,使之成为新目标的一部分,新目标通过向这些目标的委派达到复用已用功用的目的。简略地说,便是要尽量运用组成/聚合,尽量不要运用承继。
2)要运用好组合复用准则,首要需求区别”Has–A”和“Is–A”的关系。“Is–A”是指一个类是另一个类的“一种”,是归于的关系,而“Has–A”则不同,它表示某一个角色具有某一项职责。导致过错的运用承继而不是聚合的常见的原因是过错地把“Has–A”当成“Is–A”。例如:鸡是动物,这便是“Is-A”的体现,某人有一支手枪,People类型里边包括一个Gun类型,这便是“Has-A”的体现。
小结:组成复用准则可以使体系愈加灵活,类与类之间的耦合度下降,一个类的改动对其他类造成的影响相对较少,因而一般首选运用组成来完成复用;其次才考虑承继,在运用承继时,需求严厉遵从里氏替换准则,有效运用承继会有助于对问题的了解,下降杂乱度,而滥用承继反而会添加体系构建和保护的难度以及体系的杂乱度,因而需求稳重运用承继复用。
七、迪米特规律(LawofDemeter)
1)迪米特规律(LawofDemeter,LoD)又名最少知识准则(LeastKnowledgePrinciple,LKP),指的是一个目标应当对其他目标有尽可能少的了解。也便是说,一个模块或目标应尽量少的与其他实体之间发作彼此作用,使得体系功用模块相对独立,这样当一个模块修正时,影响的模块就会越少,扩展起来愈加容易。
2)关于迪米特规律其他的一些表述有:只与你直接的朋友们通信,不要跟“陌生人”说话。
3)外观形式(FacadePattern)和中介者形式(MediatorPattern)就运用了迪米特规律。
小结:迪米特规律的初衷是下降类之间的耦合,完成类型之间的高内聚、低耦合,这样可以解耦。可是凡事都有度,过火的运用迪米特准则,会发作
很多这样的中介和传递类,导致体系杂乱度变大。所以在采用迪米特规律时要反复权衡,既做到结构清晰,又要高内聚低耦合。

未经允许不得转载:IT技术网站 » C#规划模式学习笔记:规划准则
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载