1

私は、通常の MVC の考え方でかなりの量の (Web) 開発を行ってきました。

ただし、フロントエンドがサービスとしてサーバー側の機能にアクセスする必要があるように、アプリケーションを分割する必要があります。

私はサービスを作成しているので、サービスをコントローラーと考えて、モデル内の関数を呼び出すことができると考えました。

それはそれを行う良い方法ですか?

ありがとうございました

PS: 問題のサーバー側のテクノロジは PHP であり、クライアント側は Adob​​e Flex (ActionScript) です。

4

2 に答える 2

4

さまざまなアプローチがありますが、どれも間違っているとは言えません。あなたの現在のアプローチは何だろうと思います。そして、それを変更したくなるような制限は何ですか。

あなたが提案しているように見えるアプローチは、モデル(「重いバックエンドリフティング」を行う別名PHPコード)とビュー(別名フレックスフロントエンド)の間に立つファサードを作成することです。継承の問題はありません。特に、すべての重労働/ビジネスロジックを含むバックエンドがすでに実装されている場合。このファサードレイヤーをサービスレイヤーと見なし、モデルの一部と見なします。コントローラの一部ではありません。

Flexと一部のバックエンドの間にModel-View-Controller-Services(MVCS)アーキテクチャを作成しようとする場合。私は一般的にこのようにします:

ビューはFlexコンポーネントとして実装されます。

ControllerはActionScriptクラスとして実装されています。私の見解では、コントローラーの主な目的は、サーバーへの要求とデータをビューにシャッフルすることです。

サービスレイヤーはサーバーに実装されています。あなたの場合はPHP。サーバー側にあるサービスごとに、Flexに並列サービスクラスがある可能性があります。

モデルレイヤーには、関連するビジネスロジックを実行するためのクラスがあります。データを検証してデータベースに保存し、データベースからデータを取得するため、およびその他の必要なビジネスロジック。多くの場合、モデルの一部として、値オブジェクトクラスがあります。値オブジェクトクラスは、ActionScriptで並列化されることが多く、サーバー側サービスとクライアント側コントローラー間のデータ転送に使用されます。

したがって、次のように機能します。

  1. ユーザーがビューを操作します
  2. ビューはイベントをコントローラーにディスパッチします
  3. コントローラはサーバー上のサービスにリモート呼び出しを行います
  4. サービスはモデルを呼び出してデータを取得します
  5. モデルはリクエストを取得し、適切なアクションを実行し、値オブジェクト(または値オブジェクトの配列)を作成して、それをサービスに返します
  6. サービスは結果をクライアント側のコントローラーに返します
  7. コントローラはビ​​ューを更新するために何かをします

このプロセスを支援するためのフレームワークはたくさんあります。特に、アプリケーションのレイヤー間の「カプセル化された」通信の場合はそうです。

多くの場合; 「モデルに何を入れるべきか/ビューに何を入れるべきか」の間の線がぼやけています。Flex(またはAJAX、Silverlight、または任意のスマートクライアント)アプリケーションを開発しているとき、多くの場合、スマートビューが必要です。そのため、一部のビジネスロジックはビューの一部として実装される場合があります。それはいいです; アプリの機能と「理想的な」抽象化ケースのバランスをとる必要があります。

あなたの質問は少し広範でしたが、これがお役に立てば幸いです。私は個人的に、自分のアプリケーションアーキテクチャについて実用的であることを好みます。私のサービスクラスは、データ解析などのビジネスロジックを実行することがあります。それはアプリとその目標、クライアントと時間枠に依存します。

于 2011-05-25T01:17:09.497 に答える
1

サービスからのデータを、それを使用したいアプリケーションに返す前に処理することを目的としている場合は、サービスのデコレータークラスを作成することを検討してください。

ここに、投稿を取得するサービスで私が何を意味するかを示す小さな図があります: (私は画像を投稿することを許可されていないようなので、ImageShackに置きます。)

PostService クラスは RemoteObject のインスタンスを保持し、基本的にはリモート (php) サービスのクライアント側スタブです。ResultEvent または FaultEvent を onResult または onFault 関数に返します。

これで、同じインターフェースを実装するデコレーター クラスを作成できます。PostServiceDecorator という名前を付けましたが、具体的にどのような処理を行っているかがわかる名前を付けたほうがよいでしょう。このクラスは、PostService のインスタンスを保持します。PostService は、PostServiceDecorator によって引数として渡された関数に ResultEvent を渡します。後者は、そのイベントを処理し、ポスト オブジェクトの ArrayCollection を、指定された onResult 関数に渡すことができます。

このようにして、物事を分離しておくことができます。PostService は生データを取得するだけで、装飾しなくてもそのまま使用できます。

ただし、私が認識している注意点が 1 つあります。これは、適切な意味でのデコレーター パターンではありません。コード内で PostService を 1 つの PostServiceDecorator に置き換えることはできないためです。それらは異なるオブジェクトをコールバックに渡すため、それらを置き換えるとコード壊れます。インターフェイスは、両方のクラスのすべてのメソッドを実装することを強制するだけです。

于 2011-05-25T09:07:00.393 に答える