EntityFramework和IoC接口在哪里属于洋葱架构?

 手机用户2602880641 发布于 2023-01-20 14:57

我最近发现了杰弗里·巴勒莫的洋葱建筑模式,并决定出于好奇而将它用于当前的项目.之后我不得不用另一个(Ninject)替换我的IoC框架(Unity),因为它使我的项目完全无法使用它,我注意到我做出了正确的决定,因为我只需要更改我的一些部分应用程序,它仍然像一个魅力.

但是,我还没有弄清楚在这种模式下某些与Entity Framework和IoC相关的接口属于哪个界面.假设我有一个用于数据库上下文的接口:

public interface IDatabaseContext : IDisposable {

   IDbSet Set() where T: class;

}

这现在是域接口吗?还是基础设施界面?需要IDbSet <>'1类型的接口成员将接口与Entity Framework紧密耦合,但我需要一种方法将数据库上下文的瞬态实例注入存储库.IoC甚至适合洋葱建筑吗?您如何看待这种结构:

MyProject.Domain
    - Entities
        - MyEntity.cs
MyProject.Domain.Interfaces
    - IDatabaseContext.cs       // that doesn't fit here, right?
    - IMyEntityRepository.cs
MyProject.Infrastructure
    - Repositories
        - MyEntityRepository.cs
        - DatabaseContext.cs
    - Migrations
        ...
MyProject.Web
    - ... // web stuff
    - NancyBootstrapper.cs
MyProject.Application
    - Services
        - ISnmpClientService.cs
        - SnmpClientService.cs
MyProject.Server
    - KernelHelper.cs 
    - IKernelResolver.cs

Mark Seemann.. 5

依赖注入(DI)非常适合洋葱架构; 如果你正确地应用DI,那就是你应该结束的地方.

接口应由使用接口的客户端定义和拥有.正如敏捷原则,模式和实践所解释的那样,"客户[...]拥有抽象接口"(第11章).因此,任何定义以数据为中心的接口的尝试IDatabaseContext迟早都会引起问题,因为它违反了各种SOLID原则,如依赖性倒置原则或接口隔离原则.

相反,您的客户端代码应该定义他们需要的接口.然后,您始终可以使用Entity Framework 实现这些接口.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有