C# 所有对象都应该解耦吗

C# 所有对象都应该解耦吗,c#,dependency-injection,decoupling,C#,Dependency Injection,Decoupling,我有一个问题似乎在任何地方都找不到答案。这涉及到将代码与接口解耦。问题是——是否应该将其他对象(正在创建和使用)中的所有对象重构为一个接口,以遵循S.O.L.I.D.的依赖倒置原则。?在一个均匀驱动的方法中新建对象怎么样?例如,当我按下按钮时调用的方法。对象应该通过构造函数传入吗?当然,这些都适用于我的对象,而不是BCL,对吗?米利穆斯给出了一个很好的答案。它特别好,因为它是任何编程问题的正确答案:) 我只想详细说明一下。在处理类似情况时,以下条件适用: 脱钩是有代价的 没有一个代码是完美的,因

我有一个问题似乎在任何地方都找不到答案。这涉及到将代码与接口解耦。问题是——是否应该将其他对象(正在创建和使用)中的所有对象重构为一个接口,以遵循S.O.L.I.D.的依赖倒置原则。?在一个均匀驱动的方法中新建对象怎么样?例如,当我按下按钮时调用的方法。对象应该通过构造函数传入吗?当然,这些都适用于我的对象,而不是BCL,对吗?

米利穆斯给出了一个很好的答案。它特别好,因为它是任何编程问题的正确答案:)

我只想详细说明一下。在处理类似情况时,以下条件适用:

  • 脱钩是有代价的
  • 没有一个代码是完美的,因为你可能不会得到所有你想要的时间
  • 如果您的代码比可能的耦合程度更高,那么这并不是世界末日

  • 所以,不要用全有或全无的命题来看待它,而是把它当作分数来看待。你愿意忍受多少耦合?你愿意为脱钩支付多少?在某种程度上,设计时间和可维护性之间是平衡的——记住,你甚至不知道你的代码会如何改变

    你听说过《基于事件的编程:将事件发挥到极致》一书吗?这都是关于耦合的:


    作者声称不能消除所有耦合,但可以对其进行转换,耦合应该转移到更简单的类。也许你可以用它来指导你的工作。

    答案是“视情况而定”。问问你的住户“建筑师”。(这取决于项目的总体愿景。)“您愿意为解耦支付多少?在某种程度上,在设计时间和可维护性之间存在一种平衡——请记住,您甚至不知道您的代码将如何更改。”看起来,如果你从一开始就坚持将所有事情解耦的理念,那么你的项目就不会增加任何开销,因此你不需要花费额外的时间来解耦。我认为,如果你一开始就计划去耦合,那么这样做会更便宜,但成本可能仍然高于(部分)耦合设计。这取决于很多因素。还要记住,我只是承担了最初发布的成本;由于不知道长期维护会带来什么,我不能说某个特定的脱钩是否会“带来回报”。