我的业务中有 2 个类型 X 的类(托管 bean),这 2 个类仅具有相同的属性,除了 3 个属性,我可以让 DTO 包含 2 个 bean 中的所有属性并让它们扩展这个 DTO 或者我必须对 DTO 中的属性进行分组并将其与 2 个 bean 相关联,以便每个 bean 都可以设置和获取其属性,我想从设计的角度了解适当的解决方案,另一个问题是托管 bean 的正确设计和 DTO 直接有关系。
问问题
1107 次
1 回答
0
你可以这样做,但这很容易出错,违反了 MVC 范式,就我而言,这只是一个不好的做法。
考虑并比较两个简单的案例。第一种情况是扩展 DTO 的 bean,第二种情况是包含 DTO 的 bean。
扩展 DTO 的托管 bean
public class ContactDto {
private String name;
}
public class ContactBean extends ContactDto {
//has name inherited
private boolean renderedAdminPanel;
public void action { }
}
在这种情况下,谁将生产托管 bean?它们何时被实例化以及如何被实例化?你的 DAO 会紧密耦合ContacyBean
吗?如果您决定放弃使用 DTO 并改用分离实体怎么办?
所有这些都会增加您架构中的差异,并使其至少难以管理。
现在让我们考虑另一种方法。
包含 DTO 的托管 bean
public class ContactBean {
private ContactDto contactDto;//all fields contained inside
@PostConstruct
public void init() {
//get data from your service based on injected parameter's value and assign it to your DTO
}
private boolean renderedAdminPanel;
public void action { }
}
在这种情况下,所有逻辑都非常清楚。此外,您不需要编写“附加”,因为您的所有属性都可以在 EL 上下文中使用附加访问器。您的对象的生命周期是可预测且格式良好的。
归根结底,DTO 就是一个 DTO,您不希望使用其他可能安全的信息来为它增添趣味,例如注入的当前用户、上下文、会话变量等以传递该信息。保持简单并在自己的位置。
于 2013-05-11T14:08:46.637 回答