【发布时间】:2019-01-04 18:41:47
【问题描述】:
这个话题比标题要复杂一些。 假设我们要为实体建模。这类似于 KYC 信息(姓名、姓氏、地址等)。我可以在一个类中以简单的方式对此进行建模,例如:
public class KYCInfo {
private KYCInfoType type;
private String firstName;
private String lastName;
private Address personalAddress;
private Address buisnessAddress;
private String country;
private String state;
private LocalDate dateOfBirth;
private String personalIdNumber;
}
正如您在上面的代码中看到的,这个 KYC 可以是不同的类型。实际上,该类型可以有两个值 - 商业和个人。对于企业来说,buisnessAddress 字段是必需的,对于个人来说,personalIdNumber 是必需的。另外,根据国家/地区字段,将需要其中一些字段。 State 字段适用于美国,但不适用于欧洲国家。将所有这些字段放在一个类中似乎是不合适的 - 每个实例,取决于字段都会有很多空值。例如,我可以为 BuisnessKYCInfo 和 IndividualKYCInfo 创建单独的类。但是我会在字段中有一些重复(假设firstName、lastName 和其他一些字段对于两个类都是相同的)。我可以用通用字段创建一些抽象。喜欢:
public abstract class KYCInfo {
private String firstName;
private String lastName;
}
现在想象这是一个简单的 DTO 类,并且在某个时刻我以某种方法在 processKYCInfo() 中处理它。当我有两个类 BuisnessKYCInfoandIndividualKYCInfothen I would need to have two methods
``processKYCInfo(BuisnessKYCInfo kycInfo) 和 processKYCInfo(IndividualKYCInfo kycInfo)。此方法将执行相同的操作,但会从不同的字段收集信息。现在想象一下,你有比个人或企业更多的类型。或者正如我之前写的,额外的“类型”像country 一样出现。现在我需要有 25 个国家/地区,其中一些具有仅针对该国家/地区的字段。使用与以前相同的方法,我将有 25 种方法执行几乎相同的操作。这似乎也不合适。我还有什么其他的选择来建模这个?也许是一些数据结构,也许是一些 Map ?这样做的最佳方法是什么?我怎样才能以更通用的方式做到这一点?
【问题讨论】:
-
你应该一次问一个具体问题。这太宽泛了,问题也太多了。一般性评论,我会将数据和业务逻辑分开,并为它们寻找不同的设计解决方案
-
你说得对,这是一个非常广泛的问题,但它是一个类似于“在那种情况下你会使用什么设计模式”的问题。如果这里没有,我还应该在哪里寻找其他程序员的意见?
-
KYCInfo的公共 API 是什么? -
在这种情况下,KYCInfo 更像是 DTO 对象,所以 getter、setter 是公开的