java - DAO 应该扩展数据对象吗?

标签 java android database architecture dao

我有一个名为 Measurement 的类(class)这基本上只是一个带有一些成员的普通旧 Java 对象,并且它实现了 Parcelable方便序列化的接口(interface)。

我想存储来自 Measurement 的数据SQLite 数据库中的对象。我需要一种简单的方法来传递具有附加数据库 ID 的数据。我的第一个解决方案是简单地添加 public long id成员(member)Measurement类(class)。这当然有效,但感觉就像它与数据库耦合在一起,这实际上没有意义 - a Measurement可以脱离数据库而存在,用在各种根本没有数据库概念的地方。

所以,我的下一个想法是创建某种 MeasurementDbEntry ,这将扩展 Measurement并添加 public long id 。然后,这将在与包含数据库 ID 相关的地方使用。这是一个好的设计吗?或者如果 MeasurementDbEntry 会更好吗?没有延长Measurement ,而是有一个 Measurement成员(member)和id成员(member)?

另外,在问题标题中我提到Data Access Object (DAO) ,但我不确定我在这里谈论的是否真的是 DAO,因为它并没有真正访问数据库本身(我正在使用 SQLiteOpenHelper 的子类来执行此操作)?它只是 Measurement 的更特定于数据库的表示形式。 。它会被视为 DAO(我应该将我的类命名为 MeasurementDAO )吗?

最佳答案

您说得完全正确,将 DBEntry DAO 维护为单独的实体总是更好。

让我们从内存的角度思考, 假设您的类 Measurement 需要保存在 Database 中,将来还需要 10 个附加属性,但实际上您不会使用它们遍布整个应用程序,那么如果您对两者使用相同的模型,那么无论您访问它,它都会消耗一些未使用的内存,显然在这种情况下,创建单独的实体是明显且首选的解决方案。

始终为可扩展性设计应用程序,今天 id 是唯一的属性,明天您可能需要添加一些其他附加属性,仅用于保存在数据库中。这个设计将来对你来说会很方便。

关于java - DAO 应该扩展数据对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49665651/

相关文章:

java - ANTLR4 中的动态运算符标记

java - PBEWITHHMACSHA512ANDAES_128 和初始化 vector

android - 测试涵盖的 Android 项目的好例子?

android - Clear Data on App Settings 是否会清除为该特定应用程序存储的所有 Android KeyStore?

ruby-on-rails - 在 Rails 模型中 self 指代父亲字段中的男性和母亲字段中的女性?

java - HashMap 和 ArrayList 在迭代/循环时添加

java - 为什么我应该使用 JSF 而不是使用简单的 ZK 框架

android - 如何从具有 NestedScrollView 的 fragment 中的 AppBarLayout 禁用 "expand"?

android - 将 FrameLayout 设置为 xml 布局 android 的背景

php - 使用超链接更新数据库而不刷新页面