Объекты без поведения - PullRequest
1 голос
/ 22 июня 2011

У меня есть вопрос, связанный с общим ООП, а не с конкретным языком.Я пробовал простое приложение (на Java) и пытался смоделировать его как сценарий реального мира.Рефакторинг я понял, что я придумал простой объект, который имеет только один член и переопределенный эквивалент и хэш-код.

Мой вопрос ... это плохая практика иметь такие объекты (ссылки на блоги и т. д. приветствуются)

Ответы [ 4 ]

1 голос
/ 22 июня 2011

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

В других случаях могут существовать лучшие и худшие методы ведения дел в зависимости от того, имеют ли они смысл, например, если я хочу изменить порядок объектов в очереди, я бы предпочел реализовать пользовательский Comparator вместо того, чтобы наследовать и переопределять метод compareTo, особенно если моя новая процедура сравнения не является "естественной" для объектов.

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

1 голос
/ 22 июня 2011

Короткий ответ :

Это плохая практика иметь такие объекты

Не обязательно, но это зависит от контекста.

Более длинный ответ :

У меня есть вопрос, связанный с общим ООП, а не с конкретным языком.Я пробовал простое приложение (на Java) и пытался смоделировать его как сценарий реального мира.

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

При перефакторинге я понял, что придумала простой объект, которыйтолько один член и переопределенный метод equals и hashcode.

Может быть, все в порядке, как уже сказал @Arseny, ValueObject - хорошо известный способ работы, хотя я обычно не заканчиваю сих много, когда я пишу код.Если несколько ваших объектов не имеют никакого поведения, это может указывать на так называемую модель анемического домена , к которой вы должны быть осторожны (большая сложность без видимой выгоды).

Вы можете выяснить, делаете ли вы «неправильно» (конечно, со значениями переменных «неправильно»): просто посмотрите, что соавторы делают с вашим ValueObject, и посмотрите, есть ли что-то там.это похоже на вычисление, которое на самом деле принадлежит самому объекту.

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

0 голосов
/ 22 июня 2011

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

Редкие исключения из этого, что-то вроде шаблона Null Object.

http://en.wikipedia.org/wiki/Null_Object_pattern

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

Существует несколько методов проектирования ОО-систем, вот один из оригинальных: http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card

0 голосов
/ 22 июня 2011

Нет, это не плохо. Существует широко распространенный шаблон Value Object , а также шаблон DTO .

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