2009-04-25 4 views
1

Prenons par exemple:Logique de domaine partagé?

CreateOrderTicket(ByVal items As List(Of OrderItems)) As String 

Où placeriez-vous ce genre de logique donnée:

CreateOrder should generate a simple list (i.e. Item Name - Item Price) 
PizzaOrderItem 
SaladBarOrderItem 
BarOrderItem 

Recommanderiez-vous: refactorisation commun à une classe abstraite/interface avec des propriétés partagées une méthode appelée de CreateOrderTicket

Ou,

Création d'un service commun qui expose un CreateOrderTicket

Nous ne voulons pas évidemment trois méthodes de createOrderTicket, mais l'ajout de méthodes, héritant, la surcharge et l'utilisation de médicaments génériques sembler un coût élevé juste extraient un comportement ..

On suppose pour l'amour d'un exemple simple (actuellement) il n'y a pas de classe de base OrderItem ou d'interface ..

Aide !! :)

p.s. Existe-t-il un moyen de surcharger sans forcer tous les objets hérités à utiliser le même nom?

Répondre

1

La classe de base abstraite semble être la meilleure option dans cette situation. Bien sûr, tout dépend du type de comportement partagé de ces objets. Sans en savoir plus, je suppose que tous ces éléments de commande ont un nom et un prix par exemple - et à l'avenir, vous pourriez ajouter des choses plus courantes. Sans une classe de base partagée qui contient les propriétés Name et Price, vous aurez probablement des problèmes pour implémenter une méthode CreateOrderTicket qui prend une liste contenant plus d'une sorte de commandes.

Je ne pense pas non plus que l'héritage d'une classe de base abstraite serait aussi coûteux que techniquement les objets dérivent déjà de la classe de base Object. (Bien que je ne pense pas que cela soit complètement égal à une classe de base personnalisée.)

VB.Net peut implémenter des méthodes à partir d'une interface utilisant un nom différent de celui spécifié dans l'interface mais ne pense pas que la même chose pour une fonctionnalité abstraite prioritaire.

+0

Oui, c'était ma première pensée mais j'ai tendance à ne pas tenir compte des classes de base et à préférer les interfaces. Mais pour avoir une fonction partagée, il n'y a pas d'autre moyen de le faire que je puisse voir. BaseClass .. surcharge ou envelopper propriétés protégées (pour différents noms) "Logic Service" ... encore besoin de comprendre quels sont les paramètres entrant ont encore besoin d'une interface d'abstraction ou BaseClass. J'espérais que les autres auraient une façon de décider quand une approche est la meilleure et quand il est correct d'avoir un baseclass (puisque vous ne pouvez en avoir qu'un.) – 5x1llz

+0

oh et je devrais ajouter la raison de la surcharge et l'ajout de génériques est de sorte que vous n'est pas seulement limité à l'interface lors de l'appel de cette classe depuis n'importe quel endroit autre que la fonction partagée. Pour éviter une distribution .. il semblait juste beaucoup à faire pour partager une fonction à travers plusieurs classes – 5x1llz