耦合松散,内聚力高
可维护的应用

这是我不断听到的呐喊声。关于如何松散耦合组件,有很多建议。

  • 基于接口并注入所有依赖项
  • 使用事件
  • 使用服务总线

  • 但是,我觉得我从未真正听到过任何有关提高凝聚力的具体建议。有没有人提供?

    您可以在那里开始回答,但是我想就具体情况想向您提出建议。

    我有一个松散耦合的C#Windows Forms MVP应用程序,该应用程序的许多组件基于接口,通过构造函数注入它们,并使用Inversion of Control容器(Castle Windsor)将它们组装在一起。

    我会说它的架构非常好-它已经经历了几项重大变更请求,并且非常容易处理。我总体上对它很满意,但是我不能放任它没有特别的凝聚力。作为唯一的开发人员,这对我来说不是问题,但我担心对于初次进入该应用程序的人来说,这可能会造成很大的混乱。

    让我举一个例子-A公司使用该应用程序为产品填充和处理运出卡车。这意味着存在一个 OutgoingTransactionInfo 对象,一个 OutgoingTransactionInfoControl (用于实际输入所说信息), OutgoingTransactionValidator OutgoingTransactionPersister 。随着该应用程序投入生产,我们也收到了处理传入交易的请求-这些交易获得了不同的信息,不同的验证以及不同的持久化方式。然后,公司B也想使用该应用程序进行事务处理,想法很相似,但是信息,验证,持久性和其他一些组件可能有所不同。

    因为我的应用程序具有良好的测试套件并且很松散,所以我能够很轻松地满足这些要求。但是,我认识到将它意外地配置为无效状态太容易了。例如,您可以在使用 IncomingTransactionValidator 进行验证的同时,将其连接为使用 OutgoingTransactionInfo 对象。如果差异很细微,该错误甚至可能会在一段时间内未被发现。

    您对我有什么建议吗?您使用了哪些技术来减轻此类风险?

    最佳答案

    内聚意味着您不会将无关的内容放到模块(类,...)中。从您的描述来看,您似乎做得很好。适当的测试(您似乎也应该这样做)应该控制风险。

    您可能会使用类型系统(泛型/模板)来确保信息及其验证程序适合在一起,并可能保存一些代码/使其更加统一(不过,确保增加的复杂性值得)。

    否则,请保持良好的工作状态。

    10-01 22:49