在哪里放置解决方案的公共接口以增加解耦

本文关键字:接口 增加 解耦 解决方案 在哪里 | 更新日期: 2023-09-27 18:17:15

我有一个解决方案,有一个mvc web前端。我有一个单独的程序集用于视图模型。我有一个包含所有域对象、业务功能和业务验证的Services程序集。我的服务还为我的网站提供了所有视图模型。因此网站知道服务和模型组件。服务只知道模型组装,而模型组装两者都不知道。

所以我有一个需要Service验证和处理Cart模型的案例。购物车中的项目实现了一个接口,我希望在Service程序集中定义该接口。我的问题是,为了让我的购物车模型使用这个接口,它需要了解服务组装。如果我在我的Models程序集中定义接口,我现在已经以一种我不想要的方式将这两个程序集耦合在一起了。

所以我决定我可以通过添加另一个包含接口的程序集来解耦它们,每个程序集都引用它。所以,现在它们都与这个组装紧密耦合,但是它们彼此之间不是直接耦合的。

这个"接口"组装是一个可行的解决方案,还是我应该做不同的事情?

在哪里放置解决方案的公共接口以增加解耦

您可以将Cart的接口放在Model程序集中(Service程序集中也可以看到它),或者您可以将它放在第四个"仅接口"程序集中。如果您选择后者,您可能需要考虑让MVC项目和服务项目只引用新的程序集,因为这样可以减少与模型程序集中的模型实现的耦合。

编辑:我应该提到,删除对模型程序集的依赖并仅引用仅接口的程序集将需要使用IoC容器或类似的东西来加载具体实现(在模型程序集中定义)

这是一个完全可行的解决方案。从本质上讲,我将有一个Cart程序集来定义接口,甚至可能提供一个默认的、具体的实现,以及任何其他与cart相关的诡计。

您的服务和其他程序集都引用Cart程序集,正如您已经使用ICart接口所做的那样。这是很好的解耦。