ОО дизайн: если я объект, я должен создать себя, или вещь, которая будет использовать меня - PullRequest
0 голосов
/ 25 марта 2012

Вот вопрос о разработке программного обеспечения. Я приведу конкретный (но гипотетический) пример, который легко понять.

Представьте, что я создаю сайт ежедневных сделок. У меня есть два класса Deal и Merchant. В общем случае метод createDeal () должен относиться к классу Deal или Merchant?

Класс Deal - это Deal, поэтому имеет смысл быть там.

Торговец - тот, кто создает сделку, поэтому имеет смысл быть там.

Или может быть гибридный ответ, или, возможно, нет конкретного ответа.

Заранее спасибо за ваш вклад.

Ответы [ 3 ]

1 голос
/ 25 марта 2012

Это зависит от того, как вы решили заставить приложение работать.

Вы можете реализовать класс Deal для обслуживания своих экземпляров (например, Singleton, но здесь это не так), или у вас может быть метод внутри Merchant, который вызывает новый курс.

В псевдокоде я думаю, что ваш лучший подход должен выглядеть примерно так:

Class Merchant
  method offer_deal(var item, var discount)
    deal = new Deal();
    deal.item = item;
    deal.price = item.price * (1-discount);
    return deal;
  end_method

  ...

End_Class

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

1 голос
/ 25 марта 2012

Да, с реальной точки зрения было бы разумно, если бы Merchant создавало каждый Deal.

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

Обновление:

Существует еще один способ организовать это: вы можете создать экземпляры Deal за пределами Merchant, а затем addDeal для «пула» сделок продавца.

0 голосов
/ 25 марта 2012

Я думаю, что есть "имеет" отношения между "Deal" и "Marchent". Если я не ошибаюсь, у «Маршента» есть «Сделка». «Сделка» может быть единственного или множественного числа.

Мое предложение, вы должны держать его в "Marchent".

Но это полностью зависит от ваших требований и архитектуры.

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