我正在使用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 ?>