Railsアプリケーションのコントローラ

コントローラーの目的は、モデルを操作してビューを更新するアクションを提供することですか? 1つのモデルには、それを操作するメソッドを提供するコントローラが1つだけありますか?または、1つのコントローラに複数のモデルのメソッドがありますか?

私が見つけたすべての記事は、コントローラーが「ここではビジネスロジックを置く」という意味であり、複数のコントローラーに分割するとき、それが何であるか、それが属するものではありません。

誰か説明していただけますか?

1
しかし、ビジネスロジックは実際にコントローラに属していません。
追加された 著者 Dave Newton,

2 答え

コントローラはビ​​ューとモデルをバインドするアクションを提供し、プレゼンテーションロジック/アプリケーションロジックを含むビジネスロジックを含むべきではありません。一般に、MVCはビュー - 組織化アーキテクチャのパターンであり、ビジネスロジックレイヤー/データアクセスレイヤー/サービスレイヤーなどの組織化のためのさまざまなパターン/アプローチがあります(これはMVCの用語では隠れたモデルです) 。

MVCパターンは、モデルをどのように整理するかを教えてくれません。モデルにはビジネスロジックを含める必要があるだけです。このため、モデルとコントローラの間に1対1の関係を構築する必要はありませんが、実際にはシステム設計とアプリケーションロジックに依存します。

更新

モデルには、知識の領域(ビジネスロジック)に常に当てはまるロジックが含まれ、コントローラには、アプリケーションの一部(アプリケーションロジック、プレゼンテーションロジック)に固有のロジックが含まれます。コントローラは通常、ユーザー入力を解析し、モデルメソッドを呼び出し、結果を準備してViewに渡します。コントローラは薄くする必要があります。モデル内のすべてのビジネスロジックを使用すると、将来容易に再利用できます。

2
追加された
だから、ユーザーの代わりに管理者として質問モデルを保存する場合は、コントローラーではないことをモデル責任者に知らせることですか?コントローラはこのメソッドを呼び出すだけですか?
追加された 著者 LuckyLuke,
では、ビジネスロジックとアプリケーションロジックの違いは何ですか?私は彼らは同じだったが
追加された 著者 LuckyLuke,
遅刻して申し訳ありません。私はあなたの答えを受け入れますが、モデルとコントローラの間に1対1の関係がある必要はないということはどういう意味ですか?コントローラーは、基本的に、モデルとビューをバインドしてそのロジックを含むコードですが、ビジネスに属するすべてのロジックはモデルに含まれている必要がありますか?
追加された 著者 LuckyLuke,
@Pjotr​​、私は私の一般的なロジック分離アプローチの明確化と私の質問を更新しました。あなたの質問に関して、私はユーザーの役割を決定すると思います - モデル責任、ユーザー情報の保存 - モデル責任。ユーザーと質問を結びつける - 知識のアプリケーション分野に依存します。それはモデル責任であるかもしれませんが、コントローラ責任(アプリケーションロジック)である可能性があります。
追加された 著者 Aliaksei Kliuchnikau,
@Pjotr​​、これらの用語の違いはやや抽象的で、通常は分けるのが難しいです。アプリケーションとビジネスロジックについては、この良い答えを参照してください。あなたの例では、「質問」はビジネスドメイン概念の Q&A であり、「ウェブサイト管理者」はアプリケーション固有の用語です。
追加された 著者 Aliaksei Kliuchnikau,
@Pjotr​​、1対1の関係で、私はコントローラが単一のModelクラス(Create-Read-Update-Deleteロジック)で動作する状況を意味しました。コントローラーはいくつかの異なるModelクラスで動作すると言いたいと思っていました。
追加された 著者 Aliaksei Kliuchnikau,

コントローラーの目的は、モデルを操作してビューを更新するアクションを提供することですか?

はい

1つのモデルに、それを操作するメソッドを提供するコントローラが1つだけありますか?

必ずしも

または、1つのコントローラに複数のモデルのメソッドがありますか?

They may, but again, 必ずしも

私が見つけたすべての記事は、コントローラーが「ここにビジネスロジックを置いている」という意味であり、複数のコントローラーに分割するとき、それが何であるか、それが属するものではありません。

固くて速い規則はありません。あなたの方法を小さくし、あなたの行動に対する懸念の範囲を制限する。アクションが必ず複数のモデルに触れる必要があるときがあります。誰もこれをいつ行うべきかについての絶対的なルールを与えることはできません。特にそのような一般的なケースでは特にそうです。

要するに、それは文脈とあなたが何をしようとしているかに完全に依存します。

0
追加された