1

標準の行/列タイプの出力で分散データを組み立てるシステムを設計しています。

各列は次のことができます。

  • 独立したシステムに存在します。
  • ページネーションできます。
  • 並べ替え可能。
  • 各列には数百万行を含めることができます。

そしてシステム:

  • さまざまな列のさまざまなテーブルを出力できるように、拡張可能である必要があります。
  • 最終的なドメイン オブジェクトは既知です (行)。
  • キーは、すべてのシステムで一定です。

私の現在の実装計画は、列ごとに 2 つのクラス (または 2 つのインターフェイスを実装する 1 つのクラス列) を設計することです。インターフェイスは次のようになります。

  1. ページネーションとソートを実装します。
  2. 「飾り」を実装

これは、テーブル コンストラクターが現在の並べ替え列とページに関する情報を受け取るという考え方です。次に、テーブルの適切なキーのリストを返します。この情報は、ドメイン オブジェクト行のリストを作成するために使用されます。このリストは、各列の情報を順番に追加できるように、各列の「ガーニッシング」実装に順番に渡されます。

私の質問は、どの設計パターンが推奨されるか、または共通キーと可変列を使用して分散データを組み立てるために使用する代替設計決定であると思います。

4

1 に答える 1

0

あなたがやろうとしていることを完全に理解したかどうかはわかりませんが、私が収集したことから、後で構造化されたテーブルを作成できるように、任意のデータの行を保存したいと考えています。この場合 (Java を使用していると仮定して) 私がすることColumnは、「値」プロパティだけを持つ非常に単純なインターフェイスを作成することです。

public interface Column {
    String value;
}

次に、次を実装して列を作成できますColumn

public class Key implements Column {
    String value = new String();

    public Key(String keyValue){
        this.value = keyValue;
    }
}

DataRowそのため、オブジェクトに実際のデータが含まれるクラス(または好きなもの) を作成できます。たとえば、データを追加できるようにするメソッドをそのクラスに含めることができます。

public class DataRow {

    List<Column> data = new ArrayList<Column>();

    public DataRow(String key){
        this.setColumn(new Key(key));
    }

    public void setColumn(Column columnData) {
        this.data.add(columnData);
    }

    public Column getColumn(Class column){
        for(Column c : this.data){
            if(c.getClass().equals(column)){
                return c;
            }
        }
        return null;
    }

}

setColumn()ご覧のとおり、新しいColumnオブジェクトを指定してメソッドを呼び出すことができます。これにより、任意のタイプの任意のデータをDataRowオブジェクトに追加できます。List次に、いくつかのテーブルを作成するために、 ofDataRowsおよびof クラスを受け取る関数を使用できます。この関数は、List指定された行からのデータを持つオブジェクトのみを返します。

public List<DataRow> createTable(List<DataRow> data, List<Class<? extends Column>> columns){
    List<DataRow> table = new ArrayList<DataRow>();
    for(DataRow row : data){
        DataRow ret = new DataRow(row.getColumn(Key.class).value);
        for(Class column : columns){
            if(row.getColumn(column.getClass()) != null )ret.setColumn(row.getColumn(column.getClass()));
        }
        table.add(ret);
    }
    return table;
}

これにより、データを使用してテーブルを「作成」し、テーブルに含める列を作成できます。

このコードはアイデアを伝えるために書いたものであり、現時点ではかなり雑然としていることに注意してください。しかし、これが少しでもあなたの役に立てば幸いです。

于 2012-06-03T21:15:03.713 に答える