映射违反DRY原则?如何在ASP.NET MVC应用程序

时间:2017-04-10 16:04:07

标签: asp.net-mvc entity-framework

我是新的ASP.NET MVC项目的唯一开发人员,因此我与同行讨论设计的能力有限。我希望确保将来对我的应用程序的任何更改仅限于要更改的图层,以便整个应用程序不必立即更改。

我计划拥有3层,每层都有自己的项目,包括数据层,服务/业务层和表示层。

我的数据层将使用Entity Framework和通用存储库。该层将从repo方法返回实体类型。

我的服务/业务层将很薄,但我希望在未来的业务逻辑上有一个不错的独立位置。一开始,它只不过是我的应用程序的每个主要区域的服务类。即EmployeeService提供与调用数据层的Employees相关的CRUD方法。在某些时候,我可以用Web API服务层替换它并为许多客户端提供服务。

我的表示层将是ASP.NET MVC,具有ViewModels和强类型视图。在路上,可能还有其他客户。

我最感兴趣的是层与项目结构之间的沟通。我最初的想法是使用AutoMapper将数据层实体映射到服务层Business Objs / Domain Objs或DTO,然后再次映射到演示文稿中的ViewModels。虽然开头的映射大多是1:1,但感觉多余。

让DTO与实体类相同是否违反DRY?这是我知道如何从数据库结构中解耦的唯一方法。理想情况下,如果我更改数据库,我只想更改实体和映射。也就是说,我完全重新安排了我存储的东西,并且我拥有所有新的实体类/关系...我想将新的数据实现映射回相同的DTO和更高层永远不会知道。

从服务层到表示层的映射时会出现同样的重复感。我的DTO将映射到ViewModels。它主要是相同的东西,但我的想法是ViewModels还包含UI实现细节,如排序字段和UI特定类型,如SelectListItem。

这实际上是重复还是感觉重复?是否有另一种方法可以实现隔离层中变化的目标?我希望能够相对轻松地更改或替换演示文稿,服务或数据层。

1 个答案:

答案 0 :(得分:0)

我建议找一个可靠的(和SOLID)开源MVC项目并遵循该模式。无需重新发明轮子 - .NET MVC非常强大,并且有许多项目遵循SOLID原则。

看看NopCommerce,你可以获得源代码,你会看到一个设计良好的应用程序可以解答你的许多问题