2011-08-04 9 views
2

ZendフレームワークとDoctrineを使用した小規模のコンテンツ管理システム(CMS)に取り組んでいます。私の質問を説明するために、私は以下の構造のように2つのモジュール(Admin、Frontsite)を構築する単純な構造を作成しました。Zendフレームワークで冗長性のないモジュール構造(相互に依存しない)

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

管理モジュールはすべての管理要求を処理し、frontsiteモジュールは訪問者からの要求を処理します。管理モジュールにモデル(ニュース)を作成し、フロントコントローラからフロントコントローラにアクセスできるようにする。それから私の1つのモジュールは別のモジュールに依存することになるでしょう。

私が知る限り、モジュラーアプローチの1つの目的は、お互いに依存することなく、各モジュールを頼りにしないようにすることです。 1つのモジュールは、アーキテクチャ内のどのモジュールにも影響を与えずに取り外すことができます。まあ、それがモジュラーアプローチの目的の1つであれば、フロントサイドモデルに同じモデル(ニュース)を作成する必要があります。これは私のプロジェクトの冗長性を引き起こします。それは、オブジェクト指向設計の一部ではありません。なぜなら、その再利用性の目的に打ち勝つからです。

最初のアプローチでは、一般的なモデルを保存し、他のモジュールにアクセスさせるために別の共通モジュールを作成する必要がありますか?これは、私の特定のモジュールがVCアーキテクチャのみを持ち、共通モジュールからモデルにアクセスすることを意味しますか?

私が考えている2番目のアプローチは、あるモジュールを別のモジュールと通信するのに役立つ何らかのサービス層を作成することです。

もう1つのアプローチは、すべての共通モデルをライブラリフォルダに移動することです。すべてのモジュールがライブラリからアクセスします。このようにして、一部のモジュールはVCモジュールになりますが、他のモジュールには依存しません。このようにして、再利用性を促進し、冗長性を排除し、モジュールを互いに信頼できないようにします。

業種は何ですか?どんな専門家の意見も!

私は答えを得るためにstackoverflowとgoogleでいくつかの検索を行っています。しかし、彼らの誰も私の質問に正確に答えませんでした。

いくつかの検索では、私は、現時点ではまったく同じことをやっている

Search 1 Search 2 Search 3 Search 4

答えて

2

です。私は 'Admin'モジュールと 'Frontend'モジュールでCMSをセットアップしました。私はすべてのモデルをapplication/modelsに保存しています - どちらのモジュールにもありません。

モデルは特に1つのモジュールにのみ適用されるわけではないので、モジュールを構造の上に置くのが最も良いようです。あなたがアクセスできる

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

} 
1

あなたは

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 ?>

関連する問題