当属性值来自引用表时,应该如何填充实体(bean)对象属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当属性值来自引用表时,应该如何填充实体(bean)对象属性?相关的知识,希望对你有一定的参考价值。

假设你有一个名为Business的实体对象,其属性如businessIDbusinessNameentityTypeentityTypeName。与所有相关的setter / getters。

Business Entity UML Diagram

entityType属性是一个整数,表示与包含所有可能实体类型(公司,LLC,唯一支柱等等)的引用表的外键(FK)关系。这是数据库图的样子:

database relationship model

当从CRUD read()方法填充Business实体时,它会通过DAO(数据访问对象)中的INNER JOIN自动获取正确的entityTypeName,并通过setEntityTypeName()设置它。据我所知,这个过程对我来说很有意义,看起来很标准。

但是,假设您有一个Web表单,用户可以在其中编辑Business实体对象。用户填写一个表单,他们可以根据选择的可用选项框(从参考表中填充)编辑业务名称和实体类型。

web form example

当用户提交表单时,将验证数据,然后服务对象使用表单中的值执行setBusinessName()。接下来,它执行setEntityType()并从实体类型选择框填充整数值。此时,entityTypeName可能有效也可能无效(例如,如果用户更改了它)。

我可以想到几种方法来解决这个问题:

  1. 执行setEntityType()后,相同的表单服务将立即执行setEntityTypeName()并填充正确的值。 (我认为最简单的方法,因为验证过程会检索正确的实体类型名称)
  2. Business实体的setEntityType()方法包含业务逻辑,通过某种类型的注入依赖项(服务)自动填充entityTypeName属性,该依赖项将查找数据并进行分配。 (这似乎是一种更多的DDD方法)并且会使Business实体对象需要更多的行为和依赖(服务等......)。

解决这种情况的正确方法是什么?显然这只是一个简单的例子,但在实际的数据模型中,可能有大量的参考字段,如entityType,这将需要这样的行为。

编辑:语法修复

答案

你不会。

看起来您正在将UI要求混合到您的域模型中。使用专用的视图模型来呈现数据,您的域模型应该只在完成任务时发挥作用。

我建议EntityTypeName不属于BusinessEntityType是它自己的聚合根,Business可能只需要参考EntityType.Id

您的setter可以更改为:

SetEntityType(EntityType entity) {
   //Any rules here based on entity?
  entityTypeId = entityType.GetId();
}

以上是关于当属性值来自引用表时,应该如何填充实体(bean)对象属性?的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicateEditorRowTemplate:如何填充右侧弹出窗口

如何接收配置的bean的返回值

如何对 jsf 复合组件中的集合属性进行 bean 验证,约束不会触发

Spring配置中的bean直接引用其它bean的属性值

spring 引用Bean的属性值

使用 Hashmap 数据填充 JSP 表时继续获取 PropertyNotFoundException [重复]