假设你正在编写一个类似Photoshop的应用程序,你有效果(过滤器)等,是否应该使用单独的项目将这些过滤器中的每一个作为单独的程序集?
主要思想是将每个过滤器作为节点,因此请将其视为:
sourceImage -> Sharpen -> Darken -> Contrast -> Blur ...
在我看来,拥有像:
这样的dll文件是有意义的[Filters folder]
Sharpen.dll
Darken.dll
Contrast.dll
Blur.dll
但是很难像那样管理它们,这会阻止我对班级成员使用internal
关键字,对吗?
所以现在我只有1个dll用于所有过滤器。
组织装配的最佳做法是什么?
答案 0 :(得分:7)
我不会限制自己每个组件使用一个过滤器。您可能希望对实现类似功能的程序集进行分组 - 例如颜色/对比度在一起,同时保持它们与非常不同类型的滤波器分开(例如边缘增强)。
只有一点轶事证据:由于太多许多程序集,我经常看到应用程序难以管理。我不记得曾经看到一个有问题的因为它没有足够分裂组件。我不是说它不会发生 - 只是我没有看到它。
答案 1 :(得分:6)
NDepend工具的作者Patrick Smacchia表示,装配数量保持较低。看here。这也意味着您使用NDepend来管理命名空间之间的依赖关系。 此外,如果您拥有更少的程序集并且部署更容易,则编译速度更快。
如果那就是你所追求的那样,那么DI(如StructureMap)解决方案可以为你提供可扩展性和可测试性。
答案 2 :(得分:5)
拥有单独程序集的原因:
避免单独装配的原因:
我认为这是经验所带来的。我自己的经验是,随着我作为.NET开发人员的成熟,除非有一个非常令人信服的理由,否则我不太愿意创建更多的程序集。
答案 3 :(得分:3)
我认为更好的方法是为该程序集中的类型设置一个包含Sharpen
,Darken
,Contrast
和Blur
命名空间的过滤器程序集。这完全取决于您需要每个功能模块的模块化程度。
答案 4 :(得分:0)
使用单独的程序集可以更轻松地添加更多而无需重新编译。特别是,如果您使用某种类型的DI解决方案(如MEF),您可以在运行时加载这些程序集并将它们注入您的程序。
但是,这将要求您的主程序公开适当的公共接口,以便其他程序集可以使用您的类型。内部修饰符变得更加棘手,因为您必须为要访问内部的每个程序集设置内部可见属性。