【发布时间】:2018-11-16 15:22:46
【问题描述】:
我正在努力寻找我的 Spring 项目架构的最佳实践。 目前,我们公司有很多项目都使用的大型数据库模式,我们只使用了一个子集,更准确地说是 10 个表。我们的应用程序正在使用 DAO 层来访问这些表。
表的构造通常使它们在所有其他属性旁边具有活动标志、时间戳和状态标志。
我们的 DAO 层自动装配 jdbcTemplate(我们没有使用任何类型的 ORM)。现在,第一个问题来了,我们的许多 DAO 层都有常规的 CRUD 操作 + 许多“更新方法”,DAO 变得臃肿。对于每个新的用例,我们都需要向接口和实现添加新方法。视觉演示:
public class Employee {
private Integer id;
private Integer first;
private Integer second;
private Integer third;
private Integer foreignId;
private Integer sts;
private Integer activityMark;
private Timestamp tstam;
}
public class EmployeeDao {
Employee get(Integer id);
Collection<Employee> getAll();
void remove(Integer id);
void updateFirst(Integer id);
void updateSecond(Integer id);
void updateThird(Integer id);
void updateSts(Integer id);
....
}
另一种选择是使用一种更新方法,但这需要从数据库中进行另一个不必要的查询(全选)。
第二个问题是我们有许多(贫血领域)模型(实体)不遵循表设计——一些复杂模型具有来自许多表的属性,一些汇总模型——只有一些来自表的属性。它们的设计也不一致,有时我们使用组合和聚合,像这样:
public class ModelOne {
private ModelTwo m2;
private ModelThree m3;
}
有时只有外键或必要的属性。
它们在DAO中也有对应的方法。有时它们有自己的 DAO 接口和实现,有时它们都与主模型 DAO 一起。我们正在尝试在以表为中心和以模型为中心的 DAO 之间取得平衡。
最后,我们最终得到了很少的服务来自动连接一堆 DAO,这违反了单一责任原则。
我阅读了很多文章,很多讨论,但我觉得没有一篇文章能很好地解决我的问题。 对不起,长篇大论,但我会很感激任何建议。
【问题讨论】:
标签: java spring model dao jdbctemplate