5

私の問題は、MVC (PHP) フレームワークを使用しようとしていることです。多くの議論の後、MVC は非常に優れていると思いますが、再利用可能なモデル (アプリケーション) ロジックを作成する可能性がありません。そのため、ソフトウェアを MVC フレームワークに実装するための正しいアプローチがあるかどうかはわかりません。

最初に、現在使用している非 MVC の oo アプローチについて説明します。

たとえば、私たちはいくつかのブラウザ ゲームに取り組んでいます (そう、それが私たちの職業です)。プレーヤー オブジェクトがあるとします。このプレーヤー オブジェクトは頻繁に使用します。考えを購入できるいくつかの異なるページがあるため、プレーヤーの「銀行口座」で「お金」の取引を行うか、他のプレーヤーと戦うことができると想像してください。いくつかの戦闘スクリプトがあり、これらのスクリプトは 2 つ以上のプレイヤー オブジェクトを必要とします (戦闘の種類、つまりクラン戦、プレイヤー対プレイヤー戦などによって異なります)。

したがって、異なる戦闘ロジックを持ついくつかのページ (およびコントローラー) があります。ただし、この各コントローラーは、プレイヤー オブジェクトを使用して、プレイヤーが持つすべての属性とアイテム、およびプレイヤーが与えるダメージと防御を計算します。

では、MVC モデルの場合、プレーヤー オブジェクトでロジックを再利用するにはどうすればよいでしょうか? 必要なすべてのロジックをさまざまなファイト コントローラーとモデルで複製するのはよくありません。

「gold-transaction」ロジックは、より詳細な情報を提供する良い例だと思います。戦いの場合にはトランザクション関数が必要です。他のプレイヤーに勝って彼の金の一部を略奪する場合は、何かを購入する場合にトランザクション関数が必要であり、金を使う場合にはトランザクション関数が必要です。プレイヤーズギルドに…

したがって、これらすべての関数を 1 つのプレーヤー モデルで定義するのは悪い方法だと思います。これらのプレーヤー モデルは非常に大きいと言えます (実際には、プレーヤー クラスが非常に大きいという問題があります。これは神のクラスです)。

この問題に対する MVC スタイルの解決策があると思いますか?

4

1 に答える 1

1

コードを最も意味のある場所に配置し、他の場所に複製する必要がない場所に配置すると言えます。

常に Player オブジェクトが必要であるが、異なる Controller で使用される可能性がある操作がある場合、Player クラスはそれを配置する論理的な場所になります。一方、特定の Controller のコンテキストで実行する必要があるロジックが少しだけあり、他のクラスが関与する可能性がある場合は、おそらくコントローラーまたは他のクラスにも含まれている必要があります。

ロジックをどこに置くべきかを理解するのに苦労している場合、おそらく関数が十分に細かく再利用可能ではないことが原因です。確かに、MVC には、懸念の分離と「単純な」OOP アプローチよりも物事を DRY に保つことについてもう少し考えることを強いる側面があります。関数が異なるクラスの複数の関数に分割され、適切な場所で適切なコードが取得されます。

たとえば、これらは特定の提案ではなく、ランダムに考えられる思考プロセスにすぎません。プレイヤー間で「ゴールド」を移動するプロセスは、より細かいプロセスに分割する必要があるかもしれません。プレーヤー クラスは、残高を変更する基本的なタスクを実行する場合がありますが、コントローラーは、ゴールドが転送されている相手とその理由を確認するなど、プロセスの特定の部分を実行する場合があります。

于 2010-10-08T16:29:36.133 に答える