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对象添加任何您喜欢的任何类型的数据。然后,要制作一些表,您可以有一个函数,该函数采用 a ListofDataRows和 a Listof 类,然后仅返回具有指定行中的数据的对象:

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 回答