我一直在使用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>
所以我怎样才能使这个工作?
答案 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类型,那么很多行代码: - )