SimpleRepository和抽象

时间:2009-08-11 14:20:41

标签: c# subsonic subsonic3

我一直在使用Sub Sonic 3.x.x.x而且我遇到了一些我需要帮助的东西。 我正在使用抽象类和工厂模式等... 这基本上就是问题所在:

public abstract class Person
{
}

public class Male : Person
{
}

public class Female : Person
{
}

....

如何让它发挥作用?

String personType = "male";
Type myType = GetPersonTypeFromFactory(personType);

SimpleRepository rep = new SimpleRepository();

var all = rep.All<...>().ToList();

我不能放rep.All<myType>所以我怎样才能使这个工作?

2 个答案:

答案 0 :(得分:0)

SimpleRepository不能持久化对象。但是我不能和ActiveRecord说话。

我确定你知道这一点,但是如果你确实使用了SimpleRepository,并且你想要获得所有类型,那么你可以rep.All<Male>()。这消除了你的工厂,我确信这个例子简化了你在现实世界中所做的事情,所以这可能不是你想要的。

答案 1 :(得分:0)

值得注意的是,反序列化抽象对象总是很麻烦,因为抽象类没有默认构造函数;话虽如此,没有什么可以阻止你对一个具体的类进行反序列化,并从你的工厂返回和接口/抽象类。
当您持久保存/检索数据到DB时,您只需通过具体的DO对象进行操作,并通过复制构造函数在工厂中实例化BO对象,并使其实现与DO对象相同的接口。但是一如既往的模式,你必须问你为代码得到了什么。

要检索: DO - &gt;工厂 - &gt; BO

待店: BO - &gt;外墙/控制器 - &gt; DO

DO和BO实现IYourObject接口,或者从YourObjectBase派生,它具有复制构造函数YourObjectBase(YourObjectBase src)。

如果你没有多种BO类型,那么很多行代码: - )