答えはそれに依存します。
OOPでは、カプセル化と抽象化を促進するためにクラス(インスタンス化されるときはオブジェクト)が使用されます。詳細はSO postを参照してください。
抽象は、クラス階層(IS-A
Bの関係)とクラス組成物(B HAS-A
関係)を介して実証される共通の特徴をオブジェクト考えです。
カプセル化は、共通の状態とその相互作用が、よく定義された入力と出力を持つ単一の単位(またはクラス)と見なされるべきであるというアイデアです。
OOPは、プログラマーが簡単にコーディングできるようにするためのものです。これは、プログラム内でのやりとりを見極めようとする精神的なオーバーヘッドを減らし、目に見えてきれいで理解しやすいコードになります。
ケーススタディ
あなたの場合、あなたはのはPlayerProfileManager
それを呼びましょう、プレーヤーのプロファイルの作成を処理するクラスを持っています。カプセル化によれば、プレーヤプロファイルの作成に直接関係するすべての動作(すなわちメソッド)は、PlayerProfileManager
にあるはずです。
抽象化を見ると、物事は面白くなります。
PlayerProfileManager
プレーヤープロファイルを作成し、その情報をどこかに保存します。プレーヤーのプロファイルのすべてのデータを保持するPlayerProfile
クラスを作成してから、PlayerProfileManager
にPlayerProfile
オブジェクトのコレクションを内部的に格納することは意味があります。管理しているプロファイルと呼んでください。
PlayerProfileManager は、HAS- PlayerProfile
をあなたはすべて取得し、プロファイルデータとプロファイルオブジェクト内のデータ管理ストアの設定を行うには上司との対話します。
他のタイプのプロファイルはありますか?
もしそうなら、任意のプロファイルに必要なすべてのプロファイル情報を持つProfile
クラスが必要かもしれません。次にPlayerProfile
はProfile
から継承し、すべてのプレーヤ固有のデータを追加します。
PlayerProfile はプロフィール
-され、その後、あなたは一般的なプロファイルデータを管理するための一般的な方法を持っているProfileManager
クラスをしたいことがあります。
PlayerProfileManager は、IS-のProfileManager
今、私たちは、polymorphismのOOPの主要な技術を活用することができます。 すべてのプロファイルデータで何かをしたい場合は、すべてがProfile
クラスから継承されているため、多態性を使って非常にうまくいくようにすることができます。詳細はリンクを参照してください。
ただし、の抽象化は、コードがで動作しやすくなった場合にのみ意味を持ちます。 1つのタイプのプロファイルしか持たず、1つのタイプしか持たない計画がある場合は、余分なレイヤーを追加するのは意味がありません。
結論
コードがきれいで、そして一緒に属しているものが一緒に(separation of concernsに関連する)ある限り、何も正しい答えはありません。
さまざまなレベルの抽象化を使って、あまりにも少なすぎるという利点や落とし穴を理解することをお勧めします。
クラスアプローチを使用する場合は、それらのプロセスにさらに多くの機能を追加できると思います。 –
実際のコードをhttp://codereview.stackexchange.comに投稿すると、正しい方向に向けることができます – bphilipnyc
良いデザインに関心を持つ開発者は、ディレクトリが乱雑になる心配はありません。 (ただし、何かを別のオブジェクトに分割してもデザインが改善されるわけではないことも知っています)実際のコードを見ることなくあなたのケースで最適かどうかはわかりません。 – ajb