Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DTO、要返回的数据层和类型_C#_Design Patterns_Data Access Layer_Dto - Fatal编程技术网

C# DTO、要返回的数据层和类型

C# DTO、要返回的数据层和类型,c#,design-patterns,data-access-layer,dto,C#,Design Patterns,Data Access Layer,Dto,在我的工作中,我们使用实体框架进行数据访问。我正在创建一个数据访问层、一个业务访问层和一些不同类型的项目来访问BLL(用于客户端应用程序接口的webAPI、多个MVC网站和一些不同的桌面WinForm应用程序) 我将DTO添加到一个名为“DTO”的单独项目中。此解决方案中此项目的目标是拥有一个DLL,其中包含将来回传递的类和接口的所有定义。这样,这一个项目可以在其他解决方案中创建为git子模块,并为所有UI项目进行更新以供共同使用。我不会在所有的UI上工作,因为我们将更多的开发人员引入到项目中,

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

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

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

如果我们曾经想用其他东西替换DAL,只要它遵循DTO项目中定义的接口,我们就可以了。我还认为这会使测试更容易,因为我可以用一个项目来代替DAL,用Seed.net之类的东西来生成DTO。顺便说一句,鉴于我们的环境,更换新设备是切实可行的


增加这一层的复杂性是不好的还是违背了设计标准?我缺少什么吗?

这就是我的工作方式,我在云世界工作了几年,似乎每个人都是这样工作的。 通常,您有以下项目(每个生成到单个程序集)

这样做的好处是,如果您添加了依赖项反转(IoC),那么您可以创建一个模拟Repo,以便通过将服务(业务逻辑)层注入NUnit单元测试来隔离和测试服务层等等


业内人士(包括我)经常使用AutoMapper将模型转换为DTO,再转换为实体和实体。

虽然这是一个自以为是的问题,但您所描述的在此类场景中非常常见。DAL接收和返回DTO而不是实体是很常见的,考虑到其好处,我不会将其视为增加了复杂性。这不是违反标准,而是完全相反:它是标准,被称为分层设计架构。我不知道你所说的DTO接口是什么意思。如果你指的是c#interface,那么让dt实现一个接口就很奇怪了。如果你指的是公共接口,那就好了。
- 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.