все сводится к тому, что вы моделируете.Я сделал несколько обширных написание и презентацию о принципах SOLID, и я специально рассмотрел ваш вопрос в моих обсуждениях Единой ответственности.
Принцип единой ответственности гласит, что у класса должна быть одна и только одна причина для изменения.
Поначалу это может показаться нелогичным.Не проще ли сказать, что у класса должна быть только одна причина существования?На самом деле ни одна причина существования не может быть легко доведена до крайности, которая принесет больше вреда, чем пользы.Если вы доведите это до крайности и создадите классы, у которых есть одна причина существования, у вас может получиться только один метод на класс.Это приведет к большому разрастанию классов даже для самых простых процессов, в результате чего система будет трудна для понимания и трудна для изменения.
Причина, по которой у класса должна быть одна причина для изменения, а не однаПричиной существования является бизнес-контекст, в котором вы строите систему.Даже если два понятия логически различны, бизнес-контекст, в котором они необходимы, может привести к тому, что они станут одинаковыми.Ключевой момент принятия решения о том, когда следует изменить класс, основан не на чисто логическом разделении понятий, а на восприятии концепции бизнесом.Когда деловое восприятие и контекст изменились, у вас есть причина изменить класс.Чтобы понять, какие обязанности должен иметь отдельный класс, вам необходимо сначала понять, какая концепция должна быть заключена в этом классе и где вы ожидаете, что детали реализации этой концепции изменятся.
Рассмотрим двигатель в автомобиле, дляпример.Вы заботитесь о внутренней работе двигателя?Вас волнует, что у вас есть определенный размер поршня, распределительного вала, топливной форсунки и т. Д.?Или вы заботитесь только о том, чтобы двигатель работал, как ожидалось, когда вы садитесь в машину?Ответ, конечно, полностью зависит от контекста, в котором вам нужно использовать двигатель.
Если вы механик, работающий в автомастерской, вам, вероятно, небезразлична внутренняя работа двигателя.Вам необходимо знать конкретную модель, различные размеры деталей и другие характеристики двигателя.Если у вас нет этой информации, вы, вероятно, не сможете надлежащим образом обслуживать двигатель.Однако, если вы обычный обычный человек, которому нужен только транспорт из пункта А в пункт Б, вам, скорее всего, не понадобится этот уровень информации.Понятие отдельных поршней, свечей зажигания, шкивов, ремней и т. Д. Для вас практически бессмысленно.Вы заботитесь только о том, чтобы у автомобиля, на котором вы ездите, был двигатель, и он работал правильно.
Пример двигателя приводит к сути принципа единой ответственности.Контексты вождения автомобиля и обслуживания двигателя дают два разных понятия о том, что должно и не должно быть единым понятием - причина изменений.В контексте обслуживания двигателя каждая отдельная деталь должна быть отдельной.Вы должны кодировать их как отдельные классы и убедиться, что они соответствуют их индивидуальным спецификациям.В контексте управления автомобилем, однако, двигатель представляет собой единую концепцию, которую не нужно разбирать дальше.В этом случае у вас, вероятно, будет один класс с именем Engine.В любом случае контекст определил, каково надлежащее разделение обязанностей.