这个关于访问数据的设计怎么样?

时间:2012-04-03 14:52:12

标签: c# xml-serialization repository repository-pattern

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

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

3 个答案:

答案 0 :(得分:2)

我认为你在使用存储库模式的正确轨道上。 你可以做这样的事情

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”分配的任何其他内容。

答案 1 :(得分:1)

答案 2 :(得分:1)

一般情况下,如果您正在连接数据库,我会使用一个存储库来获取所有相关信息 在XML的情况下 - 我认为你有 -
XML加载/保存可以成为Foo的一部分 - 例如static Foo Parse(string)string ToXML()或类似内容。这允许你有一个更“流畅”的加载/保存(如果你有更多的对象层次结构等,这通常是XML的情况 - 使用Db /关系数据的东西更“平坦”然后加载/保存真的是关于迭代记录。在XML的情况下,通常更多的是通过节点等遍历层次结构。或者你可以分成一个扩展类 - 例如Get(this Foo, string xml)
在我看来,我认为xml get / save更像是序列化(但取决于你的对象,层次结构,整体结构)。
然后你可以建立一个存储库,然后查询它 如果你的'Foo'在将来没有或可能不会坚持使用XML - 那就分开了。