OOD: order.fill (склад) -или- warehouse.fill (заказ) - PullRequest
1 голос
/ 21 октября 2011

какая форма является правильной ОО-конструкцией?
"Вопрос вкуса" - это посредственный легкий выход.
Любые хорошие материалы на эту тему читаются?
Я хочу убедительные доказательства тем или иным способом.

РЕДАКТИРОВАТЬ: Я знаю, какой ответ является правильным (подмигивание!).Что я действительно хочу, так это увидеть любые аргументы в поддержку прежней формы (order.fill(warehouse)).

Ответы [ 2 ]

0 голосов
/ 22 октября 2011

В простейшем виде склад является местом хранения инвентаря.
Но было бы также правильно рассматривать склад как объект, состоящий из складских помещений, личных, отгрузочных доков и т. Д. Если вы предполагаете такой вид склада, то было бы уместно сказать, что со склада (как объекта) можно взимать плату. с заполнением заказов или в развернутом виде:

складское помещение способно собрать груз в соответствии с заданной спецификацией (заказом)

выше является обоснованием (если не доказательством) для: warehouse.fill(order); формы. Обратите внимание, что эта форма по существу эквивалентна рекомендациям SingleShot и themel. Хитрость заключается в том, чтобы объединить shippingPlanner (полномочия по выполнению заказов) и склад (складские запасы). Проще говоря, в моем примере склад представляет собой состав order fulfillment authority и inventory storage space, а в SingleShot эти два представлены отдельно. Это означает, что если такая консолидация является (или становится) неприемлемой (например, из-за сложности деталей), то склад можно разложить на эти два подкомпонента.

Я не могу найти обоснование для назначения операции fill для объекта order.

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

эй, заказ! склад там. делай свое дело и получай самореализацию. - не имеет смысла для меня.

0 голосов
/ 22 октября 2011

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

Однако, вот мое мнение на основе вашей информации:

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

В реальном мире и программном обеспечении что-то будет посредником между ними.@themel указал то же самое в комментарии к вашему вопросу, хотя я предпочитаю что-то менее звучащее в шаблонах программирования.Возможно, что-то вроде:

ShippingPlan plan = shippingPlanner.fill(order).from(warehouses).ship();

Однако это дело вкуса: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...