当前位置: 首页 > 面试题库 >

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

冯霖
2023-03-14
问题内容

假设我有一堂课Employee,有很多领域。而且我有很多与db相关的动作,例如CRUD,filter等。

在MVC模式中,所有这些东西都可以放入一类Model部件中。但是同样,如果我有很多领域并且有很多行动该怎么办。如何将基本对象人员(字段,基本方法:getter和setter,toString等)和操作正确地划分为类。喜欢EmployeeEmployeeActions?或任何最佳方法?需要你的经验)


问题答案:

原则上,应该将域模型(例如模型层,例如“模型”)划分为以下组件:

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

资源:

  • 主题演讲:建筑失落的岁月 - 罗伯特·马丁(Robert Martin)提出的演示,并根据知识共享署名ShareAlike 3.0许可。
  • 罗伯特·马丁的清洁建筑
  • Sandro Mancuso:交互驱动设计简介
  • 坚不可摧的领域模型(带幻灯片)。附加内容:干净代码讨论-继承,多态和测试。
  • 维克多·伦特(Victor Rentea)用头脑风暴法从巨型独石走向清洁建筑


 类似资料:
  • 问题内容: 我这样存储电话号码: 用户将输入电话号码,而我将使用该电话号码。此应用程序将在全球范围内使用。因此,我还需要国家代码。是存储电话号码的好方法吗?而且,我该如何验证电话号码? 问题答案: 你实际上可能会研究国际标准格式E.164,例如Twilio推荐的格式(该服务具有通过REST请求发送SMS或电话的服务和API)。 这可能是最普遍的电话号码存储方式,尤其是在你使用国际号码的情况下。 1

  • 我目前正在编写一个需要在不同类型的设备上运行的应用程序。我的方法是制作一个“模块化”应用程序,可以根据需要操作的设备动态加载不同的类。 为了使应用程序易于扩展,我的目标是为其他模块(jar或.class文件)分配一个特定路径,使核心程序保持原样。当不同的客户需要不同的模块时(无需为每个客户编译不同的应用程序),这一点至关重要。 这些模块将实现一个公共接口,“核心”应用程序可以使用接口上定义的这些方

  • 和是我用来表示成功和错误响应的两个类。

  • 当使用像文档建议的那样的信号时: 我可能会遇到以下问题: 我想保证一次处理一个FIFO 我想处理signalWithStart的“赛车状态”,其中信号方法调用得太早 我想安全地重置工作流。重置后,可以在历史早期重新应用信号 我想确保工作流不会在信号处理之前提前完成

  • 主要内容:MVC模式 VS 三层架构,MVC 的工作流程,MVC 的优点,MVC 的不足MVC 模式,全称为 Model-View-Controller(模型-视图-控制器)模式,它是一种软件架构模式,其目标是将软件的用户界面(即前台页面)和业务逻辑分离,使代码具有更高的可扩展性、可复用性、可维护性以及灵活性。 通常情况下,一个完整的 Java Web 应用程序,其结构如下图所示。 图1:Java Web 应用的结构  MVC 模式将应用程序划分成模型(Model)、视图(View)

  • 问题内容: 事实证明,几乎没有人正确地关闭Java中的资源。程序员要么不使用在所有的块,或者只是把在,这也是不正确的(因为从可影子从try块)。有时他们用类似的字眼仅是正确的,而不是正确的。解决了所有这些问题,但是仍然有大量用Java 6编写的项目。 在Java 6中进行仿真的最佳方法是什么?现在我用Guava Closer ,它总比没有好,但比它更丑。另外,有一种称为贷款模式的模式,但是Java