2009-08-11 8 views
0

J'ai utilisé Sub Sonic 3.x.x.x et je suis tombé sur quelque chose pour lequel j'ai besoin d'aide. J'utilise une classe abstraite et un modèle d'usine etc ... et c'est essentiellement le problème:SimpleRepository et abstraction

public abstract class Person 
{ 
} 

public class Male : Person 
{ 
} 

public class Female : Person 
{ 
} 

.... 

Comment puis-je obtenir que cela fonctionne?

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

SimpleRepository rep = new SimpleRepository(); 

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

Je ne peux pas mettre rep.All<myType> alors comment puis-je obtenir ce travail?

+0

Par curiosité, pourquoi votre résumé de classe Person? Je suis sûr qu'il y a une raison mais je ne peux pas le voir de votre code –

Répondre

0

Le composant SimpleRepository ne peut pas conserver les objets abstraits. Je ne peux pas parler à ActiveRecord cependant.

Je suis sûr que vous le savez, mais si vous avez utilisé SimpleRepository et que vous cherchez à obtenir tout d'un type que vous pourriez faire rep.All<Male>(). Cela élimine votre usine et je suis sûr que l'exemple est simplifié par rapport à ce que vous faites dans le monde réel, donc ce n'est probablement pas ce que vous voulez.

0

Il est utile de garder à l'esprit que la désérialisation des objets abstraits est toujours une douleur dans le cul comme les classes abstraites n'ont pas de constructeur par défaut; Cela dit, rien ne vous empêche de désérialiser une classe concrète, et de renvoyer une classe d'interface/abstraite de votre usine.
Lorsque vous persistez/récupérez des données dans la base de données, faites-le simplement via votre objet DO concret et instanciez votre objet BO en usine via un constructeur de copie et implémentez la même interface que l'objet DO. Mais comme toujours avec les modèles, vous devez demander ce que vous obtenez pour le code.

Pour récupérer: DO -> L'usine -> BO

Pour magasin: BO -> Façade/Contrôleur -> DO

DO et BO mettre en œuvre l'interface IYourObject, ou dérivent YourObjectBase, qui possède le constructeur de copie YourObjectBase (YourObjectBase src). Beaucoup de lignes de code si vous n'avez pas plusieurs types BO :-)

Questions connexes