2012-06-03 6 views
1

Я разрабатываю систему, которая собирает данные, находящиеся в стандартном столбце/столбце.Дизайн шаблона для сборки несвязанных данных?

Каждый столбец может:

  • существуют в независимой системе.
  • Может быть разбит на страницы.
  • Можно сортировать.
  • Каждый столбец может содержать миллионы строк.

И система:

  • должен быть расширяемым столь разные таблицы различных столбцов могут быть выведены.
  • Конечный объект домена известен (строка).
  • Ключ постоянный во всех системах.

Мой текущий план внедрения состоит в том, чтобы спроектировать два класса для каждого столбца (или один классный столбец, который реализует два интерфейса). Интерфейсы будут:

  1. Реализовать разбиение на страницы и сортировку.
  2. Реализовать «гарнир»

Идея заключается в том, что конструктор таблицы будет получать информацию о текущем столбце сортировки и странице. Затем будет возвращен список соответствующих ключей для таблицы. Эта информация будет использоваться для создания списка строк объекта домена, которые затем будут переданы поочередно в каждую из реализаций «украшений» столбцов, чтобы каждая информация о столбцах могла быть добавлена ​​по очереди.

Я предполагаю, что мой вопрос: какие шаблоны проектирования будут рекомендованы - или альтернативные решения по дизайну будут использоваться людьми для сбора несвязанных данных с помощью общих ключей и переменных столбцов.

+0

Не могли бы вы быть более конкретными в отношении того, что это за диспергированные данные? Возможно, дайте два примера: по одному от каждой «системы», чтобы сделать себя более ясными. – Hassan

+0

Шаблон должен быть независимым от системы. Идея заключается в том, что не имеет значения, какая система исходит из того, что у вас есть общий ключ, который работает во всех системах, что в конечном итоге используется для связывания данных. –

+0

Когда вы говорите: «Каждый столбец может содержать миллионы строк», вы имеете в виду, что данные будут содержаться в этих «столбчатых» объектах? – Hassan

ответ

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 из DataRows, и 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; 
} 

Это позволит вы должны «создавать» таблицы с использованием своих данных и столбцы, которые вы хотите включить в таблицу.

Обратите внимание, что я написал этот код, чтобы передать идею, и что на данный момент это довольно грязно. Но я надеюсь, что это поможет вам немного.

+0

Это хорошо, потому что он очень гибкий. Но это не касается построения этих данных. Я предполагаю, что шаблон выбирает столбец для разбивки на страницы и сортирует по которому возвращается набор ключей, который затем передается другим столбцам, чтобы украсить их данными. Я предполагаю, что окончательный синтаксис должен быть такого: новый AccountTableBuilder() .paginate (ScoreColumn) .garnish (AddressColumn) .garnish (JobTitleColumn) .garnish (OpenIdColumn); –

+0

Этот способ можно было бы также сделать. Поскольку вы попросили альтернативные проекты, я предложил этот. Причина, по которой я это написал, состоит в том, что я считаю, что это несколько проще. Что касается построения данных, если версия производственного качества вышеприведенного кода существует, вы можете создавать данные просто путем создания нового объекта DataRow и вызова 'setColumn()' на нем столько раз, сколько захотите. Это ты имел в виду? – Hassan

Смежные вопросы