拥有多个 DAO 可以吗?
Is it fine to have several DAOs?
假设我有一个包含两个 table 的数据库:companies
和 employees
。
我应该创建 companyDAO
和 employeeDAO
如果我 select,更新,添加和删除这两个 table 吗?
或者我应该创建一个 DAO,在其中为数据库中的每个 table 编写 CRUD 操作的方法?
为整个数据库创建一个 DAO 并不能很好地扩展。添加的数据库 table 越多,它就越大。在行业中,您几乎总是会看到 DAO 与 table 的一对一关系。一如既往,有例外和警告。
您应该为单个 Hibernate 模型创建一个 DAO(在大多数情况下)。
模型可以表示所有 table 列、部分 table 列或多个 table 列的组合。这完全取决于您的需求。
当你想这样做时(将单个 DAO 映射实体映射到多个 tables),当你想将休眠模型与业务模型分开时。
是的,为大多数实体设置单独的 DAO
是有意义的。
通常你会使用泛化的 DAO
s,即你有一个抽象的超级 class。在一个简化的示例中,它可能如下所示:
class BaseDAO<T extends Entity>
提供了一系列有用的方法来查找、删除或更新实体。当为每个实体定义该 BaseDAO 的子 class 时,例如
class EmployeeDAO extends BaseDAO<Employee>
您确保所有 DAO return 是您 仅 必须在 BaseDAO 中实现的方法的正确类型。因此,EmployeeDAO 中的 findAll()
方法将 return List<Employee>
。
此外,您可以为某些实体实现自定义操作的方法,例如findEmployeesWithSalaryAbove(long)
在各自的 class 中。您不希望这些使单个 DAO 混乱。
顾名思义,DAO代表Data Access Object,是一个访问ONE对象或class的实体。为每个业务实体配备一个 DAO 是标准软件工程和企业行业(尤其是 Java)的最佳实践。
如果您在多个 DAO 之间重用相似的行为和数据,创建一个基础 DAO 并由其他 DAO 扩展它通常很方便。
假设我有一个包含两个 table 的数据库:companies
和 employees
。
我应该创建 companyDAO
和 employeeDAO
如果我 select,更新,添加和删除这两个 table 吗?
或者我应该创建一个 DAO,在其中为数据库中的每个 table 编写 CRUD 操作的方法?
为整个数据库创建一个 DAO 并不能很好地扩展。添加的数据库 table 越多,它就越大。在行业中,您几乎总是会看到 DAO 与 table 的一对一关系。一如既往,有例外和警告。
您应该为单个 Hibernate 模型创建一个 DAO(在大多数情况下)。 模型可以表示所有 table 列、部分 table 列或多个 table 列的组合。这完全取决于您的需求。
当你想这样做时(将单个 DAO 映射实体映射到多个 tables),当你想将休眠模型与业务模型分开时。
是的,为大多数实体设置单独的 DAO
是有意义的。
通常你会使用泛化的 DAO
s,即你有一个抽象的超级 class。在一个简化的示例中,它可能如下所示:
class BaseDAO<T extends Entity>
提供了一系列有用的方法来查找、删除或更新实体。当为每个实体定义该 BaseDAO 的子 class 时,例如
class EmployeeDAO extends BaseDAO<Employee>
您确保所有 DAO return 是您 仅 必须在 BaseDAO 中实现的方法的正确类型。因此,EmployeeDAO 中的 findAll()
方法将 return List<Employee>
。
此外,您可以为某些实体实现自定义操作的方法,例如findEmployeesWithSalaryAbove(long)
在各自的 class 中。您不希望这些使单个 DAO 混乱。
顾名思义,DAO代表Data Access Object,是一个访问ONE对象或class的实体。为每个业务实体配备一个 DAO 是标准软件工程和企业行业(尤其是 Java)的最佳实践。
如果您在多个 DAO 之间重用相似的行为和数据,创建一个基础 DAO 并由其他 DAO 扩展它通常很方便。