Является ли прокси-класс тем же, что и оболочка класса? - PullRequest
3 голосов
/ 19 июля 2011

У меня есть доступ к устаревшей базе данных, в которой есть «общие» таблицы, и у меня нет прав на ее изменение.В зависимости от данных клиента, с которыми я работаю, отношения между таблицами могут отличаться.Таким образом, customerA может присоединиться к таблице заказов только по номеру клиента, а CustomerB может присоединиться к таблице заказов по номеру клиента и дате.CustomerC может вообще не присоединяться к таблице заказов, но к другой таблице.

Итак, я хотел бы создать граф объектов для CustomerA и один для CustomerB и один для CustomerC.Я думал о создании класса-обертки для каждого, но изучал прокси.Тем не менее, примеры, написанные о классах Proxy, делают их похожими на класс-оболочку.Таким образом, мой вопрос, являются ли прокси-классы синонимами классов-оболочек.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 19 июля 2011

Нет, они не одинаковы.Взгляните на Шаблон прокси и Шаблон оболочки в Википедии.

По сути, прокси - это объект, который выглядит так же, как и исходный объект (т.е. реализует тот жеинтерфейсы), но делает что-то большее.

Оболочка - это объект, который выглядит не так, как исходный объект, но обычно делает то же самое.

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

Существует несколько способов решения проблемы.

Одним из них является сопоставление с общей моделью предметной области.Это отлично работает, если у вас одинаковое базовое поведение, но может не очень хорошо вам помочь в деталях (разные ключи для разных типов клиентов).

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

Теперь шаблоны.Прокси-шаблон - это шаблон, в котором новый объект может обеспечивать некоторое поведение и состояние другого объекта, но не является объектом.Думайте об этом, как о том, что означает человек, голосующий за вас в качестве доверенного лица, а затем связывайте это с программным обеспечением.Я бы не думал об этом как обертке, поскольку обертка обычно используется для представления лица, отличного от базового объекта.Это может быть связано с необходимостью скрыть что-либо в нижележащем объекте или добавить дополнительное поведение поверх объекта.Шаблон прокси не поможет с различными ключами;Возможно с оберткой, хотя я не уверен, что это самый простой способ сделать это.

1 голос
/ 19 июля 2011

Из википедии: «Прокси-сервер в его наиболее общем виде - это класс, функционирующий как интерфейс к чему-то другому»

ProxyPattern

Прокси: - это «интерфейс», это «черный ящик», если хотите, из которого вы запрашиваете что-то и возвращает вам то, что вы хотите.

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

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

Привет.

0 голосов
/ 19 июля 2011

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

Прокси-объект - это объект, который ведет себя как реальный объект, но это не так. Вместо этого он перенаправляет все вызовы на реальный объект, скрывая сложность доступа к удаленному объекту. Примером прокси-объектов являются клиенты WCF, созданные Visual Studio. Клиент вызывает их так, как если бы они были настоящим сервисным кодом, а прокси-сервер обрабатывает связь.

Оболочка - это объект, который по какой-то причине скрывает другой объект. Обычно это делается, когда интерфейсы не совместимы. Объект с правильной функциональностью, но с неверным интерфейсом, оборачивается другим объектом, который переводит интерфейс.

...