每个Java程序员都应该学习10条编码原则

莫问天涯路几重,轻衫侧帽且从容。这篇文章主要讲述每个Java程序员都应该学习10条编码原则相关的知识,希望能为你提供帮助。


面向对象的设计原则 是OOP编程的核心。尽管如此,我还是看到大多数java程序员都在追逐设计模式,比如单例模式, 装饰图案,或观测器模式,而且没有把足够的注意力放在学习上面向对象的分析与设计.
学习面向对象编程的基础知识(如抽象、封装、多态性和继承)是至关重要的。但是,同时,了解面向对象的设计原则也同样重要。

它们将帮助您创建一个干净和模块化的设计,这将是很容易测试,调试,并在未来的维护。







我经常看到具有不同经验级别的Java程序员和开发人员,他们要么从未听说过这些面向对象的设计原则,要么从未听说过可靠的设计原则。,或者不知道特定的设计原则有什么好处,以及如何在编码中应用这些设计原则。


为了完成我的工作,我已经记下了所有重要的面向对象的设计原则,并把它们放在这里供快速参考。这些至少会让你知道他们是什么,他们提供了什么好处。


如果你不能理解一个设计原则,你应该尝试做一个以上的例子,因为有时我们连接到另一个模型或作者更好;不过,您必须遵循这些设计原则,并学习如何在代码中使用它。您可以做的另一件事是参加一门全面的面向对象的设计课程,如面向对象设计的坚实原则史提夫·史密斯在“普卢拉明”上。这对我理解和应用这些原则有很大帮助。
面向对象和面向对象的程序设计原则虽然学习任何设计原则或模式的最好方法是一个真实世界的例子,并理解违反该设计原则的后果,但本文的主题是介绍。面向对象设计原则对于Java程序员来说,他们要么没有公开,要么处于学习阶段。







我觉得这些OOP和实体设计原则需要一篇文章来解释清楚,我将在这里尝试这样做,但就目前而言,请做好准备,在设计原则上快速骑自行车,城镇:)


1.DRY(不要重复)我们的第一个面向对象的设计原则是枯燥的,顾名思义。DRY(不要重复)意思是不要写重复的代码,而是使用抽象在一个地方抽象日常事物。
如果在两个以上的地方有一个代码块,可以考虑将其作为一个单独的方法,或者如果您多次使用硬编码的值,则将它们设置为一个单独的方法。公共终常数。这种面向对象的设计原则的好处在于维修.
重要的是不要滥用它,复制不是为了代码,而是为了功能。
这意味着如果您使用了标准代码来验证OrderId 和SSN这并不意味着他们是一样的,否则他们将在未来保持不变。
通过为两种不同的功能或事物使用标准代码,您可以永远地将它们紧密结合在一起,当OrderId更改其格式时,您的SSN验证代码就会中断。
因此,要小心这种耦合,不要组合使用类似代码但不相关的任何东西。您可以进一步查看软件体系结构基础与设计模式在关于Udemy的Java课程中,学习更多关于编写正确的代码和在设计系统时应遵循的最佳实践的知识。


2.封装变化在软件领域,只有一件事是不变的,那就是“更改”,因此封装您期望或怀疑将来会更改的代码。
这种面向对象的设计原则的好处是很容易测试和维护正确的封装代码。
如果您使用Java编写代码,那么遵循默认情况下使变量和方法私有并逐步增加访问权限的原则。
几个Java中的设计模式使用封装;工厂设计模式是封装的一个例子,它封装了对象创建代码,并提供了在不影响现有代码的情况下引入新产品的灵活性。
顺便说一句,如果您有兴趣了解更多关于java和面向对象编程中的设计模式的知识,那么您必须检查以下内容:设计模式库关于普鲁拉视野的课程。它是关于如何在现实世界中使用它们的设计模式和建议的最佳集合之一。
3.开放式封闭设计原则根据这一面向对象设计原则,“类、方法或函数应开放以供扩展(新功能),并关闭以进行修改。”
这是鲍勃叔叔在他的经典作品中提出的另一个漂亮的坚实的设计原则。清洁码本,这样可以防止某人更改已经尝试和测试过的代码。
这个设计原则的主要好处是尝试过并测试过的代码不受影响。这意味着他们不会崩溃。
下面是一个Java代码示例违反开放式程序设计原则:
在此代码中,GraphicEditor与形状紧密耦合,如果需要新形状,则需要在drawShape(Shape s)方法,这既容易出错,也不可取。
理想情况下,如果您只添加新功能,那么您的代码应该进行测试,这就是开放封闭设计原则的目标。
顺便说一句,开闭原则是固体缩略词的“O”。如果您想更多地了解这个原则,面向对象设计与体系结构的坚实原则关于Udemy的课程是最好的参考资源之一。


4.单一责任原则单责任原则是另一个坚实的设计原则,在实体字缩写中代表“S”。根据SRP,不应该有一个以上的原因来改变一个类,或者一个级别应该始终处理单个功能。
这个原则的主要好处是它减少了软件的各个组件与代码之间的耦合。
例如,如果您在Java中的一个类中放置了多个功能,那么它将引入耦合在两个功能之间,即使您更改了一个特性,也有可能破坏耦合功能,这需要进行另一轮测试,以避免对生产环境产生任何意外。
你还可以看到从0到1:设计模式-24 关于Udemy的课程,学习基于这个原则的模式。


