这种访问数据的设计会如何

本文关键字:访问 数据 | 更新日期: 2023-09-27 18:29:57

我需要实现一个名为Foo的类,其中我需要通过数据访问GetSave

我可以想象我需要类,一个是从XmlFile访问、获取和保存数据,另一个是通过类似查询(GetFooById, GetFooByLevel,…)返回对象的服务,这是我的第一个。这就是为什么我想澄清这个设计以及我需要分离的东西。

这种访问数据的设计会如何

我认为您使用存储库模式是正确的。你可以做一些类似的事情

public interface IFooRepository
{
   void Save(Foo);
   Foo GetById(int id);
   Foo GetByLevel(int level) 
}
 public class FooXmlRepository:IFooRepository
  {
       //implementation
   }
  IFooRepository repo= new FooXmlRepository(); //or via your favorite DI container

通过这种方式,Foo对象被存储问题解耦。稍后,如果您想使用db而不是xml,只需编写另一个实现即可。该应用程序将使用该界面,因此您不必更改"repo"的分配之外的任何其他内容。

通常,如果您要连接数据库,我会使用一个存储库来存储所有相关的存储库
在XML的情况下-我认为您已经这样做了-
XML加载/保存可以作为Foo的一部分,例如static Foo Parse(string)string ToXML()或类似的东西。这可以让你有一个更"流畅"的加载/保存(如果你有更多的对象层次结构等,XML通常是这样的-对于Db/关系数据,事情更"扁平",然后加载/保存实际上是迭代记录。对于XML,更多的是通过节点等遍历层次结构)。或者你可以分离成一个扩展类,例如Get(this Foo, string xml)
在我看来,我认为xml获取/保存更像是一种序列化(但取决于您的对象、层次结构和整体结构)
然后,您可以在查询之前构建一个存储库
如果您的"Foo"在未来不再或可能不再使用XML,那么就分开。