Подходы к абстрактному проектированию классов, которые допускают реализации граничных методов с альтернативными аргументами - PullRequest
1 голос
/ 04 января 2012

У меня есть абстрактный класс, как определено здесь:

public abstract class BaseClientService<T>
    where T : ISubsetInfo
{
    abstract T Extract(Superset superset);
}

Это хорошо работает для всех моих реализаций, но теперь я столкнулся с реализацией, для корректной работы которой требуется дополнительный аргумент.

например

T Extract(Superset superset, int id)    

Я пытаюсь найти самое элегантное решение, поэтому стараюсь не включать второй аргумент как обнуляемый или необязательный, но я не уверен, стоит ли оно усилий ...

Я также хотел бы обернуть аргументы в объекте и включить в него идентификатор для граничного регистра, но я думаю, что это делает его более сложным, когда я пытаюсь сделать его проще.

Важным ограничением для меня является то, что у меня всегда есть один метод для вызова в абстрактном классе.

Ответы [ 2 ]

0 голосов
/ 19 января 2012

В конце концов, я решил использовать новый общий объект в своем проекте под названием «Требование», который будет использоваться для определения дополнительных требований к операции:

public abstract class BaseClientService<T, R>
where T : ISubsetInfo
      R : IRequirement
{
    abstract T Extract(R requirement);
}

Это решение очень похоже на предложение Диалектика, но я предпочитаю это, поскольку мое требование строго типизировано. Кто-то может поспорить о чрезмерном использовании Generics здесь, но теперь, когда он в моем проекте, он работает как шарм.

0 голосов
/ 04 января 2012
Функция

Extract не обязательно должна иметь дополнительные параметры, но затем ей нужно вызвать некоторую виртуальную функцию, которая при необходимости предоставит дополнительные данные, что-то вроде Object GetParameter(string parameterName). Производный класс должен реализовывать эту функцию, если этого требует ее функция Extract.

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