2009-08-11 47 views
0

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

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

出于好奇为什么你的Person类是抽象的?我确定有一个原因,但是我无法从您的代码中看到它 – 2009-08-12 19:00:52

回答

0

SimpleRepository不能保存抽象的对象。但是我不能和ActiveRecord交谈。

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

0

值得注意的是,反序列化抽象对象总是痛苦的屁股,因为抽象类没有默认的构造函数;话说回来,没有什么能阻止你对具体类进行反序列化,并且从你的工厂返回并且接口/抽象类。
当您坚持/检索数据到数据库时,您只需通过具体的DO对象执行操作,并通过复制构造函数在工厂实例化BO对象,并使其与DO对象实现相同的接口。但是一如既往地使用模式,你得问问你为代码获得了什么。

要检索: DO - >厂 - > BO

来存储: BO - >外墙/控制器 - > DO

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

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