欢迎来到天天文库
浏览记录
ID:30934887
大小:51.00 KB
页数:12页
时间:2019-01-04
《面向对象设计原则和创建solid应用的5个方法-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Ifli向对象设计原则和创建SOLID应用的5个方法・编程开发技术面向对象设计原则和创建SOLID应用的5个方法本文111ImportNew-hejiani翻译自zeroturnaround□欢迎加入翻译小组。转载诘见文末要求。最近我听到了很多关于函数式编程(FP),受Z启发我觉得也应该关注而向对彖编程(OOP)和面向对彖设计(00D),因为在设计系统时这些仍然非常重要。我们将以SOLID原则为起点开始我们的旅程。SOLID原则是类级别的,面向对象的设计理念,它们与测试工具一起帮你改进腐坏的代码。SOLID由程序员们最喜欢
2、的大叔RobertC.Martin(Bob大叔)提出,它其实是五个其他缩略词的组合——SRP,OCP,LSP,ISP,DIP,我会在下面有更深入的介绍。最重要的是,SOLID原则使你的软件变得更冇价值。呃,这个代码有坏味道…代码腐坏1.当应用程序代码大量腐坏,开发人员会发现代码越來越难以维护、臃肿。那么如何识别将来的代码腐坏?这些迹象可能表明将要代码腐坏:僵化小的变化导致整个系统重建。•脆弱——一个模块的变化导致其他不相关模块不正常运行。想彖一个汽车系统,改变电台的功能会影响到窗户的使用。•固定个模块的内部组件不能被抽取并
3、且在新环境重用。比如一个应用程序的登录模块不能在完全不同的系统中使用,那么这个模块是固定的,这是由丁•各模块Z间的耦合和依赖造成的。改进的策略是从低层次的细节,比如特定的数据库,UI实现(Web,桌面),特殊框架等解耦核心抽象。•粘性——代码构建和测试很难执行,并且要花费很长时间运行,英至小的变化有很高的成木,并且要求在多个位置/层次修改。用户期槊从他们所用的软件之外得到一些价值。一个应用程序的价值在于它能否帮助用户将一些事情做得更好,增加生产力或者时间或金钱,在“浪费”上有所节省。人们通常付出金钱来换取价值高的软件。但是
4、用户从伟大的软件得到了次要价值。我想要谈谈这个价值,因为这也是人们在谈论软件价值时最先想到的:功能。如果软件完成了用户需求的同时没冇崩溃和延迟,那么这个软件的次要价值就高。软件满足了用户的当前需求,用户就获得了次要价值。但是,用户需求经常变化,软件提供的功能和用户需求很容易不同步,这导致了价值降低。为了保持次耍价值高,软件必须能够跟上用户不断变化的需求。所以在这里我们来谈谈软件的首要价值,它必须能够容忍和有助于正在进行的变化。试想一下,你的软件目前可以满足用户的需求,但是实在是很难改变,改变成本很高。那么,由于应用程序的不
5、灵活性以及其盈利能力可能降低,用户会不高兴。现在试想其他的软件开始时次要价值低,但是它可以容易且廉价地改变。盈利能力持续上升,用户也越来越高兴。那么什么是SOLID原则?单一职责原则(SRP)单一职责原则(SingleResponsibilityPrinciple,SRP)指出,一个类发生变化的原因不应该超过一个。这意味着代码中每个类,或者类似的结构只有一个功能。在类中的一切都与该单一目的有关,即内聚性。这并不是说类只应该含有一个方法或属性。类屮可以包括很多成员,只要它们与单一的职责冇关。当类改变的一个原因出现时,类的多个
6、成员可能多需要修改。也可能多个类将需要更新。下面的代码有多少职责?classEmployee{publicPaycalculatePay(){.・・}publicvoidsave(){・・・}publicStringdescribeEmployee(){...}}正确答案是3个。在一个类屮混合了1)支付的计算逻辑,2)数据库逻辑,3)描述逻辑。如果你将多个职责结合在一个类中,可能很难实现修改一部分时不会破坏其他部分。混合职责也使这个类难以理解,测试,降低了内聚性。修改它的最简单方法是将这个类分割为三个不同的相互分离的类,每
7、个类仅仅有一个职责:数据库访问,支付计算和描述。开闭原则(OCP)开闭原则(Open-ClosedPrinciple,OCP)指出:类应该对扩展开放但对修改关闭。“对扩展开放”指的是设计类时耍考虑到新需求捉出时类可以增加新的功能。“对修改关闭”指的是一旦一个类开发完成,除了改正b昭就不再修改它。这个原则的两个部分似乎是对立的。但是,如果正确地设计类和他们的依赖关系,就口J以增加功能而不修改已有的源代码。通常来说可以通过依赖关系的抽彖实现开闭原则,比如接口或抽象类而不是具体类。通过创建新的类实现接口来增加功能。在项目中应用O
8、CP原则可以限制代码的更改,一旦代码完成,测试和调试之后就很少再去更改。这减少了给现有代码引入新bug的风险,增强软件的灵活性。为依赖关系使用接口的另一个作用是减少耦合和增加灵活性。voidcheckOut(Receiptreceipt){Moneytotal二Money.zero;for(item:i
此文档下载收益归作者所有