2018年5月18-19日,由51CTO主办的全球软件与运维技术峰会在北京召开。此次峰会围绕人工智能、大数据、物联网、区块链等12大核心热点,汇聚海内外60位一线专家,是一场高端的技术盛宴,也是顶级IT技术人才学习和人脉拓展不容错过的平台。
掌握了JAVA技术,才是走在了IT技术的前沿。
类是你的Java应用程序的构建块。如果这些街区不够强大,你的建筑(即应用)将来会面临困难时期。这基本上意味着,当应用程序范围扩大或应用程序在生产或维护中面临某些设计问题时,写得不好会导致非常困难的情况。
另一方面,一套精心设计的和书面的类可以加速编码过程,同时减少相比较的错误数量。
在这篇文章中,我将列出5个最值得推荐的设计原则,在编写你的课程时你应该记住。这些设计原则简称为SOLID。它们也构成了设计应用程序类所需遵循的最佳实践。
单一责任原则
原则的名称说明了一切:
“一个班级应该有唯一的责任”
换句话说,你应该只为了一个目的而编写,改变和维护一个类。如果它是模型类,那么它应该严格地只代表一个演员/实体。这将使您可以灵活地在将来进行更改,而不用担心其他实体发生更改的影响。
同样,如果你正在编写服务/管理器类,那么它应该只包含那部分方法调用,而不包含其他内容。甚至没有与模块相关的实用程序全局功能 在另一个全局可访问的类文件中更好地分离它 这将有助于为特定目的维护班级,并且您只能决定班级对特定模块的可见性。
开放闭合原则
这是在设计应用程序时应牢记的第二条重要规则。它说:
“软件组件应该开放用于扩展,但为修改而关闭”
这是什么意思??这意味着你的类应该被设计成每当开发者想要改变应用程序中特定条件下的控制流时,他们所需要的只是扩展你的类并覆盖一些功能,就是这样。
如果其他开发人员由于班级限制而无法设计所需的行为,那么您应该重新考虑更改班级。我并不是说任何人都可以改变你的课程的整个逻辑,但是他/她应该能够以软件允许的无害方式覆盖软件提供的选项。
例如,如果你看看像struts或spring这样的好框架,你会看到你不能改变它们的核心逻辑和请求处理,但是你只需要扩展一些类并将它们插入到配置文件中就可以修改所需的应用程序流。
Liskov的替代原则
这个原理是前面讨论的开放闭合原理的变体。它说:
“派生类型必须完全替代其基本类型”
这意味着通过扩展类创建的类开发人员应该能够适应应用程序而不会失败。也就是说,如果一位开发人员很难扩展你的类的某些部分并注入框架/应用程序,那么它不应该破坏应用程序,也不应该抛出致命的异常。
这可以通过严格遵守第一条规则来保证。如果您的基类严格执行一件事,那么开发人员会在最差的情况下错误地仅覆盖一个功能。这可能会导致一个区域出现错误,但整个应用程序不会停止。
界面隔离原理
这个原则是我最喜欢的。它适用于接口,因为单个责任原则适用于类。它说:
“不应该强迫客户实施他们不会使用的不必要的方法”
举一个例子。开发人员Alex创建了一个接口Reportable并添加了两个方法generateExcel()和generatedPdf()。现在客户端’A’想要使用这个接口,但他打算只使用PDF格式而不使用excel。他会轻松实现功能吗?
没有。他将不得不实施两种方法,其中一种是由软件设计者给他的额外负担。要么他会实施另一种方法或将其留空。所以不期望的情况下,对吗?
那么解决方案是什么?解决方案是通过打破现有的界面来创建两个界面。他们应该是PdfReportable和ExcelReportable。这将使用户只能使用所需功能的灵活性。
依赖倒置原理
我们大多数人已经熟悉原则上使用的词语。它说:
“取决于抽象,而不是结核”
换一种说法。你应该设计你的软件,使得各个模块可以使用抽象层相互分离,以将它们绑定在一起。在Spring框架中经典地使用BeanFactory的这个原则。在Spring框架中,所有模块都作为独立的组件提供,它们可以通过简单地注入其他模块中的依赖关系一起工作。它们的边界非常接近,除了弹簧外,还可以在其他软件模块中使用它们,同样方便。
这是通过依赖倒置和开放封闭原则实现的。所有模块仅公开抽象,这对于扩展另一个模块中的功能或插件非常有用。
上海知力信息科技有限公司是一家专业致力于为企业信息化提供互联网应用服务和独立软件开发的高新技术企业,公司主要从事企业和互联网应用技术研发、使用及互联网增值服务等业务, 因着专业的团队、优秀的开发能力和完善的售后服务,曾经荣幸地为达能,光明乳业,中发集团,上海大众、slb、bp等跨国公司、国内知名企业及政机构提供过多语言网站建设、互联网应用系统开发、企业管理应用系统(oa、crm、erp)和多媒体应用等服务! 知力开发团队成员是由一群长期从事互联网应用服务、 企业电子信息化开发建设等行业的专业工程师组成,工作经验平均在3年以上,我们的理念是根据其不同客户的商业发展目标与需求,定制软件的解决方案,开发出最大“价值化”的产品,帮助他们从同行业中脱颖而出 ,我们提供 上海 , 浙江本地化服务及全球远程服务。