Modèle De Conception: Le Générateur De
J'ai regardé pour un bonne exemple de Générateur de modèle (en C#), mais n'en trouvez pas, soit parce que je ne comprends pas le Générateur de modèle ou je suis en train de faire quelque chose qui n'a jamais été prévu. Par exemple, si j'ai un résumé de l'automobile et de l'abrégé du générateur de méthodes pour créer des pièces de voiture, je devrais être en mesure d'envoyer toutes les 30 de mes choix pour le Directeur, il faut la construire les pièces dont j'ai besoin, puis de construire mon automobile. Quelle que soit la voiture, camion, semi, etc. produit, je devrais être capable de "drive", exactement de la même manière.
Premier problème est la plupart des exemples dans le code des valeurs de propriété dans les pièces en béton, ce qui je pense vraiment que doit provenir d'une base de données. Je pensais que l'idée était d'envoyer mes choix pour le Directeur (à partir d'une source de données) et le générateur de créer un produit personnalisé basé sur mes données.
Deuxième problème est que je veux le constructeur méthodes pour créer les pièces puis les affecter à un produit, de ne pas passer des chaînes de caractères, mais réel fortement typé pièces du produit.
Par exemple, je veux créer un formulaire à la volée par le fait d'avoir un Générateur de fabrication des champs de formulaire pour moi, y compris une étiquette, une section d'entrée, validation, etc. De cette façon, je peux lire l'objet de mon ORM, découvrez les métadonnées de l'objet, la transmettre à mon Constructeur et ajouter le contrôle utilisateur nouvellement créé suite à mon formulaire web.
Cependant, chaque Constructeur exemple je trouve qu'a codé en dur de données au lieu de les passer au choix dans le code principal pour le Constructeur et coup de pied un produit sur-mesure. Tout semble être un cas statique déclaration. Par exemple, si j'ai trois paramètres avec 10 choix de chacun, je ne veux pas construire 30 béton Générateur de méthodes, je veux créer juste assez pour de la fabrication, les propriétés de mon produit, ce qui peut n'être que trois.
Je suis tenté d'avoir le Directeur existent dans le code principal seulement. Il devrait y avoir un moyen de déterminer automatiquement le béton générateur de méthode à appeler similaire pour le polymorphisme et les surcharges de méthode (bien que c'est un très mauvais exemple) au lieu d'utiliser une instruction de cas dans le modèle. (Chaque fois que j'ai besoin d'ajouter un nouveau type de produit, j'ai besoin de modifier l'actuel Directeur, qui est mauvaise).
- peut-être, ce qui est manquant dans le générateur de modèle, est que les objets sont détruits à la fin, donc je suggère d'ajouter plus tard si vous avez unsterstood le modèle...
- Pas vraiment ce que vous voulez, mais de vérifier ces articles:<br> le modèle de description<br> c# de mise en œuvre de l'échantillon<br> Espérons que cette aide.
Vous devez vous connecter pour publier un commentaire.
Je vais vous référer à l'exemple en C# dans l'Article de Wikipédia ici.
Dans ce cas, vous avez de la classe de mise en œuvre de PizzaBuilder qui sait comment faire pour récupérer des données à partir d'une base de données. Vous pouvez le faire de plusieurs façons.
Serait de faire un HawaiianPizzaBuilder. Lorsque la classe initialise les requêtes de la base de données pour une Pizza Hawaïenne et récupère la ligne. Puis, quand les diverses Construire(x) méthodes sont appelées elle permettrait de définir les propriétés pour le champ correspondant de l'extrait de la base de données de ligne.
Un autre serait tout simplement un PizzaDatabaseBuilder et assurez-vous que lors de l'initialisation de la classe de passer l'ID de la ligne vous avez besoin pour ce type de pizza. Par exemple, au lieu de
Vous utilisez
Ne devrait pas être un problème. Ce que vous avez besoin est d'une autre Usine Constructeur/modèle type pour initialiser les champs de la Pizza. Par exemple
au lieu de
vous ferais quelque chose comme
ou
DoughBuilder pouvez aller à une autre table dans votre base de données afin de remplir correctement une PizzaDough Classe.
Principalement à l'appel d'un BuilderPattern ressemble à ceci:
Je n'ai jamais pensé de cette façon, mais LINQ (le dessin, pas la syntaxe) est en fait un générateur de droit?
C'est une interface fluide qui permet de créer une requête et peut créer des requêtes dans les différentes représentations (SQL, en mémoire de l'objet de requêtes, webservice requêtes, Bart de Smet a même écrit une mise en œuvre de Linq-to-Excel).
Je dirais que vous ne pouvez pas éviter l'une de ces - avoir quelques surcharges pour vos pièces et d'avoir un cas/si l'instruction quelque part en bas de la pile. Également avoir à modifier votre code lors de l'ajout d'une nouvelle classe pourrait être votre seule option.
Cela étant dit, vous pouvez obtenir de l'aide avec certains autres modèles - à savoir l'Usine qui pourrait vous aider dans le processus de construction. Aussi l'utilisation sensée de polymorphisme (par exemple, toutes les régions héritent du type de l'être de la classe ou de l'interface) peut réduire le montant de l'ifs/cas et les surcharges.
Espère que cette aide.