mvc设计问题

时间:2011-07-01 09:24:25

标签: php model-view-controller zend-framework design-patterns

我在这个应用程序中使用Zend框架和学说

在我的网络应用程序中,我有各种各样的模块,如活动,会议,案例研究......所以我正在制作控制器设计。在下面的图像监管文件是控制器及其子是其行动。因此,监管文档,视频,播客都具有几乎相同的功能。那么这个设计是否合适......? 在每个动作的mvc中,我将有一个单独的视图。在用户类型上,我可能必须在这个模块上放置访问级别。所以我保留了单独的控制器,以便我可以轻松控制每个用户类型的模块。但这导致代码重复。

enter image description here

现在我想创建一个父类,并且我将拥有所有常用方法。例如。我将拥有共同的类资源,并且我将保留列表,搜索,建议,添加收藏等。这将是上述给定控制器的父级。

如果我采用这种方法,那么如何管理所有这些不同模块的视图呢?如果我这样做,那么我的代码会有些混乱......?

4 个答案:

答案 0 :(得分:1)

我建议让所有控制器在模块中都有漂亮的URL和清晰的结构,但要保持控制器的精简。将您的域逻辑放入服务或实体,因此不需要(或只是更少)代码重复。

更多信息:

来自DDD:

控制器属于应用层/域逻辑属于域层

答案 1 :(得分:0)

MVC设计意味着对于每个视图,您都有一个控制器和一个模型。但是,模型根本不需要是类,也不需要为每个MVC使用不同的模型。通常,您将在某些MVC之间共享模型,或者您的模型可能只是您在自己的控制器中定义的整数值。通常,您甚至可能希望在它们之间共享数据,然后您将拥有单例模式:

http://www.galloway.me.uk/tutorials/singleton-classes/

答案 2 :(得分:0)

您仍然可以使用单独的控制器来包含suggest,addFavorite操作,而无需将其作为所有控制器的父类。基本上,与这些相关的UI元素可以呈现为部分视图并调用相关控制器中的操作。这样你就可以摆脱视图的问题。

答案 3 :(得分:0)

如果我理解正确,您的监管文件,视频和播客中会有一系列常见行为。

在这种情况下,您可能应该尝试将共性抽象为这三个区域继承的父类。

作为一个例子,我有自己的MVC框架,我定义了一个超类tnh_controller,我的其他控制器(例如:venue_controller,group_controller)继承了它。在父控制器中,我定义了header()和footer()以及delete()方法。然后,我可以在子类中使用那些未更改的内容,并为自己省力。

您也可以在模型超类中为模型(CRUD)执行一些常见工作,只根据需要覆盖它。不同模型的大部分逻辑来自类变量(表名,列名等)。

我不会太担心“严格”的MVC。而是尝试找出能够节省时间并保持代码组织的内容。听起来你在正确的轨道上将类似的行为放在父级别上。