这段代码是疯了吗?

时间:2010-09-18 03:03:40

标签: php zend-framework

我正在按照一个教程,我认为这个教程是由一个不知道他在做什么的人编写的(已经发现了两个明显的错误而其余的代码都很混乱)。但我不想完全诋毁这个人,所以我在这里问一些我不理解的事情。

  

首先,我会发送100个布朗尼点,   我的2只宠物,还有一盒巧克力   无论谁能向我解释是什么   继续使用此代码。

他正在使用基于模块的架构。模块名称为frontmodule。模块有MVC。并且模块具有自己的内部library

  /modules/    
      /frontmodule/
          /models/
          /views/
          /controllers/        -- the /module controller is here (undestandable)
          /library/            
             /Controller/      -- the /module/library controller is here (why?!)
                /Action/

首先是令人困惑的部分。为什么每个模块都有一个内部库,以及为什么那个内部库有自己的controllersactions。这是最佳做法吗?我想这个库可以移动到模块可以使用的插件。不确定..

现在出现了有趣的部分....除了每个模块都有自己的内部库之外,还有一个由所有模块共享的公共库(请参阅下面与{相同的文件夹级别) {1}})并且Common库也有自己的控制器和动作(就像每个内部库都有自己的控制器和动作一样)

/modules

所以我们有3个控制器:

  • 模块控制器
  • 模块内部库的控制器
  • 公共图书馆的控制器

现在这里是疯狂部分,我认为这会使生活过于复杂

  

他说:模块控制器扩展了   模块的库父控制器   这也扩展了公共库   控制器。

  /modules
  /library/
      /Common/
          /Controller/         -- the /common/library controller is here (why?!)
              /Action/
                  /Helper/
              /Plugin/

所以我想:

  • 模块控制器= class IndexController extends Frontoffice_Library_Controller_Action_Abstract { ... } abstract class Frontoffice_Library_Controller_Action_Abstract extends Custom_Controller_Action_Abstract { ... }
  • 模块内部库的控制器= IndexController
  • 公共图书馆的控制器= Frontoffice_Library_Controller_Action_Abstract

其中Custom_Controller_Action_Abstract扩展module controller

module internal library's controller延伸module internal library's controller

以前有人见过这样的事吗?我的猜测是这个代码不容易维护,但是那些对zend更有经验的人可以告诉我这个人想要实现的目标。应用程序结构有点过于混乱。我认为他滥用MVC而不是用它来简化应用程序及其可维护性。

4 个答案:

答案 0 :(得分:16)

答案 1 :(得分:15)

这太疯狂了。你正在制作网页,对吗?这并不难。我说你发布的东西是过度工程的定义:

http://en.wikipedia.org/wiki/Overengineering

答案 2 :(得分:10)

根本不是疯了。也许是严重或过度设计,但它可能是一个有用的设置。

这只是两个“额外”的继承级别,在某些情况下可能非常有意义。

  • 应该在系统中的每个控制器中可用的属性或方法都在“公共库控制器”中。
  • 应该是的属性或方法 可用于a中的每个控制器 特定模块进入“模块 内部库的控制器“ -
  • a所需的属性或方法 单个,混凝土控制器,住在 具体的控制器。

但一般来说,这表明在控制器中包含了大量的逻辑,这通常是糟糕的设计。

答案 3 :(得分:0)

通过这种方式,您可以将逻辑应用于:

a)特定的控制器

b)一个模块中的所有控制器

c)所有应用程序控制器