C# DTO、要返回的数据层和类型
在我的工作中,我们使用实体框架进行数据访问。我正在创建一个数据访问层、一个业务访问层和一些不同类型的项目来访问BLL(用于客户端应用程序接口的webAPI、多个MVC网站和一些不同的桌面WinForm应用程序) 我将DTO添加到一个名为“DTO”的单独项目中。此解决方案中此项目的目标是拥有一个DLL,其中包含将来回传递的类和接口的所有定义。这样,这一个项目可以在其他解决方案中创建为git子模块,并为所有UI项目进行更新以供共同使用。我不会在所有的UI上工作,因为我们将更多的开发人员引入到项目中,我们可能需要有多个VS解决方案 我的想法是让数据访问层传回并接收DTO,而不是实体对象。这将使过程完全解耦 如果我们曾经想用其他东西替换DAL,只要它遵循DTO项目中定义的接口,我们就可以了。我还认为这会使测试更容易,因为我可以用一个项目来代替DAL,用Seed.net之类的东西来生成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上工作,因为我们将更多的开发人员引入到项目中,
增加这一层的复杂性是不好的还是违背了设计标准?我缺少什么吗?这就是我的工作方式,我在云世界工作了几年,似乎每个人都是这样工作的。 通常,您有以下项目(每个生成到单个程序集) 这样做的好处是,如果您添加了依赖项反转(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.