我有数据来自SQLite数据库,通常,我从数据库中获取一个项目并将其放入我的自定义数据类“发票”中,其中包含发票的所有详细信息。在Invoice中,我有业务逻辑来返回诸如Invoice的余额(Sales Invoice将返回Invoice的信用,Expense Invoice将返回Invoice的借方)以及其他会计特定怪癖。
这就是说,当我执行我的SQL查询并抓取一个游标时,将光标放入SimpleCursorAdapter并按照我的方式使用它不起作用,因为嵌入到我的Invoice类中的业务逻辑被绕过了。我想我将不得不将每个游标结果转换为Invoice对象,然后以某种方式在ListView中列出这些对象。这是最优化的方式吗?或者,我应该打破约定并将逻辑编码到我的控制器中(类首先抓住光标)?
我想让事情尽可能地理解。话虽这么说,我宁愿对这个问题采用“纯粹主义”的方法(例如尽可能保持这个对象在MVC范式内),而不是在控制器中将一些逻辑混合在一起来做逻辑。
你怎么看?你会怎么做?一方面使用“纯粹主义”方法肯定会获得更多的处理能力,因为它不那么直接,但是,代码的可维护性和清晰度是否会弥补这一点?感谢您的观点!
答案 0 :(得分:1)
...将光标放入SimpleCursorAdapter并按照我的方式进行操作 使用它不能作为嵌入我的发票的业务逻辑 课程被绕过了。
如果您使用普通SimpleCursorAdapter
。相反,你可以扩展SimpleCursorAdapter
并在bindView()
方法中实现你想要的任何逻辑,但我想你已经知道了这个(?!)。另一个选择是使用普通SimpleCursorAdapter
并使用SimpleCursorAdapter.ViewBinder
绑定数据,您需要执行SimpleCursorAdapter
无法处理的额外内容。
这是最佳方式吗?
可能不是。
你怎么看?你会做什么?
如果您构建Invoice
类(以及额外的东西)仅将其显示给用户(在ListView
中),那么我将删除构建{ {1}}类直接实现Invoice
,Adapter
等中的任何逻辑(这可能不是“纯粹”方法,但我认为这是最有效的方法,特别是如果光标与数据将有几百行。
如果您在代码的其他部分使用ViewBinder
类,那么我可能会首先从光标中提取数据。