質問

私はここ数ヶ月、Kohanaを使用していますが、コード/プレゼンテーション/ db-layerを整理するMVCスタイルはまだ比較的新しいものです。残念ながら、コントローラーを作成し、ビューを確立し、モデルを介してデータベースとやり取りする方法に関するドキュメントはたくさんありますが、クリーンで推奨される開発パターンを扱う多くのリソースは見つかりませんでした。

簡単な例を挙げましょう:

最新のプロジェクトにはコントローラーが1つあります。それ以上のものを作成する必要があるかどうか、またはいつ新しいコントローラーを作成する必要があるかがわかりません。新しいコントローラーが必要な場合と、新しいモデルが必要な場合を正確に判断するにはどうすればよいですか?

役に立ちましたか?

解決

まず、リソース指向アーキテクチャをご覧になることをお勧めします。これは、コードの整理方法に関する直接的なガイドラインを提供するものではありません。ただし、リソースの観点から考えると、新しいコントローラーを作成するかどうかを決定する際の方が簡単です。システム内のリソースを特定できたら、通常はモデルとそのためのコントローラーを作成することをお勧めします。ただし、これは単なる経験則です。

追加のポイント:

  • リソースを探して、それぞれのモデルとコントローラーを作成します(経験則)
  • 存続しないリソースのモデルを作成することを恐れないでください
  • コントローラーを<!> quot;配管<!> quot;と考えてください。または<!> quot; wiring <!> quot;ユーザーのビジネスドメインへの移行-ユーザーのリクエストを処理し、回答をユーザーに返送することがその役割です-できるだけ薄くしてください

他のヒント

ルールの目安は次のとおりです。新しい種類の<!> quot; item <!> quot;を識別すると、その私のアプリ。管理する必要があるので、自分に次の質問をします:

(1)これらの種類のアイテムは永続的ですか?

(2)このアイテムには多くのインスタンスがありますか?

両方の質問に対する答えが肯定的である場合、上記の項目はモデル(またはMVCフレームワークの用語に応じてモデル要素またはドメインクラス)であると結論付けます。新しいモデル要素を定義するとき、作成、取得、更新、削除の4つの基本操作をサポートするコントローラーも定義します(フレームワークがデフォルトのコントローラーを生成できる可能性が高い)。

Martin Fowlerの「Patterns of Enterprise Application Architecture」のコピーを入手したい場合があります。 Webプレゼンテーションのセクションでは、MVCフレームワークの現在の波のように、フロントコントローラー駆動のフレームワークを使用するときにコードを構造化する方法について詳しく説明しています。

明確に定義された機能または機能セットを備えた小さなコントローラーが好きです。これは通常、ページ(または同様のページのセット)ごとに1つのコントローラーを意味します。私のKohanaサイトでは、 CSSMySite について、ブログ、連絡先、CSS、および投稿コントローラーについて知っています。

aboutコントローラは、テンプレートを設定するだけです。 ブログコントローラーはブログモデルと対話して、データベースからの複数の投稿を一覧表示します。投稿コントローラーはブログモデルと対話して、データベースから1つの投稿を表示します。

永続的なデータ(ブログ投稿)または複数回使用されるデータ(ドロップダウンボックスの状態のリスト)がある場合は常に、そのデータがモデルに入ります。モデルはさまざまなコントローラーからアクセスできるため、モデルからコントローラーへの1対1のマッピングである必要はありません。

おそらく、優れたMVCプログラミングを学ぶ良い方法は、Ruby-on-Railsで時間を過ごすことです。私はしばらく前にレールを使用し始めましたが、間接的な結果として、現在MVCを非常によく理解していると思います。私はレールをMVCの縮図と考えています。少なくとも、MVCを学ぶのは楽しい方法かもしれません...どう思う?

Kohanaアプリで行っていることの例を次に示します。

「最新ニュース」セクションが必要なため、「ニュース」というタイトルのコントローラー、モデル、ビューを設定しました。

ニュースコントローラーにメソッドindex()feed()、およびmedia_releases()がありました。

私のモデルは、MySQLデータベースからニュースデータを取得するdbクエリで構成されていました。

そして、私のビューは<?php echo $title; ?>などを含む多くのHTMLです。

グローバルにデータベースのメタデータを変更する汎用システムを定義できない理由はありますか?一般に、単純なデータにアクセスして表示するためのコードを記述することは、不必要な冗長性です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top