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 到实体,反之亦然。
在我的工作中,我们使用 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 到实体,反之亦然。