Нужна помощь в реализации интерфейсов - PullRequest
1 голос
/ 08 июля 2011

в моем приложении я хочу сделать свои интерфейсы более общими. В настоящее время у меня есть две модели, 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);

Мне просто нужно руководство о том, как создать более общий интерфейс, который я могу использовать. Причина этого в том, что мне нужен только один набор видов для каждой модели. То есть только один вид добавления, обновления и удаления, который будет вызывать методы либо из модели Campaign, либо из модели Strings. Если у вас есть идеи, как это сделать, я был бы признателен.

Спасибо, Стюарт.

1 Ответ

2 голосов
/ 08 июля 2011

Если вы посмотрите на код, вы увидите, что, по крайней мере, в функциях, которые вы предоставили, что между двумя предложениями есть тип параметров. Общий подход заключается в определении базового типа для каждой общей группы, поэтому здесь псевдокод :

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);
...

}

Просто чтобы дать вам представление, мне сложно написать что-то действительно конкретное, потому что это зависит от вашей реализации.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...