我刚刚开始将我的代码重构为多个程序集,并且对于在何处以及如何命名它们时感到有点迷失。到目前为止,我已经将所有常见类放在一个库中,但现在是时候推进了。
这样一些例子/问题让我开始:
两个类,IMessageBus和MessageBus,它是通用的EventAggregator,允许订阅和发布任何类型的消息。可以用于任何项目。在哪里放这些课程?如何命名库,以及该库中还有什么?
普通.net类型的扩展方法模块怎么样,你会把所有这些放在一个库中吗?
也许我迷失了将某些东西带入图书馆的理由,我基本上只是在思考“重用”。因此,如果可以注意到一些更智能的简要规则,将会有所帮助。
编辑:
是的,我的理由有点模糊,这就是我寻求建议的原因。当然,一个公共库满足重用,因此应该有其他理由。我正在制作一些使用相同公共库的应用程序。一个应用程序将分发给外部用户,因此我必须强制他们在发现错误时进行更新。出于这个原因,我想有时我可能无法知道一个错误是否会影响该程序,因为我不记得究竟是哪个部分使用了公共库。因此,如果我有许多较小的库,则可能更容易识别哪些程序受到影响,以避免推送不必要的更新。 (?)顺便说一下,我不是为客户编程,所以我自己管理所有发行版。
答案 0 :(得分:1)
只在需要时分开。
与命名类型,变量,文件等一样:如果您不知道如何调用它,请不要创建它。这是一个不知道它是什么以及它的目的是什么的标志。
拆分的原因有:使用“内部”
单独进行版本控制,单独部署和隐藏类型答案 1 :(得分:0)
尝试按类似目的对它们进行分组。例如,您可以将所有消息传递内容放在一个名为YourCompany.Messaging
的dll中。
答案 2 :(得分:0)
如果您沿着这条路走下去,请把东西放到相关组件的库中。但是要小心分裂事物只是为了分裂事物。你没有提到为什么“是时候推进这个了”。你在寻求什么具体的收获?公共图书馆是否“太大了”?您是否希望向外部组织公开而不给予整个堆栈?由于需要修补的应用程序数量,部署是否会出现问题?
以相关的方式对事物进行分组是一个很好的通用经验法则,但是如果不知道分裂的原因,这就是你要获得的所有内容。 :)
扩展新信息: 出于这个原因,我想有时候我可能无法知道bug是否会影响该程序,因为我不记得究竟是哪个部分使用了公共库。因此,如果我有许多较小的库,可能更容易识别哪些程序受到影响,以避免推送不必要的更新。
物理隔离可能不会对上述情况有所帮助。在我看来,如果“找到哪个部分”是引起关注的真正原因,那么在您的库中,您违反了单一责任原则(SRP),您可能也没有编写接口或使用单元测试。
在组件中使用命名空间可以为组织提供尽可能多的分离。在我看来,将内容分解为类库的原因主要是分享,修补和隐藏您不希望任何其他人触摸的内容(通过内部)。当然,如果程序A中存在一些代码但不存在B,那么分离就很容易了。
答案 3 :(得分:0)
我通常会尝试尽可能减少装配数量,但拆分装配有几个重要原因。
当我编写客户端/服务器解决方案时,我通常会有3个程序集,一个用于客户端,一个用于服务器,第三个项目表示在两者之间共享的对象。客户端和服务器都将引用共享项目,但不会相互引用。
我拆分程序集的另一个原因是允许其他用户扩展我的工作。在这种情况下,我将拥有包含代码内容的主项目,以及第二个项目,该项目公开第三方用于为主应用程序编写“插件”的接口和基类。这允许第三方仅引用接口程序集而无需访问主程序集。