我正在尝试组合一个非常精细的松散耦合设计。
但我无法决定如何处理常见定义。
现在我通过将其添加为外部 dll 来分离关注点。通过注入和接口,我的域可以在不知道实现的情况下使用我的业务逻辑。
我遇到的问题是,要使我的所有组件松散耦合,它们需要实现相同的接口。我的解决方案是一个单独的项目(dll),只有所有的定义。这开始很好,但似乎变得臃肿并将所有代码链接到这个 dll 依赖项上。
最务实的做法是什么?
谢谢!
我正在尝试组合一个非常精细的松散耦合设计。
但我无法决定如何处理常见定义。
现在我通过将其添加为外部 dll 来分离关注点。通过注入和接口,我的域可以在不知道实现的情况下使用我的业务逻辑。
我遇到的问题是,要使我的所有组件松散耦合,它们需要实现相同的接口。我的解决方案是一个单独的项目(dll),只有所有的定义。这开始很好,但似乎变得臃肿并将所有代码链接到这个 dll 依赖项上。
最务实的做法是什么?
谢谢!
编辑
对不起,我想我最初误解了你的问题。因此,您有一个包含您的接口的程序集,并且您在其他程序集中使用 DI 创建您的依赖对象。我倾向于在我的应用程序中创建一个核心程序集,它包含应用程序的主要行为(智能实体、枚举和接口)。这个程序集几乎不依赖于应用程序的其余部分,但对它的依赖很大。以这个项目为例 - whocanhelpme.codeplex.com。你可以称这个核心为臃肿,但根据定义,它需要非常丰富。
您可能会发现您的许多抽象单元都遵循常见的设计模式。这是一个对每一个都进行了很好描述的站点 - 您可以从中派生名称(Observer、Factory、Adapter 等):
我想说,该层应该只知道下一层及其接口,因此可以将接口与其实现一起放置,然后在链中的层(程序集)之间添加引用。
您可以使用引导程序模式配置 DI 并通过定位器进行解析。关于诸如日志记录、缓存等横切问题,应该有单独的程序集引用到每一层。在这里,您还可以使用合同,并且将来可能会用另一个实施相同合同的组件来替换这些横切功能。
希望这至少有一点帮助:)