获取 Table-per-Hierarchy 结构的 DAO

发布于 2024-11-19 07:03:41 字数 571 浏览 3 评论 0原文

假设我有一个 User 类和两个子类 EmployeeCustomer。我将此层次结构实现为数据库中的每个层次结构表,并有一列用于指定用户类型。查询该表时我需要返回正确类型的对象。

我是否需要为每种类型的对象(例如 CustomerDAOEmployeeDAO)提供单独的 DAO,以便每个对象返回各自的 CustomerEmployee 对象。如果是这样,如何从 DAOFactory 获取它们而不使用:

if(type.equlas('customer'))
    return customerDao;
else
    retrun employeeDao;

因为实现 User 的类型可能会改变,我不想每次都改变条件。

或者还有其他办法吗?任何想法将不胜感激。

注意:我没有使用任何 ORM 框架,也不打算使用。

Let's assume I have a User class and two subclasses Employee and Customer. I implemented this hierarchy as a table-per-hierarchy in DB with a column for specifying the type of user. I need to return the right type of object when querying this table.

Do I need separate DAOs for each type of object like CustomerDAO or EmployeeDAO, so each return their respective Customer and Employee objects. If so how to get them from DAOFactory without using:

if(type.equlas('customer'))
    return customerDao;
else
    retrun employeeDao;

Because the types implementing User could change and I don't want to change conditions every time.

Or is there any other way? Any idea would be appreciated.

Note: I'm not using any ORM framework and not planning to use one.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原谅我要高飞 2024-11-26 07:03:41

如果每种类型的持久性代码相同,那么您可以拥有 1 个通用 DAO。

所以你的用户 dao 可能是这样的:

interface DAO<T, ID> {
  T create(T t);
  T read(ID id);
  T update(T t);
  void delete(T t);  
}

class UserDAO<T extends User> implements DAO<T> {
    // Your methods for crud operations will be limited to types of User.
}

然后你的工厂类可以通过指定正确的类型来实例化正确的 DAO。

class DAOFactory {
  public UserDAO<Employee> getEmployeeDAO() {
    return new UserDAO<Employee> ();
  }
}

问候
优素福

If your persistence code for each type is the same, then you could have 1 generic DAO.

So your user dao, could be something like:

interface DAO<T, ID> {
  T create(T t);
  T read(ID id);
  T update(T t);
  void delete(T t);  
}

class UserDAO<T extends User> implements DAO<T> {
    // Your methods for crud operations will be limited to types of User.
}

Then your factory class could instantiate the correct DAO simply by specifying the correct type.

class DAOFactory {
  public UserDAO<Employee> getEmployeeDAO() {
    return new UserDAO<Employee> ();
  }
}

Regards
Yusuf

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文