2009-03-09 4 views
0

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

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

Одним из требований является то, что я хочу, чтобы иметь возможность выбирать из нескольких источников данных, некоторые из которых являются полной информацией о событии (CSV, созданных после события), а некоторые из них являются источниками живых данных.

У меня возникла проблема с проектированием процесса, который загружает эти данные в домен, чтобы его можно было легко использовать как для синхронной, так и для асинхронной загрузки.

Я предполагаю, что мне нужен абстрактный класс, из которого берутся все Источники данных. Этот класс должен быть в состоянии установить себя вверх (получить путь к файлу данных, или адрес сервера живого источника данных), и я предполагаю, что это должно выглядеть примерно так:

protected abstract void Setup(); 
protected abstract void LoadData(Race race); 

public Race Load() 
{ 
    Race race = new Race(); 
    Thread t = new Thread(new ParameterizedThreadStart(LoadData)); 
    t.Start(race); 
    return race; 
} 

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

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

Однако передняя часть будет иметь непосредственный доступ к объекту гонки и может привязываться к его событиям. Лучше ли передавать объект гонки в метод загрузки, чтобы события могли быть установлены заранее?

Я просто хочу знать, выглядит ли этот дизайн в порядке. Мне кажется, что это немного странно, и я не уверен, что это просто потому, что это ново. Я тоже могу подумать обо всем этом.

ответ

1

Я думаю, что я запрограммировал это, написав пару «производных» классов, но не беспокоясь о базовом классе. Затем я бы реорганизовал, чтобы удалить дублирование. Таким образом, я бы не стал размышлять о базовом классе, прежде чем у меня были рабочие производные классы.

Помимо прочего, я хотел бы убедиться, что у меня есть рабочий код для потребителей всех этих классов, чтобы убедиться, что потребители должны знать о потребляемых данных. Например, должны ли потребители знать, завершена ли загрузка? Нужно ли им находить «хорошую точку» для отображения данных, которые могут по-прежнему загружаться? Если потребители не нуждаются в какой-либо информации, тогда процесс загрузки становится деталью реализации «производных» классов, а не тем, что им необходимо публиковать публично.