C#如何在应用程序中存储解析数据?

时间:2016-08-25 20:49:19

标签: c# database

这是一个相当笼统的问题,但它与整体应用程序设计有关。我正在尝试创建遵循类设计标准的应用程序,而我正在努力解决一个方面,即如何在内部存储信息。

例如,我可以为包含几个字段的电影创建一个类:

  • 标题
  • 导演

因此,当我解析包含此元数据的xml文件时,我会将它们加载到公共列表中。我不确定这是否是正确的方法?由于List是一个对象的实例,它可能不属于定义Movie的类吗?

它是公共列表,可以在应用程序的其他部分使用。

在应用程序活动期间,我没有看到任何解析xml文件的问题。访问像SQLite这样的数据库也是如此。

我看了Singleton的设计,我不确定这是不是一个正确的方法?另外,基于我查看的Singleton样本,我不知道我是否可以定义之前提到过的字段。

所以,我的问题是。如何处理扫描文件夹中的元数据或文件路径?您在申请表中将这些信息保存在哪里?

谢谢

2 个答案:

答案 0 :(得分:1)

解析XML文件的类不应该存储结果。如果该类解析电影列表,它应该只返回一个IEnumerable<Movie>,然后该类的调用者可以将结果存储在任何地方。

答案 1 :(得分:0)

这是一个相当普遍的问题,根据你的NFRs,有很多方法可以做到这一点。以下是一种非常基本的方法,应与许多方法向前兼容。

  1. 将主程序范围内的列表声明为IList<Movie>

  2. 编写一个实现IList(例如class MovieList:IList<Movie>)的类,该类公开您需要的数据。如果你愿意,它可以缓存它。它不必。现在,请写下simplest code that could work

  3. 稍后,在主程序中,您可以更改IList的声明以使用IoC容器来实例化IList(例如_myList = Container.Resolve<IList<Movie>>。这样您就可以替换不同的数据提供者,或者替换为单元测试的模拟提供者。

  4. 稍后,您可以更改MovieList的实现以包含缓存,或将数据存储在数据库中,或者您想要的任何内容。或者,您可以在新类中完全重写它,并将IoC容器的配置更改为指向新类。你会有各种各样的选择。 (缓存或不缓存的决定最终将取决于NFR,如存储容量,性能和并发性/ ACID

  5. 重点是记下你的程序真正需要的内容,并担心以后何时何地存储内容的详细信息。

    我认为简单地将整个列表存储在一个全局变量中而不进行某种抽象化是不太好的。