是否有一种普遍接受的做法来设计经常加载和保存到数据库和从数据库保存的java对象?
我现在使用的方法是有一个主数据库对象,它打开与数据库的连接.在我的应用程序中我需要加载或保存对象的任何地方,我创建了一个用于加载和保存的源接口.例如,我可能会这样做:
public interface CalendarSource {
public Appointment[] getAppointmentsForMonth(int year, int month);
public void saveAppointment(Appointment appointment);
}
然后我将在主数据库对象上实现该接口.任何子数据也会同时加载到主对象内的成员对象中.就像每个约会的客人名单一样.这很好用,因为我使用的所有数据都来自两个数据库中的一个,所以我保持两个数据库连接,每个源都由其中一个实现.
问题是,这有时似乎很笨拙.令人困惑的是如何处理ID值,因为我真的不想将它们添加到我的对象中.它还需要一个数据库连接来实现几个不同的接口.实际上,我的数据库包必须依赖于项目中的几乎每个包,因为它实现了所有接口.这在某个层面上确实有意义,但我想知道是否有更好的方法.
我选择这种架构有两个主要原因:
我遇到的一个问题是如何处理ID值.由于对象不应该知道它们是数据库对象,因此它们不应该包含ID字段.但是,如果我尝试将对象写入数据库,并且我没有ID值,那么我应该知道是否应该插入或更新?
我也担心数据库包会扩展整个项目的所有内容.我经常传递这些源接口.我想这也是有道理的.
也许我只是在寻找一些我做得对的验证,而且我没有看到一些明显的简单解决方案.别误会我的意思 - 一切正常.
有什么想法吗?
我认为最普遍的模式是DAO模式.也就是数据访问对象.基本上,您定义了一个指定行为的接口(如基本的crud操作和域的专用行为),然后提供实现.对于额外的点,你可以使用泛型是java 5和更高版本来编写更少的代码.
http://www.ibm.com/developerworks/java/library/j-genericdao.html
将所有持久性代码保存在应用程序的一个层中是一个重要的设计选择.它有助于保持代码简单和干净.
从你的帖子中,你不想做你正在做的事情.使用Spring或等价物,因为它会为你处理很多代码.它管理连接,交易等.
此外,不要担心您的课程上有ID字段.虽然你可能不认为它是完美的,但它会让生活更轻松.选择对抗更大的设计战斗,比如做TDD并保持设计清洁.
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |