【问题标题】:YAGNI vs Program to interfaces rather than concrete implementationsYAGNI 与程序到接口而不是具体实现
【发布时间】:2021-07-10 18:36:42
【问题描述】:

YAGNI(你不会需要它)规则说我们应该在代码中使用最少数量的元素来完成这项工作。

但是每当我创建一个类时,建议我们首先创建一个接口,然后按照“程序到接口而不是具体实现”的原则通过创建一个子类来扩展它,这样我就可以更好地适应未来的需求并且更松散地拥有耦合代码。

但根据 YAGNI,从一开始,我们就应该避免创建不必要的接口。

那么该关注哪个以及何时关注?

【问题讨论】:

    标签: oop design-patterns refactoring solid-principles ooad


    【解决方案1】:

    来自 Martin Fowler 的bliki

    Yagni 仅适用于软件内置功能以支持假定功能,它不适用于使软件更易于修改的努力。

    一般来说,抽象编程属于后一类。

    【讨论】:

    • 恕我直言,对文章中提到的“想象重构”问题的关注太少,尤其是谁需要这样做的问题。如果稍后添加一个功能需要更改由不同人维护的模块,这可能会有点烦人,但如果不需要该功能的应用程序在一个模块升级而另一个不升级的情况下继续工作,这可能是可以容忍的,但这会非常糟糕如果它要求必须以使它们与彼此的旧版本不兼容的方式更改两个模块。一个人应该努力工作......
    • ...为未来的变化做好充分的准备,以便尽可能避免后一种情况。允许仅通过更改由一个人控制的代码来添加功能比需要协调要好,但最重要的是允许以允许每个模块保持与旧版本兼容的方式进行更改其他。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    相关资源
    最近更新 更多