2008-10-21 5 views
1

Сценарий:C# Generics/Design Patterns: Должен ли я использовать метод шаблона?

(Если кто-нибудь ответил/просмотреть мои вопросы в последнее время это будет несколько) познакомились

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

У меня есть интерфейс для Webservice, пусть он будет называться IService для этого вопроса. У меня есть 3 класса реализации Service1Impl, Service2Impl и Service3Impl. Каждый из этих ссылок ссылается на другой веб-сервис и использует мои вышеупомянутые общие методы для преобразования между соответствующими объектами.

Они впрыскивают в мой класс ServiceWrapper во время выполнения с помощью конструктора (завод используется для создания соответствии с характеристиками имеющейся реализации из ISerivice

например:

_service = ServiceWrapper.GetServiceWrapper("2"); 

даст мне ServiceWrapper инстанцированный с Service2Impl.

(Dammit диаграммы будет Хелла полезно!)

ИТАК каждой реализации IService имеет метод для сакэ аргументы .. GetProperties:

public IProperty[] GetProperties(string item, IProperty[] properties) 
{ 
    Property[] props = ServiceObjectFactory.CreateProperties<Property>(properties); 
    Property[] result = _service.GetProperties(item, props); 
    return ServiceObjectFactory.CreateProperties(result); 
} 

Это выглядит немного запутанным (я думаю, что я собираюсь реорганизовывать имена).

В основном то, что происходит это:

  1. Вызов этой функции из ServiceWrapper производится с посредническими объектами (IProperty) (как вы можете видеть из параметров).

  2. Объекты-посредники преобразуются в объекты недвижимости, которые являются специфическими для обслуживания.

  3. Результат возвращается как служебный объект недвижимости.

  4. Результат преобразуется в промежуточные объекты перед тем, как быть отправлен обратно в ServiceWrapper.

Теперь этот код будет точно таким же для Service1Impl, Service2Impl и Service3Impl. Кроме того, что используемые типы различны.

Может ли кто-нибудь подумать о способе сделать это, чтобы у меня не было того же кода 3 раза?

N.B: Это не относится ко всем методам в каждой реализации. Просто большинство из них.

ответ

1

Я думаю, что если вы хотите, чтобы ваш код имел разные типы подписей, вам придется писать код три раза. Поскольку типы разные, это вовсе не «тот же код».

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

+0

Это то, о чем я думал. Благодарю. – 2008-10-21 14:02:16

0

Я не уверен, подходит ли это вашему сценарию, но при чтении вашего вопроса Inversion of Control приходит мне на ум.

Смежные вопросы