Как принцип единой ответственности соотносится с моделью анемичной / богатой предметной области?

В настоящее время проводит обзор кода материала, переданного другой командой, и есть одно сомнение в применении SRP и его связи с анемичной или богатой моделью предметной области (как определено Мартином Фаулером). Концепция расширенной модели предметной области состоит в том, чтобы иметь интеллектуальный объект, который может не только устанавливать / получать свои свойства, но также может выполнять более сложную бизнес-логику. Мне интересно, как это вписывается в SRP?

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

class MyObject {
    // get set
    // parse sth

}

Метод сохранения в хранилище

   storage.store(key, object);

Не нарушает ли это SRP, если MyObject имеет такой метод хранилища

public void store(Storage storage) {
    storage.store('keyOne', fieldOne);
    storage.store('keyTwo', fieldTwo);
}

] С точки зрения pov этого объекта неплохо иметь возможность сохранять его состояние. Другой способ - ввести здесь некую услугу и сделать вот так:

public StorageService {
    private Storage;
    // constructor here
    ....
    public void store(MyObject myobj);
}

Можете ли вы указать мне какие-либо ссылки, которые я могу прочитать об этой проблеме? Я нашел здесь одну тему на SO, но она не полностью отвечает на мой вопрос.

Как это разрешено в DDD? Модели в DDD по определению богаты и могут рассматриваться как имеющие слишком много обязанностей.

10
задан grafthez 10 January 2012 в 18:17
поделиться