【发布时间】:2010-01-02 01:35:32
【问题描述】:
我希望这不是太主观。我无法在这两个设计机会之间做出决定。
我有一个前端控制器模式。当用户浏览特定 URL 时,我的框架会为此 URL 加载指定的视图控制器。视图控制器然后计算一些东西并加载一个视图模板,以显示结果。
现在假设您想创建一个类似 SO 的网站。每个页面看起来都非常相似:相同的页眉、相同的菜单、相同的页脚。只是内容领域不同。您浏览到“”页面,并希望“提出新问题”表单出现在布局中。
所以我们用RootView 模板制作了一个RootViewController,该模板设置了布局并有一个内容占位符。还有一个带有AskQuestionView 模板的AskQuestionViewController。
我们的前端控制器加载AskQuestionViewController 类。系统调用loadView()方法,然后调用viewDidLoad()方法。
选项 A:AskQuestionViewController 继承自 RootViewController。
方法被系统调用,首先调用parent::loadView()。所以RootViewController 有机会创建它的RootView 模板。接下来,loadView() 加载AskQuestionView 模板,并将其分配给RootView 模板的内容占位符。
选项 B:AskQuestionViewController 不继承自 RootViewController。
AskQuestionViewController 的 loadView() 方法首先加载 RootViewController。然后它加载自己的AskQuestionView 模板,并将其分配给RootView 模板的内容占位符。
这些视图控制器之间的唯一区别是,它们加载不同的视图模板,并且它们具有不同的自定义方法来执行某些任务。即RootViewController 能够组成导航菜单并突出显示当前访问的内容。 RootViewController 中没有其他内容对 AskQuestionViewController 有用。
哪个选项会更好设计?
【问题讨论】:
标签: design-patterns oop architecture