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

C#如何在应用程序中存储解析数据?,c#,database,C#,Database,这是一个相当普遍的问题,但它涉及到整个应用程序设计。我正在尝试创建一个遵循类设计标准的应用程序,我正在努力解决一个问题,那就是如何在内部存储信息 例如,我可以为具有两个字段的电影创建一个类: 头衔 年 导演 因此,当我解析包含此元数据的xml文件时,我会将它们加载到公共列表中。我不确定这是不是一个正确的方法?因为列表是一个对象的实例,所以它可能不属于定义电影的类 这是一个公开列表,它将在应用程序的其他部分提供 我看不到在应用程序活动期间多次解析xml文件的任何意义。访问数据库(如SQLite

这是一个相当普遍的问题,但它涉及到整个应用程序设计。我正在尝试创建一个遵循类设计标准的应用程序,我正在努力解决一个问题,那就是如何在内部存储信息

例如,我可以为具有两个字段的电影创建一个类:

  • 头衔
  • 导演
因此,当我解析包含此元数据的xml文件时,我会将它们加载到公共列表中。我不确定这是不是一个正确的方法?因为列表是一个对象的实例,所以它可能不属于定义电影的类

这是一个公开列表,它将在应用程序的其他部分提供

我看不到在应用程序活动期间多次解析xml文件的任何意义。访问数据库(如SQLite)也是如此

我看过单例设计,我不确定这是否是一个正确的方法?另外,基于我查看的单例示例,我不知道是否可以定义我前面提到的字段

所以,我的问题是。如何处理扫描文件夹中的元数据或文件路径?您将这些信息保存在应用程序中的什么位置


谢谢

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

这是一个相当普遍的问题,根据您的需要,有很多方法可以实现。下面是一个非常基本的方法,它应该与许多方法向前兼容

  • 将主程序范围内的列表声明为
    IList

  • 编写一个实现IList的类(例如,
    classmovielist:IList
    ),该类公开所需的数据。如果你愿意,它可以缓存它。没必要。现在,写一篇文章

  • 稍后,在主程序中,您可以更改IList的声明,以使用IoC容器来实例化IList(例如,
    \u myList=container.Resolve
    。这样您可以替换不同的数据提供程序,或者替换模拟提供程序进行单元测试

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

  • 关键是要写下你的程序真正需要什么,并担心以后在哪里和什么时候存储东西的细节


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

    在适当的地方。不清楚你的问题是什么,只是你想得太难。原型化。依赖注入,但不要将OOD视为唯一的路径或任何编程范例r、 “在初学者的心目中,有很多可能性,在专家的心目中,可能性很少。”当涉及到艺术时,始终是初学者,包括但不限于应用程序设计。我还想用几句话来扩展singleton模式,它对OOD有效,因为在现实世界中,我们必须去一些地方获取信息(例如,人力资源部获取我们的保险信息)但是它被滥用了,就像你永远听不到的
    goto
    一样。我会看看MVVM或MVC等MV*模式。@Will也许我想得太多了。但是我想知道其他人对这种常见情况做了什么。@Philip Rollins我没有想到MVVM和MVC。我会看看它们。谢谢我这么认为。Class它只是一个对象的蓝图,所以在执行publicstaticvoidmain()的过程中,其他方法基本上可以使用这个列表非常有帮助。谢谢。我已经完成了我应用程序的大部分部分,但这是我第一次尝试使用类来完成。我以前使用全局变量来实现这一目的。不幸的是,当您开始使用OOP时,有些事情还不太清楚。再次感谢您!