DTO、数据层和类型 return

DTO, Data Layer and types to return

在我的工作中,我们使用 Entity Framework 进行数据访问。我正在创建一个数据访问层、一个业务访问层和一些不同类型的项目来访问 BLL(用于客户端应用程序交互的 webAPI、多个 MVC 网站和一些不同的桌面 WinForm 应用程序)。

我将 DTO 添加到名为 "DTO" 的单独项目中。此解决方案中此项目的目标是拥有一个 DLL,其中包含 类 的所有定义和将来回传递的接口。这样一来,这个项目可以创建为其他解决方案中的 git 子模块,并更新以供所有 UI 项目共同使用。我不会在所有 UI 上工作,因为我们将更多的开发人员带入该项目,并且我们可能需要多个 VS 解决方案。

我的想法是让数据访问层回传并接收 DTO 而不是实体对象。这将完全解耦该过程。

如果我们想用其他东西替换 DAL,只要它遵循 DTO 项目中定义的接口,我们应该没问题。我还认为这会使测试更容易,因为我可以用一个项目替换 DAL,以生成带有 Seed.net 之类的 DTO。顺便说一句,考虑到我们的环境,更换是一种真正的可能性。

增加这一复杂层是不好的还是违反设计标准的?有什么我想念的吗?

这就是我的工作方式,在 Cloud 世界工作了几年,这似乎是每个人的工作方式。 通常你有以下项目(每个构建到一个单独的程序集)

- REST controllers
- Models 
    that are used to pass information between Controller layer and Business Logic
- Business Logic Interfaces  (like ImyService)
- Business Logic  (like myService)
- DTOs
- IRepository (like ImyRepo)
- Repository (like myRepo)
     --> this is the same as DAL. 

这样做的好处是,如果您添加依赖倒置 (IoC),那么您可以创建一个模拟 Repo,以便隔离和测试服务(业务逻辑)层等,方法是将其注入 NUnit单元测试。

业内人士(包括我)经常使用 AutoMapper 将模型转换为 DTO 到实体,反之亦然。