У покупателя 8 или 9 товаров, которые на 80% похожи. Какой это шаблон дизайна? - PullRequest
2 голосов
/ 22 октября 2010

Я знаком с книгой Head First (на самом деле, я думал, что она блестящая), хотя иногда она немного смущала меня из-за того, что шаблоны несколько перекрывались. Но прежде не пытался сесть и сопоставить шаблон из теории с требованиями реального мира.

Ну, теперь у нас есть требование, о котором я думаю, что мы должны думать с точки зрения шаблонов. Наш клиент продает несколько продуктов, все из которых настраиваются его клиентами. Для каждой продажи мы должны учитывать выбор клиента по ширине, высоте, цветам и кучу других технических вещей. В целом, все эти данные на 80% похожи, но они достаточно разные, чтобы усложнить задачу.

Это похоже на "классическое" требование, поэтому я думаю паттернов . Это ... э-э ... стратегия? Или, может быть, декоратор? Если нет, то по какой схеме?

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

Мы пытались однажды реализовать это, просто подклассифицировав продукты, и это стало грязным, и эта часть проекта была заброшена. Наше неумелое решение описывается в книге «Первая глава» как элементарная ошибка в первых пяти страницах.

Ответы [ 2 ]

2 голосов
/ 29 октября 2010

Если я правильно понимаю вопрос, у вас есть 8 или 9 отдельных продуктов, которые, как я полагаю, являются отдельными классами в некоторой иерархии классов.Основываясь на пользовательском вводе, вам необходимо применить определенную дополнительную логику к этим классам, такую ​​как вычисление себестоимости, влияние на комиссионные и т. Д.

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

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

Шаблон стратегии , кажется, соответствует вашей проблеменамного лучше.Когда пользователь выбирает другой способ расчета себестоимости, например, вы просто устанавливаете другую реализацию Стратегии ICostCalculator для объекта продукта, таким образом внося изменения во время выполнения в этот конкретный аспект поведения продукта.Мне кажется, это именно то, что вы ищете.

2 голосов
/ 22 октября 2010

Звучит так, как если бы шаблон декоратора был бы здесь полезен.

И да, я абсолютно ЛЮБИЛ книгу «Первая глава».Прочитав это, GoF понял меня полностью.

...