5.依赖注入或反转原则不要要求依赖,它将由框架提供给您。这在Spring框架中得到了很好的实现,Spring框架是编写真正有价值的应用程序的最流行的Java框架之一。
这种设计原则的优点在于,任何由DI框架注入的类都很容易用模拟对象进行测试,而且易于维护,因为对象创建代码集中在框架中,并且客户端代码中并不散落着这些代码。
有多种实现方法依赖注入,比如使用字节码工具,一些AOP(面向方面编程)框架就像AspectJ那样,或者像Spring一样使用代理。
您可以进一步看到面向对象设计与体系结构的坚实原则关于Udemy的课程,以了解更多关于这个有用的原则。它还代表固体缩略词的“D”。
下面是一个违背依赖反转原则或Java中DIP的代码示例:
你可以看到AppManager 取决于EventLogWriter 与AppManager。如果您需要使用其他方式通知客户端,比如发送推送通知、SMS或电子邮件,则需要更改AppManager 班级。
这个问题可以用依赖反转原理来解决。AppManager 索要EventLogWriter,它将由框架注入或提供给AppManager。
你还可以看到用扎实的原则编写更好的代码--速成课程对Udemy更多地了解依赖反演原理以及如何解决这些问题。


6.有利于组合而不是继承重用您已经编写的代码的一般方法有两种,即继承和组合;两者各有优缺点,但一般来说,如果可能的话,您应该总是倾向于组合而不是继承。
你们中的一些人可能会这么说,但我发现构图是不是比继承.
通过在运行时设置属性,组合允许在运行时更改类的行为,通过使用接口组合类,我们使用多态,它提供了在任何时候以更好的实现代替的灵活性。
甚至约书亚·布洛赫有效Java建议倾向于组合而不是继承。如果你还没有被说服,那么你也可以了解为什么组合比继承更适合重用代码和功能。
而且,如果你总是忘记这条规则,这是一个很好的卡通放在你的桌子上:-)
如果您对学习更多关于面向对象编程概念(如组合、继承、关联、聚合等)感兴趣,也可以查看Java中的面向对象编程关于古瑟拉的课程。
它可以自由探索和学习但是,如果你也想参加练习、作业、评估,并且需要在你的LinkedIn个人资料中显示证书,你将被收取费用。
7.Liskov替代原则根据Liskov替换原则,子类型必须是超级类型的替代I指使用超类类型的方法或函数必须能够使用对象子类,没有任何问题“。
LSP关系密切对单一责任原则和界面分离原理.
如果类具有比子类更多的功能,则可能不支持某些功能,并且确实违反了LSP。
为了跟随LSP实体设计原理,派生类或子类必须增强功能,而不是减少它们。LSP代表固体缩略词的“L”。
下面是一个违背Java中Liskov替换原则的代码示例:
Liskov替换原理在Java中的应用
如果你有办法area(Rectangle r),它计算矩形的面积,然后当您传递Square 因为Square 不是真正的长方形。
如果您对一个更真实的示例感兴趣,那么面向对象设计的坚实原则Pluralsight课程是一门非常好的课程。


8.接口隔离原则(ISP)接口隔离原则说明客户端不应实现界面如果它不使用这个的话。
这种情况主要发生在一个接口包含多个功能时,而客户机只需要一个功能,而不需要其他功能。
毫无疑问,接口设计是一项棘手的工作,因为一旦您释放了您的接口,您就无法在不破坏所有实现的情况下更改它。当然,Java 8的默认或保护方法功能确实为接口的发展提供了一种方式,但并不是所有的编程语言都支持这些特性。
这种设计原则在Java中的另一个好处是,接口的缺点是在任何类都可以使用它之前实现所有方法,因此拥有单一的功能意味着实现的方法更少。
如果您在编写代码时得不到接口的好处,那么我建议您阅读我的博客文章,Java中接口的实际使用了解更多。
9.接口方案编制-不执行程序员应该总是用于接口的程序,而不是用于实现的;将导致灵活的代码,它可以与接口的任何新实现一起工作。
具体而言,您应该对变量使用接口类型,返回方法的类型。类Java中的参数类型SuperClass类型来存储对象,而不是使用SubClass.
我是说
List numbers= getNumbers();
而不是
ArrayList numbers = getNumbers();
这也在许多Java书籍中得到了建议,包括有效Java和头第一设计模式书。
如果您对提高程序的代码质量感兴趣,我还建议您看看重构设计模式关于Udemy的课程,它将帮助您使用C#中的重构技术和设计模式来改进内部设计。
10.授权原则不要自己做所有的事情,把它委托给相应的班级。委托设计原则的经典例子是java中的equals()和hashCode()方法.
为了比较两个对象是否相等,我们要求类本身进行比较,而不是进行比较。Client 做那个检查。
这个设计原则的主要好处是没有重复代码而且很容易改变行为。事件委托是此原则的另一个示例,其中将事件委托给处理程序进行处理。


总结所有这些面向对象设计原则通过努力实现高内聚性和低耦合性,帮助您编写灵活和更好的代码。
理论是第一步,但最重要的是培养发现何时应用这些设计原则的能力.
一旦掌握了这一点,下一步就是学习Java中的设计模式,它使用这些设计模式来解决应用程序开发和软件工程中常见的问题。
原作者:Java学习提升



【每个Java程序员都应该学习10条编码原则】


    推荐阅读