2009-08-11 2 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 класс абстрактным? Я уверен, что есть причина, но я не вижу этого из вашего кода. –

ответ

0

Простой репозиторий не может сохранять объект абстрактным. Однако я не могу говорить с ActiveRecord.

Я уверен, что вы это знаете, но если вы использовали SimpleRepository, и вы хотите получить все один тип, вы можете сделать rep.All<Male>(). Это устраняет ваш завод, и я уверен, что пример упрощен от того, что вы делаете в реальном мире, поэтому это, вероятно, не то, что вы хотите.

0

Следует иметь в виду, что де-сериализация абстрактных объектов всегда является болью в заднице, поскольку абстрактные классы не имеют конструктора по умолчанию; сказав, что нет ничего, что помешало бы вам де-сериализовать конкретный класс, а также вернуть и интерфейс/абстрактный класс с вашего завода.
Когда вы сохраняете/извлекаете данные в БД, вы просто делаете это через свой конкретный объект DO и создаете экземпляр своего объекта BO на заводе-изготовителе через конструктор копирования и реализуете тот же интерфейс, что и объект DO. Но, как всегда, с шаблонами, вы должны спросить, что вы получаете за код.

Чтобы получить: DO -> Factory -> BO

Сохранение: BO -> Façade/Controller -> DO

DO и BO реализовать интерфейс IYourObject, или вывести из YourObjectBase, который имеет конструктор копирования YourObjectBase (YourObjectBase src).

Много строк кода, хотя, если вы не имеете несколько типов BO :-)

Смежные вопросы