当前位置:  开发笔记 > 编程语言 > 正文

Zend Framework MVC设计

如何解决《ZendFrameworkMVC设计》经验,为你挑选了1个好方法。

我也在zfforums上问了这个问题,但我可能会在这里得到回复.

所以Zend框架是一个通用的,灵活的,松散耦合的,高质量的框架.但是,我发现一些MVC部分不一致且过于复杂.希望你们中的一些人可以证明一些zf设计决策并回答一些问题:

一般问题/评论

    为什么zend mvc不遵循与其他zend组件相同的命名约定?例如,mvc使用小写,多个目录名称和类名称不以目录信息为前缀,因此无法轻松自动加载.

    我想要添加模块根目录的选项.这样,我就不必通过添加控制器/模块目录来显式配置调度程序.我可以放入一个模块并立即访问它.

    为什么视图和动作助手之间有区别?目前,帮助程序并非设计为在整个代码中共享,并且存在加载和访问帮助程序的不一致方法.其他框架允许您在代码中的任何位置共享相同的帮助程序.我认为不需要专门化和违反DRY.

Zend查看问题

    为什么视图使用"$ this"来访问资源?我没有看到额外打字的需要.其他一些框架提取()一个视图变量数组,允许从视图中加载全局函数或自动加载静态助手:myHelper :: someMethod();

    为什么视图帮助程序每个类只允许一个函数?这导致了很多课程和相关的维护.我更喜欢使用已经提到的任何数量的方法的静态类.

Luiz Damim.. 5

我在一个庞大的内部网站点使用Zend Framework,因为它是早期阶段,我认为是0.3或0.4,而且我遵循了大部分关于你的问题的决定.我会尝试解释一下:

    在大多数情况下,您不需要使用模块.您可以将所有控制器放在application/default目录中,命名IndexControllerHelpController完成,只需访问http://www.domain.com/http://www.domain.com/help.

    如果您的项目开始增长,您可以根据需要添加模块,在它们前面加上模块名称(目录名称),Admin_IndexController或者Forum_PostController通过它们访问它们http://www.domain.com/admin(您在admin模块,index控制器中;不在default模块/ admin控制器中).

    applicatoin/modules例如,您可以设置模块目录,并配置FrontController以查看此目录中的模块.使用addModuleDictory每当您创建一个新目录并将视图/控制器放在那里时,调度程序就会自动发现它们.这是一个例子.

    我认为它们的用途明显不同.ViewHelpers用于生成标记并直接在视图中呈现其他操作,抽象菜单创建,侧边栏等.作为示例,OTOH ActionHelpers与调度进程交互,允许您重定向到另一个操作.

查看

    在开始时我也觉得有点尴尬,但我已经习惯了.我认为主要原因不是污染命名空间,但我可能错了.顺便说一句,我不是很喜欢使用extract(),但这只是我个人的偏好.

    主要原因是每个文件不允许有多个控制器:自动加载.当您使用$this->someViewHelper()底层引擎时,会查找*_SomeViewHelper_Helper插件路径中指定的类.另一个原因是静态类很难进行单元测试.甚至有人建议将FrontController重写为实例类,而不是Singleton.

你对你在第二段中所说的过于复杂的部分以及开发人员和社区对此的了解是正确的.它必须以这种方式来满足所有需求和变化.

最后,我认为ZF是一个非常强大的框架,让我们可以自由地做我们想要的事情.

我希望我可以帮你解决问题.



1> Luiz Damim..:

我在一个庞大的内部网站点使用Zend Framework,因为它是早期阶段,我认为是0.3或0.4,而且我遵循了大部分关于你的问题的决定.我会尝试解释一下:

    在大多数情况下,您不需要使用模块.您可以将所有控制器放在application/default目录中,命名IndexControllerHelpController完成,只需访问http://www.domain.com/http://www.domain.com/help.

    如果您的项目开始增长,您可以根据需要添加模块,在它们前面加上模块名称(目录名称),Admin_IndexController或者Forum_PostController通过它们访问它们http://www.domain.com/admin(您在admin模块,index控制器中;不在default模块/ admin控制器中).

    applicatoin/modules例如,您可以设置模块目录,并配置FrontController以查看此目录中的模块.使用addModuleDictory每当您创建一个新目录并将视图/控制器放在那里时,调度程序就会自动发现它们.这是一个例子.

    我认为它们的用途明显不同.ViewHelpers用于生成标记并直接在视图中呈现其他操作,抽象菜单创建,侧边栏等.作为示例,OTOH ActionHelpers与调度进程交互,允许您重定向到另一个操作.

查看

    在开始时我也觉得有点尴尬,但我已经习惯了.我认为主要原因不是污染命名空间,但我可能错了.顺便说一句,我不是很喜欢使用extract(),但这只是我个人的偏好.

    主要原因是每个文件不允许有多个控制器:自动加载.当您使用$this->someViewHelper()底层引擎时,会查找*_SomeViewHelper_Helper插件路径中指定的类.另一个原因是静态类很难进行单元测试.甚至有人建议将FrontController重写为实例类,而不是Singleton.

你对你在第二段中所说的过于复杂的部分以及开发人员和社区对此的了解是正确的.它必须以这种方式来满足所有需求和变化.

最后,我认为ZF是一个非常强大的框架,让我们可以自由地做我们想要的事情.

我希望我可以帮你解决问题.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有