因此,我遇到的情况经常是我的模型开始出现以下情况之一:
- 用无数种方法成长为怪物
要么
- 允许您将SQL片段传递给它们,以便它们足够灵活,不需要一百万种不同的方法
例如,假设我们有一个“小部件”模型。我们从一些基本方法开始:
- get($ id)
- 插入($ record)
- 更新($ id,$ record)
- 删除($ id)
- getList()//获取小部件列表
一切都很好,但是然后我们需要一些报告:
- listCreatedBetween($ start_date,$ end_date)
- listPurchasedBetween($ start_date,$ end_date)
- listOfPending()
然后,报告开始变得复杂:
- listPendingCreatedBetween($ start_date,$ end_date)
- listForCustomer($ customer_id)
- listPendingCreatedBetweenForCustomer($ customer_id,$ start_date,$ end_date)
您可以看到增长的地方...最终,我们有如此多的特定查询要求,我要么需要实现大量的方法,要么可以将某种“查询”对象传递给单个-> query(query $ query)方法...
...或者只是硬着头皮,开始做这样的事情:
- list = MyModel-> query(“开始日期> X AND结束日期<Y AND待定= 1 AND customer_id = Z”)
仅仅拥有一个这样的方法而不是五千万个其他更具体的方法是有一定吸引力的,但是有时将一堆基本上是SQL的东西填充到控制器中,这是“错误的”。
是否有“正确”的方式来处理这种情况?将这样的查询填充到通用的-> query()方法中似乎可以接受吗?
有更好的策略吗?