В настоящее время проводит обзор кода материала, переданного другой командой, и есть одно сомнение в применении 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 по определению богаты и могут рассматриваться как имеющие слишком много обязанностей.