@ Garrett Hall
Я несколько не согласен с вашим утверждением "RDM и SRP идут рука об руку, они не конфликтуют друг с другом".По моему опыту, когда SRP переоценен, это приводит к модели анемичной области.«Нет, мы не можем сделать или даже помочь поддержать какое-либо упорство, нет, мы не можем сделать 21-CFR11, нет, мы даже не можем знать, что такое графический интерфейс ...», и ваш класс в конечном итоге делает ничего и просто есть модель анемичного домена.
И если RDM переоценен (это направление / ошибка, к которой я склонен), то SRP полностью отходит на второй план, и вы в конечном итоге замечаете, что у вашего класса есть сотни методов и явно слишком много.
Вам нужно найти баланс, счастливую среду, где происходят как RDM, так и SRP.А найти такой баланс сложно, и часто в вашей команде больше интуиции и политики, чем технических знаний или правил.
«Познай себя».Если вы похожи на меня и склонны к чрезмерно сложным занятиям, знайте.И когда вы видите чей-то класс, который выглядит слишком сложным даже для вас, это большой красный флаг.Точно так же, если вы знаете, что вы достаточно хардкор в отношении SRP, и вы видите класс, который выглядит анемичным даже по вашим стандартам, это серьезный запах кода.
Теперь, немного отвечая на вопрос ОП о Storage, я думаюмногое зависит от того, насколько стабильным, стандартным и абстрактным является Storage.Если бы Storage был какой-то стандартной абстракцией XML, CSV или RDB, у меня не было бы абсолютно никаких проблем с объектами, знающими, как хранить себя.