1

オンラインビデオゲームである既存のシステムに適応できるクラスを選択することはできません。これが私が達成したいことです:

  • サーバー内のオブジェクトから一連の設定を取得します。
  • 接続するクライアントをリッスンします。
  • クライアントごとに、クライアントの設定がサーバーの設定と一致していることを確認します。
  • 設定が一致しない場合(何かが改ざんされている場合)、クライアントを切断するか、設定を変更します。

これは、エントリポイントとして機能し、コントローラの形式として機能できるクラスによって処理されます。

現在、設定は、プレーヤー、武器、旗、ライトなど、さまざまなインスタンスに散在しています。手続き型プログラミングでは、これらすべての情報を取得して配列に格納します。しかし、OOアプローチに従ってこれを行うためのより良い方法はありますか?これらの設定の値を持ち、ファサードの形式として機能する1つ以上のクラスを作成できますか?

4

1 に答える 1

1

設定データと動作を少なくとも 1 つのオブジェクト (つまりSettings) にカプセル化します。システムの構築方法に応じて、これはおそらく依存性注入を介して、または何らかのグローバル コンテキストから参照されて、他のオブジェクトの構成 (たとえばPlayer、など) の一部になります。クライアントとサーバー間の一致の検証を担当します (例: )。個々の設定を取得するという点では、明示的または暗黙的な 2 つのアプローチが考えられます。WeaponSettingsSettings.validateClientServerSettingsMatch()

明示的

オブジェクトSettings、またはその構成要素を構成する他のエンティティには、管理されている各設定のメソッドがあります。Settings.getPlayerSettings().getSomeSetting()つまり、「Settings.getSomePlayerSetting()」のようなものになる可能性があります。どのようにネストされるかは、システムによって異なります。どちらにも、クライアント開発で使用できる設定を明確にするという利点があり、Java などの言語を使用している場合はコンパイル時の型チェックが行われます。トレードオフとして、新しい設定が有効になるたびにオブジェクトを変更する必要があります。

暗黙

これには、オブジェクトにジェネリック メソッドがありSettingsます - Settings.getSetting(settingName)。これにより、Python や Ruby などの言語で何らかのメタ マジックを使用したり、Java で大規模な case ステートメントを使用したりしない限り、便利な型チェックを犠牲にして、設定を非常に簡単に追加できます。

于 2011-02-18T19:35:40.860 に答える