首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >固体OCP违规后果

固体OCP违规后果
EN

Stack Overflow用户
提问于 2018-03-10 16:11:51
回答 1查看 420关注 0票数 0

清理乞丐上的东西:

  • 我了解如何将OCP应用于下面的代码(虚拟类、DI等等,关于这一点,web上有大量的资源)
  • 我知道(但不明白)为什么我需要应用OCP (主要发生在网络上的3种)
  • 我想我错过了重点,因为我没有足够的商业经验。

我在OCP中不理解的是所有关于OCP的文章中的论点/后果(见下文)

违反OCP是不好的,因为:

1.您需要为旧类编写测试--这很糟糕,最好为新类编写测试.

我不明白为什么是坏的?

在这两种情况下,我都需要编写新的测试。不管是新的还是旧的。

2.如果有两个客户机:A(不需要新功能)和B(谁想要新功能),则需要重新部署应用程序

2.1当我通过修改基类违反OCP时。

客户端A-不需要重新部署-因为他不需要新的功能

客户端B-需要重新部署-以获得新功能

2.2当我没有通过添加派生类违反OCP时。

客户端A-不需要重新部署-因为他不需要新的功能

客户端B-需要重新部署-以获得新功能

我不明白为什么我需要重新部署整个应用程序?在这两种情况下都是相同的情况--客户机A不需要重新部署,客户端B需要重新部署应用程序。

3.您可以向工作系统引入一个错误,但当我将新功能放入其中时,我也可以这样做,不是吗?

你能帮我理解以上几点的含义吗?我正在使用网站中的以下示例

代码语言:javascript
复制
public enum InvoiceType
{
    Final,Proposed
};

public class Invoice
{
    public InvoiceType InvoiceType { get; set; }

    public double GetDiscount(double amount,InvoiceType invoiceType)
    {
        double finalAmount = 0;
        if (invoiceType == InvoiceType.Final)
        {
            finalAmount = amount - 100;
        }
        else if(invoiceType == InvoiceType.Proposed)
        {
            finalAmount = amount - 50;
        }
        return finalAmount;
    }

}
EN

回答 1

Stack Overflow用户

发布于 2018-03-11 11:15:57

让我试着给你一些洞察力,但是我不打算讨论你提到的所有问题。

首先也是最重要的。测试。典型的企业级应用程序包含10000~20000个单元测试,不考虑数据随机化(如果有的话,很少会出现这种情况:OO程序员还没有发现像Haskell的QuickCheck这样的工具)。这些测试通常都是进入地狱的入口。数百个模拟连接在一个给定的序列,复杂的依赖注入只是为了“使它工作”和其他类型的设置与测试实现混合在很大程度上依赖于有用的方法。测试类或某种程度的class SuchKindOfTestsUtilities。在大多数情况下,要么没有时间频繁地清理测试,要么人们根本不在乎:为什么假设测试可能包含重复的代码,违反了众所周知的干净代码原则而没有任何后果.

现在假设您必须引入新功能。有时间压力。有几十个类和东西你不太熟悉。你可以像Neo一样选择:绿色(不喜欢蓝色)或红色,其中“绿色”代表“除非绝对必要,否则不要改变工作!”事实上,“冻结”现有的东西,特别是,特别是,是最好的方法,除非您的经理和企业愿意等待(并支付)长时间的重构(他们通常认为这是浪费时间的)。

而这只是冰山一角;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49211236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档