首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基础设施服务合同应该放在哪里?

基础设施服务合同应该放在哪里?
EN

Stack Overflow用户
提问于 2011-09-30 16:56:17
回答 2查看 1.2K关注 0票数 2

我有UI,应用程序,域和基础设施层。

在我的基础架构层中,参考域层和应用层来注册两者的服务接口。

但是我需要在我的应用层中有一个基础架构层的服务,然后我需要在我的应用层中引用基础架构层。

问题是基础结构层引用了应用层,当我在应用层中引用基础结构层时,显示了以下错误:

不能添加对“基础设施”的引用。将此项目作为引用添加将导致循环依赖。

我怎么解决的?将应用程序层的Ninject配置放在应用层中?我认为这是不正确的,因为我将在我的应用程序层中有基础设施实现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-30 17:23:41

基础设施服务契约应该在消耗它们的层(域和应用程序)中定义,但在基础结构中实现。看看依赖反演原理洋葱建筑。基础设施层应该依赖于应用程序和域。您的领域和应用程序不应该依赖于基础设施。它们应该依赖于用自己的术语定义的抽象。您可能会发现这个回答很有趣。这个抽象的实际实现应该在应用程序启动时注入到所谓的成分根中。

例如,在您的应用程序中,您可以定义和接口如下:

代码语言:javascript
运行
复制
ICanNotifyUserOfSuccessfullRegistration

基础设施层将引用应用程序,并使用SMTP或SMS类实现此接口:

代码语言:javascript
运行
复制
class SmsNotificator : ICanNotifyUserOfSuccessfullRegistration { ... }

稍后,这个实现将由DI容器注入应用程序。应用程序将不依赖于基础设施,但仍将使用它,因此Dependecny反转。我建议您阅读.NET中的依赖注入,即使您使用Java或其他堆栈。

票数 3
EN

Stack Overflow用户

发布于 2011-09-30 17:17:46

听起来你的层要么是太紧密耦合,要么是有错误的边界。您可以通过引入存在于自己项目中并可被其他层引用的接口来将层解耦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7613610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档