Методы получения коллекции объектов в доменном дизайне - PullRequest
0 голосов
/ 18 ноября 2011

Я использую Zend Framework, а также пытаюсь перейти к подходу DDD (доменно-управляемый дизайн). У меня есть модели, картографы и таблицы DbTable для объектов домена.

Есть много ситуаций, когда мне нужно выбрать несколько объектов одновременно, например, список всех пользователей в системе, поэтому моя модель пользователя будет иметь метод 'getAllUsers', который будет возвращать всех пользователей (прямо сейчас). он возвращает массив всех пользователей, но я думаю сделать класс коллекции). Пока я использую обычный метод (не статичный) для извлечения коллекции, и для этого мне нужно создать «пустой» объект. Другой вариант - преобразовать его в статический метод.

Я не уверен, какой подход лучше, оставить такие методы как нестатические или преобразовать их в статические методы. И какой подход / практика лучше и почему? Кроме того, какой подход близко следовать методологии DDD.

PS: Пожалуйста, дайте мне знать, если вы можете придумать лучший заголовок. И НЕТ, это не вопрос курса.

Ответы [ 3 ]

1 голос
/ 21 ноября 2011

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

По сути, использование статических методов класса на самом деле не ООП, а процедурное программирование, потому что вы не можете использовать ни одну из парадигм ООП, таких как инкапсуляция или наследование. Это указывает на возможные недостатки дизайна / запах кода.

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

Было бы проще ответить на ваш вопрос, если бы опубликовали несколько примеров кода.

На подобные вопросы ответили здесь , здесь или здесь .

0 голосов
/ 01 декабря 2011

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

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

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

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

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

В домене, управляемом дизайном, постоянная коллекция пользователей должна быть представлена ​​как UserRepository интерфейс.Конкретная реализация этого интерфейса имеет состояние, включая, например, состояние соединения с базой данных.Отсюда следует, что вам нужен экземпляр реализации репозитория, и его методы будут методами экземпляра, а не статическими.

...