使用spring jdbcTemplate将Person添加到用户的最佳方法是什么?

时间:2012-01-05 06:22:09

标签: domain-driven-design dao jdbctemplate

我有两个域对象:

  1. 用户(有人)
  2. 仅供参考:在我们的网域中,有些人(人员:-)不是用户,所以我们不能只将它们合并。

    我试图弄清楚将Person对象填充到User对象的最佳方法。我提出了3个可能的解决方案,很好奇其他人做了什么以及其他人可以看到的任何利弊。

    选项1:

    让我们的UserDao和PersonDao连接到我们的用户服务,然后userService.getUser(userId)拨打userDAO.getUser(userId),然后接听我们从中获取的用户并致电user.setPerson(personDao.getPerson(user.getPersonId()))

    优点:不必在dao内部连接dao(不是那么糟糕......不确定)

    缺点:让dao返回一个未完全初始化的域对象似乎有些错误吗?然后你必须担心User对象中是否有人。点击数据库两次。此外,您还必须将personId添加到User对象,而不是仅具有Person对象。

    选项2: 让UserDao的getUser()方法将用户表与person表连接,然后在UserRowMapper内部设置用户,然后调用user.setPerson(personRowMapper.mapRow(rs, rowNum))

    优点:不必在dao内部连接dao(不是那么糟糕......不确定)。此外,您只需按一次数据库,而不是在数据库中两次点击数据库。

    缺点:PersonRowMapper将是它自己的类,而不是封装在PersonDao中(应该是吗?)。

    选项3:

    让PersonDao连接到UserDao,然后只需拨打user.setPerson(personDao.getPerson(rs.getLong("person_id")));

    优点:personDao负责获取Person域对象,而userDao不需要知道有关如何检索该人的详细信息。

    缺点:personDao连接到userDao(那是不是很糟糕?)。点击数据库两次。

1 个答案:

答案 0 :(得分:1)

这是第二种选择,因为你指出两次击中数据库是昂贵的。

我有一个建议,不应该是,User是一个Person(继承)而不是User有一个Person(Composition)