Является ли Anemic Domain Model набором интеллектуальных сервисов и глупых объектов без определенного поведения?

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

class AnemicDomainClass {
    private $property;
    public function getProperty() {
        return $this->property;
    }
    public function setProperty($property) {
        $this->property = $property;
    }
}

... где вся логика внутри некоторых служб?

class SomeStuffService {
    public static function doSomething(AnemicDomainClass $class) {
        $class->setProperty(42);
    }
}

Это появляется в конце статьи AnemicDomainModel Мартина Фаулера

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

Это значит что? Лучше отдавать предпочтение смарт-объектам, а не смарт-сервисам.

1 ответ

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

Это означает написание объектно-ориентированного кода вместо процедурного кода, действующего на данные. Объектно-ориентированный код означает моделирование концепций в объекты, которые знают свои собственные атрибуты и поведение и которые взаимодействуют друг с другом, чтобы представить работающее решение проблемы.

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

Другие вопросы по тегам