需要帮助实现接口

时间:2011-07-08 08:54:53

标签: c# generics mvvm interface

在我的应用程序中我想让我的界面更通用。目前我有两个模型,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视图将从Campaign Model或Strings Model调用方法。如果你有任何想法如何完成这件事,我将不胜感激。

谢谢, 斯图尔特。

1 个答案:

答案 0 :(得分:2)

如果查看代码,您可以看到,至少在您提供的功能中,两个分支之间的变化是类型的参数。这里常见的方法是为每个公共组定义一个Base类型,所以这里是伪代码

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

在此定义界面 AbstractClass

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

}

只是为了给你一个想法,我很难写出一些真正具体的东西,因为它取决于你的实施。

希望这有帮助。