web-dev-qa-db-ja.com

MVCS-モデルビューコントローラーストア

私は最近、iOS開発の学習を開始することを決定しました。このため、これまで読んでいました iOSプログラミング:ビッグナードランチガイド 。この本では、著者は設計パターンMVCS-Model-View-Controller-Storeについて説明しています。基本的な考え方は、多くのアプリケーションがリクエストを維持する複数の外部データソースを利用するためです。コントローラのロジックは非常に複雑になる可能性がありますが、代わりに、すべてのリクエストロジックをコントローラから別のオブジェクトに移動することを作成者は提案しています。

要するに、本を引用する

Model-View-Controller-Storeはリクエストロジックを別のオブジェクトに入れ、このオブジェクトをストアと呼びます(図28.4)。ストアオブジェクトを使用すると、冗長なコードが最小限に抑えられ、データをフェッチして保存するコードが簡素化されます。最も重要なことは、外部ソースを処理するためのロジックを明確で焦点を絞った整然としたクラスに移動することです。これにより、コードが理解しやすくなり、保守とデバッグが容易になり、チームの他のプログラマーと共有できます。

そして

非同期ストアの優れた点は、多くのオブジェクトが要求を処理するために多くの作業を行っているにもかかわらず、要求のフローとその応答がコントローラー内の1つの場所にあることです。これにより、読みやすく、変更も容易なコードの利点が得られます。

このパターンの詳細を知り、他の人がそれについて何を言わなければならないかを確認したかったのですが、オンラインで検索したときに見つけた唯一の参照は、その同じ本でした(パターンはおそらく他の名前で知られていますか?)。

私には著者のロジックは理にかなっているようで、通常のMVCパターンの論理的な拡張のように見えますが、おそらくそれは実際にMVCパターンの経験があまりないためです(iOS開発への進出は別として、 backbone.js を使用した一種のMVV(つまり、 MVCと考える場合 ))。

[〜#〜] mvcs [〜#〜]パターンに明らかな欠陥/問題があるかどうかについて、より経験のある誰かがいくつかの光を当てることができることを望んでいました行方不明です。

36
Jack

「ストア」は、MVCS設計パターンの場合、ストレージロジックに傾く傾向があります。 iOSの場合、これは通常Core Dataの実装です。 XcodeでCore Data-backedテンプレートを作成すると、このデザインパターンの「Store」の側面がAppDelegateクラスに隠れているのがわかります。

これを次のレベルに上げるために、Core Dataスタックの設定を処理し、スタックに関連するすべてのフェッチ/保存を処理するシングルトンマネージャークラスを作成することがよくあります。あなたが述べた引用が言うように、これはそれらのメソッドを呼び出すだけでなく、必要に応じてそれらを調整することを非常に簡単にします。

ただし、「ストア」パラダイムはコアデータに限定されません。あなたの店は単なるウェブサービスかもしれません。おそらく、Facebook、Twitter、Yelp、またはその他のRESTベースのAPIとやり取りするクラスがあると思います。私はこれらの種類のクラスにもManagerという名前が付いていることを発見しました(同様に傾向を追っています)。彼らは文字通りすべての内部の詳細を管理しているため、他のクラスは必要なものを正確に出し入れできます。

このデザインパターンの明らかな欠陥または問題に関する限り...他のデザインパターンと同様に、最も重大な問題は、パラダイムに即した方法でプロジェクトを設定したことを確認することです。特に、初めてのデザインパターンでは、これが最も難しい場合があります。 「ストア」ロジックを独自のクラスに分割することの利点は、コードの保守性がはるかに容易になるという事実です。

18
jmstone

このコンテキストでの「ストア」は Repository または Service のように聞こえます。その場合、これは非常に一般的なパターンです。 欠陥/問題は、実装と問題のドメインによって異なります。

一般的なレベルでは、本は「ストア」を使用して、ビジネスロジックのレベル+アプリケーションの一部であるかどうかに関係なく一連のデータを処理するデータ取得ロジックのレベルを表すようです。

たとえば、Twitter APIを「ストア」にラップすることは、そのロジックを区分するための良い方法です。

さらに考えてみてください
このMVCの定義 (かなり適切だと思います)を使用すると、「ストア」は実際にはモデルのサブセットです。それがMVCの拡張であるのか、それともデータ検索パターンであるのかを区別することは、あまり役に立ちません。最終的には同じコードのように見えます。

結論として、私はあなたが彼らが提案するアドバイスに従って大丈夫だと思います(全体的に聞こえそうです)。

18
Zachary Yates