小编hin*_*hoo的帖子

使用MVC,OO和设计模式开始软件设计

注意:此问题已更新,以提供比以前更多的详细信息和见解.

更新:我只想对所有回复的人说声谢谢.对于Widget来说,哪种设计模式效果最好,我仍然处于黑暗中.也许是Factory或Builder模式之一?


我刚刚开始一个新项目,需要使用MVC,OO和设计模式.

这是一个想法:想象一个显示一组小部件的页面.这些小部件(通常)是基于数据库中几个单独表中包含的数据的图表.我使用一个报告学生表现的页面运行示例.

高级要求

  • 显示一组(仅限HTML)小部件的页面.
  • widget的数据将基于数据库查询.
  • 该页面可用于查看包含类似布局数据的单独数据集.例如,单个页面将显示报告单个学生表现的各个方面的小部件.
  • 想看到另一个学生的表现,拉起另一页.不需要为不同的学生显示不同的小部件(尽管以后可能会很好).
  • 可能有很多学生,但数据库中包含的数据同样适用于所有学生.
  • 窗口小部件的显示方式可以轻松更改(例如,将小部件从显示为饼图更改为显示为条形图).
  • 小部件应该能够快速创建.

低级要求

  • 目前数据不会更改,因此小部件不需要自动更新.
  • 窗口小部件可以表示两个事物的比率(例如,失败的测试与成功测试的比率作为饼图),一系列点,或者有时是单个数值.
  • 开发新的小部件应该是轻而易举的,现有的代码不需要修改.
  • 要使用的框架:Zend Framework,基于MVC.

(最低限度)定义窗口小部件有三件事:要报告的数据集(在上面的示例中,学生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框架中的模型负责提取数据,因此很可能包含用于访问数据库的每个窗口小部件的类.

一些要点:

  1. 此处的模型表示特定小部件的数据.所以必然,它需要知道查询将是什么,以便将获取该数据所需的表汇总在一起.

  2. 在窗口小部件呈现数据之前,最有可能需要一个额外的处理步骤.这取决于将使用哪个渲染器.有时可能需要从返回的数据中形成一个url.其他时候,一个JSON数组.其他时候可能会创建一些标记.这可以在模型或控制器或视图中进行.除非有人能想出将其移动到控制器或视图的充分理由,否则最好让它存在于模型中并保持视图和控制器的精简.

  3. 同样,小部件将由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)

oop model-view-controller design-patterns

9
推荐指数
1
解决办法
2439
查看次数