2009-12-09 9 views
0

Je travaille avec un service Web tiers qui expose une propriété de statut sur l'une de ses classes, mais cette propriété est en fait une autre classe elle-même. Alors que ce n'est pas une grande secousse, j'essaie d'utiliser ce service web plus facilement pour les autres développeurs de l'entreprise car le service web est abstrait et nous avons nos propres classes d'adaptateurs qui exposent seulement les propriétés/méthodes dont nous avons besoin et j'ai essayé de trouver un moyen qui me permettra de traiter l'objet d'état tout comme un ENUMclasses enum (ou quelque chose comme enum)

ce que je voudrais finir avec quelque chose commeobject.status = StatusAdapter.<value>

Avant que quelqu'un ne dit ' utilisez simplement une énumération 'la raison pour laquelle je n'utilise pas simplement une énumération est que les données d'état que l'objet de service Web représente c être ajouté à un utilisateur à tout moment, ce qui signifie que je devrais changer la bibliothèque de classes et redéployer toutes les applications qui l'utilisent.

Des idées?

Modifier Pour clarifier Je veux que les développeurs finaux pour pouvoir faire ce qui suit, le long des lignes d'un ENUM lorsque StatusAdapter n'est pas un ENUM, mais de manière dynamique, au moment de l'exécution.

If(foo.Status == StatusAdapter.NotStarted){...} 

Répondre

5

Utiliser l'interface. Cela devrait faire le travail.

Prenez par exemple, faire

public interface IStatus 
{ 
} 

public class SuccessStatus: IStatus 
{ 
} 

public class FailStatus: IStatus 
{ 
} 

dans votre classe, vous pouvez le faire:

public class CheckWebService 
{ 
    public IStatus Status 
    {get;set;} 

} 

Donc, toute personne utilisant votre classe peut faire facilement:

var checking = new CheckWebService(); 
    checking.Status=new SuccessStatus(); 

Ou définir leur propre status qui est hérité de IStatus et l'utiliser. De cette façon, vous n'avez pas besoin de redéployer votre code tout en permettant aux utilisateurs de définir leurs propres statuts.

+0

Les utilisateurs ne seront pas définir leurs propres statuts le code doit être capable de gérer la service web retournant des états précédemment inconnus, si je devais utiliser une interface je devrais encore changer la bibliothèque de classes et redployer. J'ai éditer ma question originale pour refléter cela. – Nathan

0

La seule façon serait d'avoir un certain nombre de propriétés sur StatusAdapter sont de type StatusAdapter et le retour des valeurs différentes de StatusAdapter

+0

Tim pouvez-vous fournir plus de détails sur cette approche? – Nathan