Ale*_*yan 5 java hibernate hexagonal-architecture onion-architecture clean-architecture
在我们的项目中,我们使用 eclipse hibernate 插件生成的类进行持久化。生成的类具有以下结构。
MyClass extends BaseMyClass //POJO's, that are refenced in the hbm
files
Run Code Online (Sandbox Code Playgroud)
MyClassDAO extends BaseMyClassDAO //DAO objects that use hibernate
session objects to provide CRUD API's for working with DB
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我们使用映射文件中使用的 POJO 类作为最内层的实体,是否会违反 Uncle Bobs 的清洁架构。
在这种情况下,hibernate 特定的 DAO 类将属于最外层,而 UseCases 层将通过提供要实现的接口与该层进行通信。
鲍勃叔叔在挪威的一次演讲中展示这张幻灯片时对此发表了评论:
鲍勃叔叔说:
线上没有 Hibernate。如果您使用 Hibernate,它会低于该线。应用程序不知道您正在使用该框架。它低于该线。Hibernate 是一个可爱的工具。它非常适合从数据库中收集数据并将其转换为数据结构。很不错!但您不希望您的应用程序知道您正在使用它。你把所有这些东西都放在了线下。
因此,如果您在实体上使用 Hibernate 注释,则会将域对象与数据库层的详细信息混合在一起。
一些开发人员认为注释并不是那么强的依赖关系,因为如果它们在运行时不可用,它们就不存在。确实如此,但你还必须考虑其他原则。
如果您在实体上添加 Hibernate 注释,则实体类现在有两个不同的原因需要更改:域逻辑和数据库映射。这违反了单一责任原则。因此,数据库映射将影响您的域对象。
我想由于术语“实体”的重载,存在很多混乱。当鲍勃叔叔谈论实体时,他指的是域。在 Hibernate 中,实体意味着数据库记录。
这就是为什么我通常使用术语“域实体”或“数据库实体”来区分它们。
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |