您如何看待返回选择对象而不是语句结果?

Bor*_*éry 1 php database zend-framework

我想知道从'$ selectObj = getSomethingByName($ name)'这样的方法返回一个select对象然后将它传递给另一个方法,如'getResult($ selectObj)',这将是一个好主意.特技.我的想法是能够将select对象传递给任何有用的函数,如'setLimit(10)'或addCriteria('blabla'),具体取决于我的模型...

但这样做是个好主意吗?它可能是'不安全',因为用户可以自己修改对象,我不应该这样做..

我曾经像上面那样做过简单的方法但是把结果作为一行返回...但是当你根据不同的表有复杂的语句时,它有时会很痛苦.

Bil*_*win 5

您面临的问题(复杂的语句取决于不同的表)是一般的ORM框架的一个古老而普遍的问题.SQL可以做很多事情,ORM做得不好.不可避免地,您必须通过在Controller或View中编写大量复杂代码来弥补复杂性的不同.

相反,使用域模型模式并将复杂的多表数据库逻辑封装到一个位置,因此您的控制器和视图不必知道所有各种细节.他们只知道您的Domain Model类的接口,并且该类负责知道如何从数据库中获取信息.

记住:模型" HAS-A "表(或多个表) - 而不是模型" IS-A "表.