将业务逻辑放在ListView控制器中以使用Cursor和SimpleCursorAdapter或将自定义ListView适配器与数据类一起使用?

时间:2012-05-08 05:48:29

标签: android sqlite oop model-view-controller cursor

我有数据来自SQLite数据库,通常,我从数据库中获取一个项目并将其放入我的自定义数据类“发票”中,其中包含发票的所有详细信息。在Invoice中,我有业务逻辑来返回诸如Invoice的余额(Sales Invoice将返回Invoice的信用,Expense Invoice将返回Invoice的借方)以及其他会计特定怪癖。

这就是说,当我执行我的SQL查询并抓取一个游标时,将光标放入SimpleCursorAdapter并按照我的方式使用它不起作用,因为嵌入到我的Invoice类中的业务逻辑被绕过了。我想我将不得不将每个游标结果转换为Invoice对象,然后以某种方式在ListView中列出这些对象。这是最优化的方式吗?或者,我应该打破约定并将逻辑编码到我的控制器中(类首先抓住光标)?

我想让事情尽可能地理解。话虽这么说,我宁愿对这个问题采用“纯粹主义”的方法(例如尽可能保持这个对象在MVC范式内),而不是在控制器中将一些逻辑混合在一起来做逻辑。

你怎么看?你会怎么做?一方面使用“纯粹主义”方法肯定会获得更多的处理能力,因为它不那么直接,但是,代码的可维护性和清晰度是否会弥补这一点?

感谢您的观点!

1 个答案:

答案 0 :(得分:1)

  

...将光标放入SimpleCursorAdapter并按照我的方式进行操作   使用它不能作为嵌入我的发票的业务逻辑   课程被绕过了。

如果您使用普通SimpleCursorAdapter。相反,你可以扩展SimpleCursorAdapter并在bindView()方法中实现你想要的任何逻辑,但我想你已经知道了这个(?!)。另一个选择是使用普通SimpleCursorAdapter并使用SimpleCursorAdapter.ViewBinder绑定数据,您需要执行SimpleCursorAdapter无法处理的额外内容。

  

这是最佳方式吗?

可能不是。

  你怎么看?你会做什么?

如果您构建Invoice类(以及额外的东西)将其显示给用户(在ListView中),那么我将删除构建{ {1}}类直接实现InvoiceAdapter等中的任何逻辑(这可能不是“纯粹”方法,但我认为这是最有效的方法,特别是如果光标与数据将有几百行。

如果您在代码的其他部分使用ViewBinder类,那么我可能会首先从光标中提取数据。