【问题标题】:Entity Framework n-Tier实体框架 n 层
【发布时间】:2012-02-02 20:38:04
【问题描述】:

我正在使用实体框架来与一些 WCF 服务和我构建的一些 MVC3 网站进行交互。我使用的是数据库优先方法。

我创建的是一个包含数据、模型和 CRUD 文件夹的库。数据包含 edmx 文件和用于创建 ToDTO() 方法的我的实体的部分类。模型包含我可以作为对象传递的每个实体的类。 CRUD 包含预期的内容 - 常见的读取、更新和删除方法。

我的实体以“StudentEntity”的方式命名,而我的 DTO 有一个更简单的名称,例如“Student”。所以 StudentEntity 类有一个 ToDTO 方法,它返回一个 Student 对象。

我的 CRUD 文件夹有一个名为 Student 的类,其中包含学生实体的 CRUD 操作。

当我让另一个开发人员查看代码时,似乎出现了困惑,他们对正在查看的学生、实体、DTO 或 CRUD 类感到困惑。

我应该如何更改我的命名方案以使其更易于理解?你也能给我一些关于清理它的建议吗?也许我不需要 DTO 类,并且可以以某种方式使用扩展/反射来为每个 ToDTO 方法没有单独的类。

【问题讨论】:

  • 混淆源于这样一个事实,即您有 2 个或更多类代表相同的数据,因此几乎但不完全相同。我会说你必须吞下这个成本来保持一个 n 层架构。不过,我肯定会将 CRUD 类重命名为 StudentRepository 或至少 Students
  • 对于您的 CRUD 类,您可以使用 StudentDAC 的名称作为学生数据访问组件吗?

标签: entity-framework c#-4.0 dto


【解决方案1】:

如果我必须保持相同的架构,我会使用以下命名约定:

// Namespaces & folders
// /DTO   (Data Transfer Objects classes only)  
// /Model (edmx files and utility classes)  
// /Data  (Repositories)
// /Services (Specialized repositories and business logic classes)

// Naming conventions
StudentDTO // (Data Transfer Object)
Student    // (the entity itself)
StudentRepository // (very common and conventional name)
StudentService    // (common and conventional name)

我的 2 美分, 真挚地, 最大

【讨论】:

  • 我还会在处理所有逻辑/crud/validation 的业务对象库中添加StudentBO。使用它将StudentDTO 链接到Student 实体并从这里调用存储库类。
  • 我称之为Service,例如StudentService 处理业务逻辑。
  • 您似乎正朝着我正在寻找的正确方向前进。我明白您说要放入 DTO 中的内容,您是否建议 StudentSERvice 包含学生的所有 CRUD 操作?而 Model 是 edmx 和所有实体的部分类?然后,存储库就是我感到困惑的地方。那是什么东西?
  • Repository 仅适用于 CRUDService 将强制执行业务逻辑并操作DTOsModels(更可能是DTOs)、验证等......典型的Service 方法将DTO 作为参数并返回结果计算的例如double StudentService.GetFinalMark(StudentDTO student)。这样,它可以很容易地进行单元测试。
  • 进入该维度时,值得查看Dependency Injection 框架如StructureMapUnit Testing 框架如NUnit 并继续阅读Repository PatternDecorator Pattern。这是软件架构和 imo 的一大进步,值得付出努力。您不一定需要应用这些模式,但了解它们并对其进行辩论是其中之一很高兴拥有
猜你喜欢
  • 2012-12-17
  • 2011-10-09
  • 2012-03-04
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2023-03-27
  • 2013-10-12
相关资源
最近更新 更多