2011-09-06 50 views
0

我对项目使用codeigniter,并且我有几个有关设计实现的正确方法的问题。如何在OOP中正确授权此功能

我有一个“交易”类,基本作用是喜欢这个名字,过期,这笔交易说明交易的属性等

最重要的是,我也有一个“运动”类处理与交易相关的外部事务,但并不真正与此相关。例如,一个活动可能包含页眉和页脚图像,交易将被渲染的主题等。一次广告系列一次只能有一笔交易,交易同样如此。一旦交易到期,另一笔交易可能与同一活动有关。

“交易”和“广告系列”的数据来自他们自己单独的模型类(交易模型和CampaignModel)。

因为我希望控制器只调用一个类来设置活动并处理视图,我创建了一个名为ViewManager的中间类,它创建适当的逻辑,并根据“Deals”类和“Campaign “然后再发送给交给视图的控制器。

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

它只是感觉就像我把更多的功能委托给ViewManager一样,代码越容易混淆。

回答

1

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

从你所描述的,它看起来像DealsCampaign类实际上是Domain Object和数据访问对象的合并。它们是Domain Model应该使用的结构。而这个领域模型应该包含额外的功能。

整个问题来自CodeIgniter中呈现的MVC的错误实现。 ActiveRecord不能代替真正的模型。这个错误迫使业务逻辑进入控制器甚至是视图。我责怪RoR。

P.S ..哦..和类似Managare的名字通常被认为是代码味道