2015-11-03 87 views
0

我看到很多问题张贴在OC原则和一些有很好的回答,我仍然有一些怀疑这一点,下面是那些。开放封闭原则基本怀疑

1)让我们假设我的应用程序中有注册模块,目前它只支持一个国家,我得到更改请求,我必须现在支持另外3个国家(注册表格不会改变,它仍然是一样的),它只是我必须根据国家对用户进行分类。只有更改我的应用程序才能从UI获取国家/地区数据并将其保存在数据库中,是否必须在此处应用OCP。

2)OCP是否意味着我的方法(函数)中不应该有任何其他逻辑,我知道如果其他方法对对象创建不好,但如果我有一些业务逻辑要基于场景实现,我应该不如果其他情况下使用,如果更多的条件被添加,我必须修改代码。

回答

1

开放闭合原则适用于几乎所有的设计和你的。与你描述的场景(这些场景是有效的)唯一的区别在于,你已经把它带到了变更请求(点1)和编码实践(点2)。

开放封闭的原则然而是要在更高的层次上看到更多的设计层面。它也应该被看作是应该瞄准的最佳实践,并且应该尽量接近开放式封闭设计可能的(例如,系统的最大可能部分打开进行扩展,并且系统的最大可能部分关闭以进行修改)。让我看看这两种情况,并解释Open-Closed如何应用于它们 -

点1:3个新国家场景 -只有3个添加到UI字段的新值不保证设计更改。但是,如果您的代码中具有特定于国家/地区的业务逻辑,则此更改确实会影响设计。 在国家特定逻辑的情况下,您应该设计业务逻辑实现,以便您可以编写一个扩展基本处理程序的新服务类/国家/地区特定处理程序。该国家特定的服务调用可以被配置为基于所选择的实际国家来调用,或者可以基于在UI中选择的国家来实例化国家特定的处理器。然后这是对扩展打开。另一方面,基类服务/ BaseHandler保持不变,代码的执行顺序保持不变(或者顺序图保持不变)。您的应用程序的核心因此而关闭以进行修改。

这就是Open-Closed如何应用于这一点。

点2:如果其他 -无论如果,否则打破了打开关闭规则取决于其中它被应用。如果在服务方法内的其他内部细粒度业务逻辑是绝对没问题的。如果您正在使用它来选择从处理程序的工厂实例化哪个处理程序,那就更好了。

但是,如果你有一个单一的服务方法来处理所有的国家并且你正在做一个if-else来检查国家1是否保存在数据库中,如果国家2然后忽略等等,这并不好。一个“封闭修改”设计。

希望我能够向你解释这个概念。

我在博客上写了一篇关于开放封闭原则的文章,我已经详细解释了这个原理 - http://www.javabrahman.com/programming-principles/open-closed-principle-with-examples-in-java/。如果您仍然有任何疑问,您也可以查看它。