Простой ОО вопрос: Какой из этих классов должен владеть этой операцией? - PullRequest
1 голос
/ 23 июля 2011

Я работал над моделью класса UML и (как бы она ни был базов), я чувствую, что мне нужно проверить, правильно ли мое предположение.У меня есть два типа: администратор и местоположение.(Между двумя существует связь, в которой администратор может находиться в одном или нескольких местах).

Администратор должен назначить себя в местоположение.Должна ли эта операция присваиваться типу местоположения или типу администратора?В чем причина одного над другим?

Ответы [ 3 ]

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

На мой взгляд, Администратор будет тем классом, который имеет состояние и, следовательно, знает, где он находится.Местоположение является вводом данных и должно быть без сохранения состояния.

Следовательно, это администратор, в котором вы можете добавлять или удалять местоположения.

Т.е.типичный C #:

Administrator.Locations.Add
Administrator.Locations.Remove

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

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

Возможно и то, и другое с аргументацией, и то и другое может быть вполне нормально.

Если администратор вошел в систему на главном сервере, он может вызвать AdminUtils.Locations(That).AddAdministrator(Me).С другой стороны, если администратор находится в определенном месте, он может перед тем, как войти в него, вызвать AdminUtils.Administrators(Me).AddLocation(This).

. Такие вопросы относятся к конкретным ситуациям, на которые обычно отвечают с учетом обязанностей.Какая сущность отвечает за какие сущности?

Также обратите внимание, что эти методы Add могут быть в идеале элементами обеих сущностей, но одна из них сопоставлена ​​с фактическим хранилищем, которое должно быть только одним.

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

Это зависит от того, о чем ваша программа. Если это база данных о людях, то администратор будет содержать список назначенных мест ( addLocation / removeLocation ), если речь идет о местах, то Location должен ссылаться на своего администратора ( setAdministrator ). Если вы отслеживаете историю назначений, то, очевидно, Назначение будет отдельной сущностью. Такие вещи очень хорошо описаны в DDD Book Эриком Эвансом

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