SOLID原则和编译?

Roy*_*mir 17 .net c# design-patterns compilation solid-principles

例如,关于Single Responsibility原则:

我们来谈谈一Radio堂课:

在此输入图像描述

有人可能会说,Radio班级有两个职责,即音量和电台管理.这些操作将使用它从客户端的完全不同的区域调用.

因此我们有这个:

在此输入图像描述

一切都很好.

但我总是看到这样的句子:

所以现在,当我们需要改变,这取决于损坏的元件上的所有代码并不甚至需要重新编译.

等一下 !

如果我需要更改VolumeManager 类 - 我将不必重新编译RadioStationManager. 但是我必须停止(在web中)iis以便应用程序使用新的DLL,它将导致应用程序关闭.

此外,在console,我将不得不终止整个程序,以便更改dll,因为它被进程锁定(你不能在应用程序运行时更改DLL - 文件被锁定)

即使我将使用GAC - 我将不得不停止该程序,以便使用dll.

那么它能拯救我什么?编译就是 - 右键单击​​并构建.就这样

我没有看到提到的好处:" 你只需要编译破碎的类...... "

我错过了什么?

http://www.gontu.org/solid-single-responsibility-principle/寻找单词" build"

http://epic.tesio.it/doc/manual/solid_principles.html寻找单词" recompiled"

http://www.dananhudson.com/?tag=solid寻找单词" recompile"

小智 11

忘记编译时间,忘记重启应用程序.

SOLID是关于干净的代码和可维护性.它不是关于运行时的任何事情,而是关于代码随着时间的推移而变得越来越复杂并且难以维护,而这正是实际成本所在.


jal*_*alf 7

如果您可以证明更改的范围有限,则有些情况下,在政治上更容易将更新部署到现有应用程序:例如,如果只需要更新一个DLL.(请注意,这并不意味着每个类都应该在自己的DLL中.但很可能,并非所有类都在同一个DLL中)

但是,另一个优点更具概念性:如果我不必重新编译DLL,那么我肯定知道我没有破坏其中的任何内容.必须触及的代码越少,我引入错误的可能性就越小.

  • @TomTom:我在哪里说每个课应该进入一个单独的dll?那是你的解释.我只是说,如果你只需要更新一个DLL,那么你有一个非常具体的方法来查看你的更改的范围(在DLL之外没有任何东西被重新编译,因此它们都没有改变,也没有一个可以破坏) .我完全不知道您对单元测试和影响分析的看法是什么,或者为什么你暗示我也不使用它们. (2认同)
  • 但是既然你提出了单元测试,这里有一些新闻:测试永远不会显示没有错误.只有它的存在.您可以在余生中编写单元测试,并且不会证明您的代码更改没有破坏任何内容.但是如果你根本不触摸代码,如果客户可以继续使用他们在之前版本中使用的相同的DLL,那么他们就证明没有引入新的错误.无论你是否这样做,一些客户都会关心这一点.处理它. (2认同)