我需要通过数据访问实现一个名为Foo的类,我需要Get
和Save
。
我可以想象我需要类,一个是从XmlFile访问,获取和保存数据,另一个是通过类似查询(GetFooById, GetFooByLevel
,...)返回对象的服务,这是我的第一个虽然。这就是为什么我要澄清这个设计以及需要分离的东西的原因。
答案 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 - 那就分开了。