清理乞丐上的东西:
我在OCP中不理解的是所有关于OCP的文章中的论点/后果(见下文)
违反OCP是不好的,因为:
1.您需要为旧类编写测试--这很糟糕,最好为新类编写测试.
我不明白为什么是坏的?
在这两种情况下,我都需要编写新的测试。不管是新的还是旧的。
2.如果有两个客户机:A(不需要新功能)和B(谁想要新功能),则需要重新部署应用程序
2.1当我通过修改基类违反OCP时。
客户端A-不需要重新部署-因为他不需要新的功能
客户端B-需要重新部署-以获得新功能
2.2当我没有通过添加派生类违反OCP时。
客户端A-不需要重新部署-因为他不需要新的功能
客户端B-需要重新部署-以获得新功能
我不明白为什么我需要重新部署整个应用程序?在这两种情况下都是相同的情况--客户机A不需要重新部署,客户端B需要重新部署应用程序。
3.您可以向工作系统引入一个错误,但当我将新功能放入其中时,我也可以这样做,不是吗?
你能帮我理解以上几点的含义吗?我正在使用网站中的以下示例
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;
}
}发布于 2018-03-11 11:15:57
让我试着给你一些洞察力,但是我不打算讨论你提到的所有问题。
首先也是最重要的。测试。典型的企业级应用程序包含10000~20000个单元测试,不考虑数据随机化(如果有的话,很少会出现这种情况:OO程序员还没有发现像Haskell的QuickCheck这样的工具)。这些测试通常都是进入地狱的入口。数百个模拟连接在一个给定的序列,复杂的依赖注入只是为了“使它工作”和其他类型的设置与测试实现混合在很大程度上依赖于有用的方法。测试类或某种程度的class SuchKindOfTestsUtilities。在大多数情况下,要么没有时间频繁地清理测试,要么人们根本不在乎:为什么假设测试可能包含重复的代码,违反了众所周知的干净代码原则而没有任何后果.
现在假设您必须引入新功能。有时间压力。有几十个类和东西你不太熟悉。你可以像Neo一样选择:绿色(不喜欢蓝色)或红色,其中“绿色”代表“除非绝对必要,否则不要改变工作!”事实上,“冻结”现有的东西,特别是,特别是,是最好的方法,除非您的经理和企业愿意等待(并支付)长时间的重构(他们通常认为这是浪费时间的)。
而这只是冰山一角;)
https://stackoverflow.com/questions/49211236
复制相似问题