我很难理解开放封闭原则背后的想法。
据我所知,该原理说每个类都应关闭以进行修改,并应打开以进行扩展。对吧?
因此,这意味着我们必须将类中的每个方法都设为虚拟,以便我们可以扩展类而无需对其进行修改。这是正确的吗?
答案 0 :(得分:0)
我认为您在某种程度上误解了开放式封闭原则。
开放-封闭原则指出,应关闭软件实体以进行修改并可以扩展。在这种情况下,软件实体是指类,结构方法等。
基本思想是您的实体不需要经常更改需求。如果出现新的要求,则应扩展您的实体以适应新功能。
假设我们具有以下功能:
public List<Product> GetProducts(Criteria criteria)
{
return context.Where(x => x.criteria1 = criteria.criteria1)
.Where(x => x.criteria2 = criteria.criteria2)
.Where(x => x.criteria3 = criteria.criteria3)
.Where(x => x.criteria4 = criteria.criteria4);
}
很容易看出,当另一个标准要求出现时,这将需要修改“ ProductRepository”类及其功能。当然,该类中的许多其他功能可能也需要修改,因为它也可能使用标准对象。
假设我们可以这样写:
private List<Product> GetProducts(Criteria criteria)
{
return cleverContext.Apply(criteria);
}
如果仅修改或扩展负责标准的代码,我们将立即获得灵活性。
改进设计以满足开放式封闭原则的最大途径是使用丰富的域。当您的域为企业业务规则建模时,规则将永远不会更改。我们将Domain和Use-Cases分开以处理应用程序规则。
bob叔叔在其干净的体系结构中对此作了更多介绍。
让我知道是否有什么可以阐明的,或者尝试进一步解释:)