java在现实生活中设计开闭原理

java在现实生活中设计开闭原理,java,Java,开闭原则说,使用抽象/策略设计模式,这样我们就不需要更改现有代码,我完全理解这一点。当我看到例子时,这似乎很容易。但在现实生活中,会有很多领域对象,如果我们使用开闭原理,我最终会得到数千个类 我的问题是,人们是否在大型项目中遵循这一点并创建了这么多类 另外,如果所有的业务逻辑都指向域对象,那么人们在服务类中编写的逻辑是什么(所谓的服务类,我指的是服务层中的类(web->service->dao)。我为愚蠢的问题道歉,但我很好奇,在复杂的大型项目中,设计的标准方式是什么。这些肯定不是愚蠢的问题,让

开闭原则说,使用抽象/策略设计模式,这样我们就不需要更改现有代码,我完全理解这一点。当我看到例子时,这似乎很容易。但在现实生活中,会有很多领域对象,如果我们使用开闭原理,我最终会得到数千个类

我的问题是,人们是否在大型项目中遵循这一点并创建了这么多类


另外,如果所有的业务逻辑都指向域对象,那么人们在服务类中编写的逻辑是什么(所谓的服务类,我指的是服务层中的类(web->service->dao)。我为愚蠢的问题道歉,但我很好奇,在复杂的大型项目中,设计的标准方式是什么。

这些肯定不是愚蠢的问题,让我尽力为您解答

关于开闭原则,它与特定的设计模式或其他模式无关,而是与类应该为扩展而打开,为修改而关闭的一般概念有关

在一个项目中,你拥有的类的数量不应该吓倒你。不幸的是,我曾在很多类被认为是坏事的公司工作(“难以遵循代码…”、“知识库太大…”,以及其他类似的荒谬想法)

事实是,当你的类很少时,它们很可能是大型类,因为所有的业务逻辑都必须去某个地方,对吗?这通常(几乎总是)意味着你的每个类都在做很多事情。当然,通过在每个类中做这么多,你打破了单一责任原则(又名SRP,另一个非常重要的OOP原则),这使得系统更难维护,代码库也更难理解

关于现实生活中的情况,没有一个答案。我有机会为那些真正关心面向对象原则并严格执行这些原则的公司工作(很好!),也为那些仍然停留在过程编码风格中的公司工作(不太好…)。所有这些公司都是盈利的,交付给客户,等等。区别在于,在后一种类型的公司中,作为新员工(甚至是经验丰富的员工)理解代码要困难得多,更改代码要困难得多(更不用说测试代码)

关于您关于服务层实现的另一个问题,我可以根据自己的经验证明,通常服务层本身非常薄。一般来说,实现服务层接口的类使用内部的一个或多个业务对象来完成这项工作,基本上产生了非常短且连贯的方法(很好!)。这也是OOP原则的一个很好的例子,这次是控制反转(也称为IoC),因为服务层实现中的一个良好实践是将所有业务对象注入其中,而不是在构造函数中创建它们


希望这能回答您的问题。

谢谢您分享您的经验。这清楚地说明了很多事情。您能解释一下“服务层it本身非常薄”是什么意思吗。一般来说,人们说业务逻辑在服务层,而一些ppl说在域对象中。我感到困惑:(好的,域对象是业务对象的同义词。我所说的“瘦”是指大部分工作由业务/域对象完成,服务层使用这些对象来实现服务。因此,服务层只是将业务对象的功能“缝合”在一起。我明白了。非常感谢。