ric*_*rdo 2 inversion-of-control onion-architecture
杰弗里巴勒莫开创了洋葱建筑,我找到了一个很好的方法.
http://www.headspring.com/jeffrey/onion-architecture-part-4-after-four-years/
然而他的声明"内层定义接口.外层实现接口"似乎与IoC相矛盾,如果我的理解是正确的,它表明Consumer定义接口和提供者实现它,即控制在于消费者而不是提供者.
这个原则对我来说很有意义,因为,想象一下你正在编写一个用户界面,这个原则意味着你可以继续创建你的用户界面,而不需要知道你要调用的服务,因为你负责定义暴露所有的界面.您需要的功能.
所以为此,Jeffreys的声明似乎是一个矛盾,让我困惑于放置契约(接口定义)的位置,因为它似乎暗示:Domain Layer MyEntity IMyService Service MyEntityService:IMyService
由于Domain下没有图层,我在哪里放置IMyEntity.这也意味着我不能创建一个Presentation项目,直到Domain存在并定义了IMyService.
我个人注意到,我在哪里放置IMyEntityRepository和MyEntityRepository?由于服务依赖于IMyEntityRepository,而MyEntityRepository依赖于IMyEntity
那么,从哪里开始呢?:-)
让我们从IOC的真正角色开始.根据维基百科,
Inversion Of Control是一种编程技术,其中对象耦合在运行时由汇编程序对象绑定,并且通常在编译时是未知的.
在您的情况下,您的UI将操纵服务接口,而不知道将在运行时绑定的服务实现.定义这些服务接口并不取决于消费者; 它们将在您的Onion架构的应用程序核心中定义,但我们稍后会看到.
"内层定义接口.外层实现接口",这就是洋葱架构的设计方式,但不要忘记最外层是IOC!由IOC在运行时将接口与正确的实现绑定在一起!
你是对的,如果没有至少一个可用于你将操作的接口的实现,你的UI将无法工作.但在这种情况下,如果出于任何原因需要首先构建UI,请考虑使用模拟框架!
您的上一个问题是您需要放置IMyEntityRepository和MyEntityRepository类的位置.嗯,这是最简单的部分;-) IMyEntityRepository肯定需要放在你的应用程序核心中.您的所有实体,服务接口,存储库接口和任何接口都需要位于同一位置.MyEntityRepository实现应该放在基础架构层的某个位置,因为他的角色主要是处理从数据库中获取数据.
希望有所帮助!
归档时间: |
|
查看次数: |
1345 次 |
最近记录: |