Re: Паттерн "Стратегия" или что-то другое
От: Trean Беларусь http://axamit.com/
Дата: 18.06.06 09:22
Оценка: 2 (1) +1
Здравствуйте, Bdud, Вы писали:

B>Доброго времени суток.

B>Возникла следующая задача и я не знаю, как её наиболее элегантно решить.
B>Постановка задачи. Сейчас я работаю с некоторым SDK (условно назовём его SDK A), который реализован ввиде com объектов. Возникла необходимость работать с SDK B, реализующим тот же самый функционал, что и SDK A, но выполнен он просто ввиде api функций. Выбор между использованием того или иного SDK выполняется в runtime'е, причём этот выбор довольно дорогостоящий т.е. определить его лучше всего один раз.
B>Возможные решения.
B>1. Можно реализовать wrapper над com классом и набором функций и передавать дополнительный параметр при инициализации, который определяет какой из SDK использовать (определить глобально). Минус данного подхода — много изменений в существующем коде.
B>2. Можно попробовать исползовать какой-нибудь агрегирующий объект, который будет хранить такую переменную, и уже через него будет предоставляться вызов того или иного метода или функции. Минус решения — тот же, что и у первого способа, плюс выглядит как-то монолитно.
B>Подскажите пожалуйста наиболее элегантный вариант решения данной проблемы.

Если я правильно понял то, что выше написано, то сначала по-любому надо привести оба SDK к одному программному интерфейсу, то есть написать wrapper с делегацией методов соответствующему SDK, интерфейс wrapper должен быть одинаковый. Далее можно создать фабрику, которая в зависимости от настроек при ее создании вернет ссылку на wrapper того или другого SDK, это будет прозрачно для приложения.
У меня была похожая но более сложная задача, обеспечить возможность тонкой настройки библиотеки, т.е. для каждого интерфейса обеспечить выбор конкретной реализации в runtime, я решил это через Inverse Of Control (IoC), советую почитать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.