何时将代码分成新的程序集(DLL)

时间:2011-10-29 14:21:00

标签: .net design-patterns c#-4.0 architecture anti-patterns

我作为团队的一员工作,创建一个企业应用程序,该应用程序将用于新的C#.NET Windows应用程序和Web应用程序。其他开发人员喜欢将事情分开到单独的项目中,而不是我。他的答案总是“分开关注”,我不确定我同意。

我的理论是,当代码能够被其他消费者共享时,您可以创建单独的程序集。关注点的分离应该由命名空间处理。从版本控制,混淆等方面分发具有大量程序集的应用程序可能是额外的努力/挑战/噩梦。所以它关注我并且我试图找出当代码被破坏时经验法则是什么进入自己的集会。

将代码分离到其他程序集与在应用程序中使用名称空间和其他组织技术的经验法则是什么?是否有关于这个或模式/实践的指导,我可以读到“是的,他是对的”或“请读这个”。

谢谢。

3 个答案:

答案 0 :(得分:4)

我认为你有沟通问题,或者是术语问题,因为关注点的分离通常意味着不同的东西。

严格地说,关注点分离,处理单一责任原则之类的事情,因此,每个类都处理它自己的领域。单一责任原则规定,一个班级应该只有一个改变的理由。

关注点分离的一些示例是视图和模型抽象模式,例如MVC或MVVM。每个组件,无论是视图还是模型,都处理用户界面抽象或数据和验证,但不能同时处理两者。

当代码可以在多个项目之间共享时(如您自己已经指出的那样),将代码拆分为单独的程序集是一种很好的做法。简单地构造代码可以通过使用不同的命名空间来完成。

当您拥有大量代码时,程序集是一种自然的方式来对代码进行分组,当您在不同级别上管理代码并具有非常可控的可扩展点并希望将其锁定时,程序集提供了这种级别的隔离。

答案 1 :(得分:3)

部分原因是Shark已经提供了推理(版本控制,并重新编译/替换较大应用程序使用的选择程序集)。但是,当我这样做时,我倾向于创建程序集,形成一个独立有用且完整的代码单元。

例如,我可能正在创建一个解析单元来解析HTML(傻瓜的差事,我知道......这是一个例子!),以便在更大的应用程序中使用。如果HTMLParsingUnit的功能相对完整(换句话说,不是特定于较大的应用程序)那么我可能会在自己的程序集中创建它,以供其他代码重用,并封装版本控制/更改。

同样,我曾经不得不创建一个映射并提供从ASNI SQL到.NET CLR类型的DataTypes类。我为此创建了一个独立的DLL,因为我认为它可能会在其他项目中派上用场。显然,这样做意味着可以简化抽象组件的组件,但这使得维护变得更容易。最终,我DID在几个不同的项目中重复使用这个程序集。

只是我的两分钱。 。 。

答案 2 :(得分:1)

我的经验法则是始终首先将代码放在不同的代码库中,如果该DLL可以被其他应用程序使用。

但另一个考虑因素是版本控制。如果一组代码经常被改进/缩放,对我来说,将它作为一个单独的DLL更容易,因此项目中的其他DLL / exe对变化完全无知,除非调用也被更改。

我认为这是将代码分成不同DLL的两个主要原因。