注意:此问题已更新,以提供比以前更多的详细信息和见解.
更新:我只想对所有回复的人说声谢谢.对于Widget来说,哪种设计模式效果最好,我仍然处于黑暗中.也许是Factory或Builder模式之一?
我刚刚开始一个新项目,需要使用MVC,OO和设计模式.
这是一个想法:想象一个显示一组小部件的页面.这些小部件(通常)是基于数据库中几个单独表中包含的数据的图表.我使用一个报告学生表现的页面运行示例.
高级要求
低级要求
(最低限度)定义窗口小部件有三件事:要报告的数据集(在上面的示例中,学生ID),描述报告的度量标准的查询以及呈现模式(条形图,时间序列等).
这是打破MVC每一层职责的过程:
视图: Zend视图是注入了PHP的HTML模板.它们将包含几种类型的小部件之一.窗口小部件有多种形式,包括:静态JPEG图像(从远程站点加载,即:<img src="http://widgetssite.com?x=2&y=3"/>基于JSON的javascript小部件,或各种图表(饼图,条形图等))
控制器:创建窗口小部件,然后将它们分配给视图.要在页面上显示的小部件集需要在某处维护.由于我无法想到在视图中执行此操作的好方法,我现在将其添加到控制器的职责中.如果有一个更好的地方请大声呼喊.控制器还必须处理任何其他输入参数并将它们传递给小部件.例如,data_set id可以在url行传递为http:/.../report/?student_id=42
模型:Zend框架中的模型负责提取数据,因此很可能包含用于访问数据库的每个窗口小部件的类.
一些要点:
此处的模型表示特定小部件的数据.所以必然,它需要知道查询将是什么,以便将获取该数据所需的表汇总在一起.
在窗口小部件呈现数据之前,最有可能需要一个额外的处理步骤.这取决于将使用哪个渲染器.有时可能需要从返回的数据中形成一个url.其他时候,一个JSON数组.其他时候可能会创建一些标记.这可以在模型或控制器或视图中进行.除非有人能想出将其移动到控制器或视图的充分理由,否则最好让它存在于模型中并保持视图和控制器的精简.
同样,小部件将由3个内容,其参数,数据和渲染器组成.
问题的一个重要部分是:在面向对象的设计中表示窗口小部件的好方法是什么? 我已经问了一次,无法得到答案.是否有可以应用于对此项目最有意义的窗口小部件的设计模式?
这是Widget的一个相当简单的类的第一次传递:
class Widget{
//method called by the view
render() {//output the markup based on the widget Type and interleaved the processed data}
//methods called by the controller:
public function __construct() {//recieve arguments for widget type (query and …Run Code Online (Sandbox Code Playgroud)