2011-07-08 7 views
1

インターフェイスを実装するのに手助けが必要です私のインターフェイスをより一般的にしたいと思っています。それは私が二つのモデル、CampaignModelとStringModelを持って立っているように、これらのは、同じメソッドを使用しますが、その中の異なる引数の両方すなわち私のアプリケーションで

CampaignModel:

void GetAll(EventHandler<GetAllCampaignsCompletedEventArgs> eh); 
void GetAllByName(string name, EventHandler<GetCampaignCompletedEventArgs> eh); 
void GetAllByID(long id, EventHandler<GetAllCampaignsByIDCompletedEventArgs> eh); 
void Add(Campaign entity, EventHandler<CreateCampaignCompletedEventArgs> eh); 
void Update(Campaign entity, EventHandler<UpdateCampaignCompletedEventArgs> eh); 
void Delete(Campaign entity, EventHandler<DeleteCampaignCompletedEventArgs> eh); 

がStringsModel:

void GetAll(EventHandler<GetAllCampaignStringsCompletedEventArgs> eh); 
void GetAllByName(string name, EventHandler<GetCampaignStringByIdentifierCompletedEventArgs> eh); 
void GetAllByID(long id, EventHandler<EventArgs> eh); 
void Add(CampString entity, EventHandler<EventArgs> eh); 
void Update(CampString entity, EventHandler<EventArgs> eh); 
void Delete(CampString entity, EventHandler<EventArgs> eh); 

私はちょうど午前私が使うことができるより汎用的なインターフェースを作成する方法については、方向性が必要です。この理由は、キャンペーンモデルまたはストリングモデルのいずれかからメソッドを呼び出すAdd、UpdateおよびDeleteビューが1つだけ、各モデル.i.eに対して1つのビューセットが必要なためです。あなたがこれを行う方法を知っていれば、私はそれを感謝します。

ありがとう、 スチュアート。

+0

だから、あなたは基本的に2つの(おそらくは将来の)モデルのための1つのインターフェースを持っていたいと思いますか? – ub1k

+0

はい、ただし、メソッドシグネチャのパラメータが異なります。 – stuartmclark

+1

異なるパラメータを使って異なるタイプを意味する場合、 'Tigran'の答えは継承を使って問題をかなりカバーします。彼のソリューション 'BaseCampaign:IBase'に注目してください。 – ub1k

答えて

2

コードを見ると、少なくとも提供した機能では、2つのクラス間の変更はタイプののパレメーターです。ここでの一般的なアプローチは、そうここで、すべての一般的なグループのための基本型を定義することである擬似コードある:

public interface IBase { 
void GetAllByName(string name, EventHandler<BaseEventArg > eh); 
... 

}

このdefin インタフェース又は AbstractClass

public class GetCampaignCompletedEventArgs : BaseEventArg {} 
public class GetCampaignStringByIdentifierCompletedEventArgs: BaseEventArg {} 
... 
... 
public class Campaign : BaseCampaign {} 
public class CampString: BaseCampaign {} 

ちょうどyuorのアイデアを与えるために、私は難しい、実際に具体的な文章を書くことは、原因はyuorのimplementaitonに依存します。

これが役に立ちます。

+0

この問題は、メソッドに含まれるEventArgsがWCF Webサービスから取得され、プロキシで生成されるため、これらのイベントコントロールをあまり制御できないという問題があります。 – stuartmclark

+0

@sturtmclark:この場合は変更することはできませんが、自分自身を変更することができます:)これらのクラスをFacadeクラスに取り込むことを意味します。あなたのメソッドはあなたのFacadeクラスを処理します。タイプ。 – Tigran

+0

さて、ありがとう、私はそれを行くつもりです! – stuartmclark

関連する問題