【发布时间】:2010-09-15 02:12:56
【问题描述】:
我继承了一个使用 Struts、Spring 和 Hibernate 的大型 Java 应用程序。我每天处理的类和接口有:Struts Actions、Struts ActionForms、值对象、服务接口和实现、DAO 接口和实现以及实体。我很清楚其中大多数的方式和原因,除了我不确定 ActionForms、Value Objects 和 Entities 之间的职责是否正确分离。我还应该提到域模型(即所有实体)不包含太多(如果有的话)真实的业务逻辑。这本质上是一个 CRUD 应用程序,大部分真正的逻辑都在数据库中(糟糕!)。无论如何,我想知道几个不同的 Java 相关问题:
1) Entities 和 Value Objects (VOs) 之间似乎没有太大区别,并且当它们以任一方向通过服务层时,必须编写大量代码才能转换为另一个(Struts Actions仅与 VO 打交道,DAO 仅与实体打交道)。因此,VO 和实体似乎有些多余。为什么两者都有?
2) VO实体翻译代码应该去哪里?服务层、Entity、VO?
3) VO 直接放入 ActionForms 并直接绑定到 JSP 中的标签(例如 )。这是一个好习惯吗?如果不是,合适的设计是什么?
4) 不清楚如何正确处理值对象中的外键依赖关系。例如,某些 VO 有一个类型字段,在数据库术语中,它表示与类型表的外键关系。在 UI 中,这转换为一个下拉字段,允许用户选择类型,或者一个标签,仅显示类型的文本表示(取决于它是哪个屏幕)。现在,VO 是否应该具有类型 ID 的属性、类型的文本表示,或两者兼而有之?谁负责在两者之间进行翻译,什么时候?
5) VO 有一个字段作为其数据库 ID。我以为VO没有身份?这是怎么回事?
我希望这些问题足够笼统,足以引起普遍关注。在这种类型的架构中似乎总是会出现这种情况。
另外,我怀疑这个架构对于这个应用来说太重了,如果你有更好的建议,请继续。但我主要对上述问题的答案感兴趣,因为不同的架构是我目前无法进行的长期重构。
【问题讨论】:
标签: java design-patterns architecture oop