代码之家  ›  专栏  ›  技术社区  ›  Jack Ryan

异步加载域模型

  •  0
  • Jack Ryan  · 技术社区  · 17 年前

    我已经开始了一个小项目来适当地自学一些东西:领域驱动的开发和控制反转就是适用于这种情况的。

    我决定编写一个应用程序,可以加载和可视化体育赛事的计时数据(我可以访问大量此类数据)。

    一个要求是,我希望能够从许多不同的数据源中进行选择,其中一些是事件的完整细节(事件发生后生成的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方法中,以便提前设置事件?

    我只是想知道这个设计是否合适。我觉得有点奇怪,我不确定这是否只是因为它是新的。我也可能想得太多了。

    1 回复  |  直到 17 年前
        1
  •  1
  •   John Saunders    17 年前

    我想我应该通过编写几个“派生”类来编程,但不必担心基类。然后我将重构以消除重复。这样,在使用派生类之前,我就不会猜测基类了。

    除其他事项外,我会确保我为所有这些类的消费者都提供了工作代码,以确保消费者需要了解有关所消费数据的多少信息。例如,消费者是否需要知道负载是否完成?他们是否需要找到一个“好点”来显示可能仍在加载的数据?如果消费者不需要这些信息,那么加载过程将成为“派生”类的实现细节,而不是他们需要公开的内容。