java - 在 MVC 模式中将模型和操作划分为类的最佳方法是什么

标签 java model-view-controller model architecture entity

假设我有一个包含大量字段的类 Employee。我有很多与数据库相关的操作,比如 CRUD、过滤器等。

在 MVC 模式中,所有这些东西都可以放在一类模型部分中。但同样,如果我有很多字段和很多 Action 怎么办。如何正确地将基本对象人员(字段、基本方法:getter 和 setter、toString 等)和操作拆分为类。比如 EmployeeEmployeeActions?或者任何最好的方法?需要你的经验)

最佳答案

原则上,domain model ,例如模型层,例如“模型”,应该分为以下几个部分:

  • Entities ,例如域对象(如您的 Employee)和 value objects .每个实体不仅包含特定数据,而且最重要的是,还包含与其相关的所需行为(仅)。
  • Data mappers抽象(如 EmployeeMapperInterface)。它们的实现(如 EmployeeMapper)不应该是域层的一部分。数据映射器是负责在实体和数据库(或任何其他持久层)之间传输数据的对象。所以它们是唯一知道如何通过 API 与数据库通信的组件。例如。它们包含 SQL 语句/调用。此类语句不应以任何方式成为实体的一部分,因为多个应用程序可以使用相同的实体,并且并非所有应用程序都需要数据库访问权限,或者与其他应用程序具有相同的数据库访问权限。这些实体甚至根本不应该知道任何持久性。
  • 作为可选的抽象层:repository抽象(如 EmployeeRepositoryInterface,或 EmployeeCollectionInterface,或 EmployeesInterface)。它们的实现(如 EmployeeRepositoryEmployeeCollectionEmployees)也不应驻留在域层中,而应位于其边界之外。它们是具有从模型组件中隐藏持久性类型的作用的构造,并具有两个功能/特征:1)它们将实体从域模型传输到数据映射器,以更新数据库数据和 2)它们存储使用相应的数据映射器从数据库中“获取”的实体集合,使其可用于领域层。
  • 服务,作为 service layer 的一部分(如 AuthorizationService)。可以有应用程序服务,如果需要,还可以有域服务(由前者使用)。这些服务处理所有其他域层组件,以便正确响应用户需求。从用户的角度来看,它们是通往领域模型的唯一途径。
  • 外部服务的抽象(如 MailServiceInterface,或 PaymentServiceInterface,或 PrintingServiceInterface)。它们的实现(如 ExampleMailerPayPalPaymentPdfPrinter)位于域模型之外。

资源:

关于java - 在 MVC 模式中将模型和操作划分为类的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51729687/

相关文章:

php - CakePHP - 导航到页面时的空白页面

java - spring 表单标签具有默认值

spring - Spring MVC没有请求映射时如何处理异常?

java - 当socketChannel.read(BUFFER)将返回0时

c# - 在登录中验证 EMAIL-MVC

jquery - 验证最多 x 位大于零的小数值

model - SAPUI5 在 list 中展开模型

javascript - 从 Javascript 文件访问 MVC 的模型属性

java - 分割字符串保留一些分隔符但删除另一个

java - JSONObject 排序的 map 参数