如何在OOP中正确委派此功能

时间:2011-09-06 22:27:30

标签: php oop codeigniter

我正在使用codeigniter进行项目,我对设计实现的正确方法有几个问题。

我有一个“交易”类,它基本上包含交易的属性,如名称,到期日,交易描述等。

最重要的是,我还有一个“广告系列”课程,用于处理与交易相关的外部内容,但并不真正与之相关。例如,广告系列可以包含页眉和页脚图像,交易将呈现的主题等等。一个活动一次只能有一笔交易,同样的交易也是如此。一旦交易到期,另一笔交易可能会与同一个广告系列挂钩。

“Deals”和“Campaign”的数据来自他们自己独立的模型类(DealsModel和CampaignModel)。

因为我希望控制器只调用一个类来设置广告系列并处理视图,所以我创建了一个名为ViewManager的中间类,它创建了适当的逻辑并按下“Deals”类和“Campaign”中的数据。在它发送给控制器之前,控制器将其交回视图。

现在,我在控制器中有一些需要直接访问模型类的函数。我想知道是否应该将此功能委托给ViewManager类并让它处理它,因为它有一个模型实例,或者我应该在控制器中创建一个新的模型实例并直接调用它。

感觉就像我将更多的函数委托给ViewManager,代码变得越混乱。

1 个答案:

答案 0 :(得分:1)

这听起来像是一个糟糕的MVC实现。特别是模型部分。

根据您的描述,DealsCampaign类似乎实际上是Domain Object和数据访问对象的合并。它们是Domain Model应该使用的结构。此域模型应包含其他功能。

整个问题来自CodeIgniter中提供的错误实现MVC。 ActiveRecord不足以替代真实模型。这个错误迫使业务逻辑进入Controller甚至进入View。我责怪RoR。

P.S ..哦..和Managare这样的类名通常被认为是代码气味