模块化结构(不依赖于彼此),在zend框架中没有冗余


Modular structure (not depending on each other) with no redundancy in zend framework

我正在使用Zend框架和Doctrine开发小型内容管理系统(CMS)。为了解释我的问题,我创建了一个简单的结构,在这里我构建了两个模块(Admin, Frontsite),正如您在以下结构中看到的。

application
  - configs
  - controllers
  - models
  - modules
     - frontsite
         - controllers
           -FrontController
            -shownewsAction()
            ...
           ...
         - models
         - views
           ...
         ...
     - admin
         - controllers
           -NewsController
         - models
           -news (extends newsbase)
           -newsbase
         - views
           ...
         ...
  - views   

Admin模块处理所有管理请求,而frontsite模块处理来自访问者的请求。如果我创建模型(即新闻)在管理模块,并允许前端控制器从前站模块访问它。那么我的一个模块对另一个模块是可靠的。

据我所知,模块化方法的一个目的是保持每个模块不可靠,而不相互依赖。可以移除一个模块,而不会对体系结构中的任何模块产生任何影响。如果这是模块化方法的目的之一,那么我必须在前端模型中创建相同的模型(新闻)。这将导致我的项目中的冗余,这绝对不是面向对象设计的一部分,因为它将达到可重用性的目的。

第一种方法,我是否需要创建另一个公共模块,在那里我将保留公共模型并允许其他模块访问它?这是否意味着我的某些模块将只具有VC架构,并将从通用模块访问模型?

第二种方法,我正在考虑的是,创建某种服务层来帮助一个模块与另一个模块通信,这不是彼此可靠吗?

另一种方法是将所有通用模型转移到库文件夹中。所有模块都将从库中访问它们。这样,一些模块将成为VC模块,而不依赖于其他模块。通过这种方式,我们可以提高可重用性,消除冗余,并保持模块之间不可靠。

行业惯例是什么?任何专家意见!

我已经做了一些搜索在stackoverflow和谷歌得到答案。但没有一个人能准确地回答我的问题。

一些搜索

搜索1搜索2搜索3搜索4

我现在正在做完全相同的事情。我已经设置了我的CMS与"管理"模块和"前端"模块。我把我所有的模型都保存在application/models中,而不是在任何一个模块中。

由于这些模型并不是专门应用于一个模块,所以最好将它们放在结构中模块的"上面"。

我不知道你有什么设置自动加载,但信息,我有这个在我的引导:

protected function _initAutoload() {
    $autoloader = Zend_Loader_Autoloader::getInstance();
    ini_set('include_path', ini_get('include_path').";".APPLICATION_PATH);
    $autoloader->registerNamespace('Models_');
    ...more code...
}

你可以把你的模型放在

application
  - configs
  - controllers
  - models (this is made to be shared between your module)
    -news
    -newsbase

您可以通过调用它们Model_News和Model_Newsbase来访问它们

<?php class Model_News extends Model_Newsbase ?>