我一直在使用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>放进去,我怎么才能让它工作呢?
发布于 2009-08-12 13:07:02
SimpleRepository无法持久化抽象对象。但是我不能和ActiveRecord说话。
我相信你知道这一点,但是如果你确实使用了SimpleRepository,并且你希望得到一种类型的所有东西,你可以使用rep.All<Male>()。这就消除了你的工厂,我确信这个例子是你在真实世界中所做的简化,所以这可能不是你想要的。
发布于 2009-08-19 01:39:10
值得记住的是,反序列化抽象对象总是一件痛苦的事情,因为抽象类没有默认的构造函数;话虽如此,没有什么可以阻止你反序列化到一个具体的类,并从工厂返回接口/抽象类。
当您将数据持久化/检索到DB时,您只需通过具体的do对象执行此操作,并通过复制构造函数在工厂中实例化BO对象,并使其实现与DO对象相同的接口。但是,对于模式,您必须问一问您的代码得到了什么。
检索: DO --> Factory --> BO
存储: BO -->外观/控制器--> DO
DO和BO实现IYourObject接口,或者从YourObjectBase派生,它具有复制构造函数YourObjectBase(YourObjectBase源)。
如果你没有多个BO类型,会有很多代码行:-)
https://stackoverflow.com/questions/1260678
复制相似问题