最近、私はエレガントに解決する方法がわからない再発性の設計問題に苦労してきました。明示的なデータ構造と明示的なデータ構造
私はいくつかのプレイヤーといくつかの接続された作品をプレイしています。一緒にこれらの作品は、半複雑なコレクションや構造を形成します。今私は2つの方法で、この構造を実現することができます。作品そのものIEのポインタを介し暗黙的構造を保存する次のいずれか
class BigPiece extends Piece {
Piece opposingPiece, nextPiece, previousPiece, index;
}
または私はコレクションクラスでは、この構造を実装し、集中情報を保つことができる:
class SomeCollection<Collection<Piece>> {
SomeOtherCollection<Collection<Piece>> collection
= new SomeOtherCollection<Collection<Piece>>();
public SomeCollection() {
collection.add(new PieceCollection<Piece>();
collection.add(new PieceCollection<Piece>();
collection.add(new PieceCollection<Piece>();
}
public Piece getPiece(int playerIndex, int pieceIndex) {
collection.get(playerIndex).get(pieceIndex);
}
public Piece getOpposingPiece(int playerIndex, int pieceIndex) {
int nextPlayerIndex = collection.listIterator(playerIndex).nextIndex();
return this.collection.get(nextPlayerIndex).get(pieceIndex);
}
}
私は通常第2のものを好んでいますが、それはちょうど私の勇気に基づいており、私はクラスのデザインでそれほど多くの経験はありません。私は両方の面で賛否両論を見ることができます。
私が通常最初に解決する問題は、実際にオブジェクトを一緒にリンクするビルダーまたはファクトリで関連付けを作成する必要があることです。これは私にとって非常に頑強ではないようです。誰がアプリケーションの生涯を通してポインタが実際に正しいのか、私を安心させることができますか?
第2のソリューションは、データをより集中管理します。これは本当に上位のクラスを愚かにする(個々の小片など)。私が通常この問題を抱えているのは、このコレクションをトラバースしたいときはいつでも、それをある程度下げる必要があるということです。あなたは作品を聞くことはできませんねえねえ、相手の作品は何ですか?いいえ、ゲームオブジェクトを取得してコレクションへのポインタを取得する必要があります。そこで、相手の作品が何であるかを尋ねます。これは、あなたのアプリケーション(メソッド連鎖=()メソッドを最終的に実装するために、メソッドchaining =()のデータを収集する、より管理的なクラスを作成します)
確かに、個々の作品もありますが、それは重複した情報しかないので、それは良いアイデアかどうかはわかりません。