2013-03-07 74 views
0

我分离类似于MVC(模型,视图和控制器)的代码。查看实例化另一个视图

比方说,我有两个视图类,一个是概念上一个页面(包含很多项目),另一种是只是一个小部件(如最近的新闻列表)。

下面是我看到这样做的方法:

  1. 控制器实例两个页面和窗口小部件类,然后通过widget对象到页面中。如果页面有很多小部件,我不得不弄清楚如何通过它,而不会令人困惑。

    class PageController { 
        function foo() { 
         Widget widget1 = new Widget(); 
         Widget widget2 = new Widget(); 
         Page page = new Page(widget1, widget2); 
        } 
    } 
    
    class Page { 
        function Page(Widget widget1, Widget widget2) { 
         //do something with the widgets 
        } 
    } 
    
  2. 页面实例化窗口小部件类。但是现在,页面类可以引用各种视图,而不必将视图放在任何地方,只要它具有适当的界面即可。

    class PageController { 
        function foo() { 
         Page page = new Page(); 
        } 
    } 
    
    class Page { 
        function Page() { 
         Widget widget1 = new Widget(); 
         Widget widget2 = new Widget(); 
         //do something with the widgets 
        } 
    } 
    
  3. 还有其他的东西吗?

你的建议是什么?为什么?

谢谢。

+0

请详细说明您的问题,并提供更多关于您正在努力达到的目标以及您面临的问题的更多信息。如果适用,一些代码也可以帮助回答问题。 – MickJ 2013-03-07 20:18:00

回答

1

我在某些方面实际上与方法1一起。我会说页面应该能够被实例化,有或没有小部件。通过业务逻辑和规则运行时,您可以通过页面内的其他一些条款一次性添加一组小部件,以及/或者一次添加小部件。

这使您可以更灵活地修改页面结构。

小部件中包含对它们的功能和信息页面的布局中他们的介绍。

页应该只负责获取信息/从所包含的小部件的指令和初始化/使它们。 这将允许更灵活和流畅的设计。

1

从概念上讲,#2对我最有意义。

这是完全正常的有意见之间的耦合,如果一个类型的视图包含另一个。例如,它应该是在页面的工作来管理在何处放置每个插件,当隐藏某些部件等

但是,页面不应该关心关于这些小部件,除非它需要的事件。如果一个小部件有一个按钮,它应该只是回调一个控制器并跳过告诉页面......除非它导致小部件被调整大小,并且页面需要以不同的方式布置。

希望这对你有用。

+0

它是有帮助的;谢谢。这是我正在寻求的建议类型。 – tau 2013-03-07 20:24:36