2013-06-02 2 views
0

У меня проблема. Я использую VSTO C# и используя объект MailItem и объект AppointmentItem. В настоящее время у меня есть классы для каждого из них, которые по существу одинаковы. Единственное различие заключается в том, что класс MailItem использует объект MailItem в своей логике и то же самое касается AppointmentItem.Различные типы объектов, но требуют такой же логики

Я хочу как-то «объединить» эти классы, поэтому мне нужно только поддерживать один код. Вот несколько вариантов, я пытался:

  • Я пытался использовать перегрузку, но она по-прежнему приводит к двум функциям, так это более или менее тот же сценарий ранее.

    Я попытался создать единственный метод с «динамическим» параметром, но он привел к синтаксическим ошибкам при использовании Linq.

    Наконец, я попытался использовать var, но безрезультатно, так как мне нужно объявить его внутри оператора if-else и его объем застрял там.

Есть ли у кого-нибудь какие-либо рекомендации, если это возможно?

Заранее благодарен!

ответ

0

Бывают случаи, когда язык из-за строгих правил ввода требует отдельных реализаций алгоритма. Лучшее, что вы можете сделать в этих случаях, - объявить в вашей документации, что дизайн алгоритма один и тот же, и убедитесь, что в будущем этот параллелизм будет сохранен.

Однако в мире рефакторинга обычный суперкласс не единственный способ сделать это. Я настоятельно рекомендую работу Мартина Фаулера: http://refactoring.com/.

Вы не сказали, на каком языке вы это реализуете, поэтому я предполагаю, что это статически типизированный, а не что-то вроде Smalltalk. Вы можете рассмотреть шаблон посетителя, но это может быть излишним только для двух классов. Также может работать шаблон делегата или шаблон прокси.

Я нашел полезную страницу сравнения для прокси-сервера, Фасада и адаптера: http://www.netobjectivestest.com/PatternRepository/index.php?title=AdapterVersusProxyVersusFacadePatternComparison

+0

Спасибо за это, я использую C#. – Water

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