Отделение методов объекта от данных объекта - PullRequest
0 голосов
/ 09 апреля 2009

Следуя принципам SRP и KISS, я разработал объект только со свойствами, но мне нужны методы для работы с объектами. Каков наилучший способ разделения данных объекта сущности и методов объекта набора сущностей?

В настоящее время я создал следующие объекты:

Объект Pet Entity
Имя атрибута
Атрибут Возраст

Объект Pet Entity Set
Список питомцев

Объект Pet Engine
Метод LoadPets of Pet Entity Set
Метод GetPetByName Pet Entity
Метод GetPetsByAge из набора домашних животных

Это лучший способ проектирования объектов?

Я разрабатываю в .net

Спасибо.

Ответы [ 3 ]

6 голосов
/ 09 апреля 2009

Вы внедрили антипаттерн Анемичная модель домена *1002*. Классы должны реализовывать методы, которые им нужны, которые не нарушают SRP, но IMHO, SRP в любом случае намного выше.

4 голосов
/ 09 апреля 2009

Общая идея состоит в том, чтобы методы были близки к данным, с которыми они работают. Конструкция, которая объединяет данные и операции, известна как class .

Серьезно, почему вы думаете, что это хорошая идея отделить данные от операций? Это направление, противоположное тому, куда мы шли десятилетиями!

0 голосов
/ 09 апреля 2009

Используйте функциональный язык с поддержкой сопоставления с образцом. Поскольку вы находитесь на .net, F # является очевидным выбором.

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

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

В сущности, это требует, чтобы вы взяли dual системы - сообщения в реактивной системе соответствуют методу и аргументам в объектно-ориентированных системах. Грубо говоря, состояние, которое находится в полях объектов ОО-программы, сохраняется в стеке вызовов реактивной программы, а состояние, которое является стеком вызовов ОО-программы, сохраняется в полях сообщений в реактивной программе. .

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