Асинхронная загрузка доменной модели - PullRequest
0 голосов
/ 09 марта 2009

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

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

Одним из требований является то, что я хочу иметь возможность выбирать из ряда различных источников данных, некоторые из которых являются полными деталями события (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, который заполняет домен, в случае действующего источника он будет работать долго и будет увеличивать время прохождения круга, поскольку полный источник данных просто заполнит модель так быстро как может.

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

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

1 Ответ

1 голос
/ 09 марта 2009

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

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

...