我已经开始了一个小项目来正确地教自己一些事情:域驱动开发和控制反转是适用于这种情况的。
我决定编写一个可以加载和可视化体育赛事时间数据的应用程序(我可以访问很多这类数据)。
一个要求是我希望能够从许多不同的数据源中进行选择,其中一些是事件的完整细节(事件后生成的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方法,在实时源的情况下,这将是长时间运行的,并且会在发生时放入一圈时间,完整的数据源将只是快速填充模型尽可能。
但是前端可以立即访问race对象,并且可以绑定到它的事件。将race对象传递给load方法是否更好,以便事先可以设置事件?
我只想知道这个设计是否合适。它对我来说有点奇怪,我不确定它是不是因为它是新的。我也可能在思考整件事。
答案 0 :(得分:1)
我认为我通过编写一些“派生”类来编程,但不必担心基类。然后我会重构以删除重复。这样,在我使用派生类之前,我不会推测基类。
除此之外,我还要确保为所有这些类的消费者提供了工作代码,以确保消费者需要了解消费数据的程度。例如,消费者是否需要知道负载是否完整?他们是否需要找到一个“好点”来显示可能仍在加载的数据?如果消费者不需要任何这些信息,那么加载过程就会成为“派生”类的实现细节,而不是他们需要公开公开的内容。