Ответ:
Разделение проблем (SoC) - более универсальный термин - его можно применять на системном уровне или на более низких уровнях, таких как классы (или даже методы внутри класса)
Принцип единой ответственности (SRP) используется для обсуждения SoC на более низких уровнях, например в классе
Способы обдумать это:
На низком уровне SoC и SRP являются синонимами. Таким образом, можно сказать, что SRP является избыточным термином или что SoC следует использовать только для обсуждения системного уровня
Учитывая (1), термин SoC несколько неоднозначен. Вам нужен контекст, чтобы знать, идет ли речь о SoC высокого уровня или SoC более низкого уровня
Чтобы помнить, что SRP - это термин только для более низких уровней, подумайте об этом: в повседневном языке «ответственность» - это, как правило, четко определенная вещь, которую можно связать с конкретным кодом, тогда как «проблемы» обычно довольно расплывчато и может охватывать множество связанных вещей, поэтому, возможно, именно поэтому SoC более естественно подходит для обсуждения системного уровня, чем SRP
SoC в некотором смысле является более сильным требованием / принципом, чем SRP, потому что оно применяется на системном уровне, и для его подлинного достижения на системном уровне также необходимо использовать при разработке системные компоненты. То есть высокий уровень SoC подразумевает достойный SoC / SRP на более низких уровнях - но обратное неверно, то есть более низкий уровень SoC / SRP не подразумевает SoC или что-либо еще для следующего более высокого уровня, не говоря уже о охватывающая система. Для примера SoC / SRP, который достигается на уровне метода, но затем нарушается на уровне класса, посмотрите это сообщение в блоге Артура Тросина .