java - 好的做法是将光标传递给构造函数吗? (Java/安卓)

标签 java android cursor

我的一些 friend 告诉我,在构造函数中通过游标初始化对象是不好的做法。但我不确定。我初始化光标并在一个方法中创建对象(我不将光标传递给另一种方法)。在构造函数中,我也不将光标移动到某个位置。

Cursor cursor = getVehiclesAsCursor();
while (cursor.moveToNext()) {
  Vehicle vehicle = new Vehicle(cursor);
  //Do something
}
if (cursor!=null) close.closeCursor();

我在车辆类中的构造函数

public Vehicle(Cursor cursor) {
  id = cursor.getInt(cursor.getColumnIndex(_ID));
  name = cursor.getString(cursor.getColumnIndex(NAME));
  ...
}

请告诉我,代码是好是坏? 谢谢!

最佳答案

出于以下原因,我认为这种做法不好:

  1. 游标是一种短暂的构造,仅在事务内有效。如果对象的生存时间比事务长,并且保留对游标的引用,则在最好的情况下,它具有陈旧的游标,在最坏的情况下,会扰乱事务处理

  2. 游标是一个高度实现特定的对象。在您的示例中,您创建了数据对象对 SQL 逻辑的依赖关系。为什么数据类需要知道如何从游标读取数据、处理 SQL 错误等?它需要知道的只是它的数据。

  3. 这是第 2 点的扩展:将数据类与数据库实现联系起来。如果更改存储数据的方式,则必须更改数据类。你不希望这样。

关于java - 好的做法是将光标传递给构造函数吗? (Java/安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29228912/

相关文章:

android - 如何让 android 键盘显示 '.com' 按钮

css - 如何使悬停激活整个 <li>,而不仅仅是 <a>?

java - 如何使用 Java 访问内联文本文件?

java - Querydsl mongodb gradle springboot 问题

java - 获取本月的最后一个星期一

android - 启动 Dagger2,如何构建结构?

android - 如何设置每个 fragment 在屏幕中的百分比

java - Mac 10.8 上的 Eclipse - 安装了 1.7.0 JRE/JDK,但 Eclipse 无法启动

android - 如何将数组中的值填充到 SQLite 数据库中

python - 类型错误 : tuple indices must be integers, 不是 str Python/django