Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Речь идет о принципе Single Responsibility. По каким критериям вы определяете однородность ответственности класса?

ТехнологииПрограммирование
Михаил Стариков
  · 415

"Однородность ответственности" какой то сбивающий столку термин. 
"Принцип единственной ответственности" более наглядный и интуитивно понятный термин.

При проектировании приложения, вы оперируете компонентами, классами. И что бы более детализировать работу отдельных компонентов и применяется "Принцип единственной ответственности". Основная идея это - у класса должна быть лишь одна обязанность, если этих обязанностей больше, это нарушение принципа. Однако принцип - не закон и в некоторых случаях обьединение обязанностей допустимо до тех пор, пока это легко поддерживать. Применение принципа позволит упростить ваш код, и легче поддерживать его в дальнейшем, если потребуется внести изменения.

Так же этот принцип можно определить как - "должна быть только одна причина для изменения класса". Очевидно, если у класса много обязанностей, то и будет много причин для его изменения. 

Простой пример, есть класс Book, который умеет печать сам себя в консоль.

Давайте посчитаем обязанности класса.

  1. Предоставить информацию о книге
  2. Напечатать текущую страницу в консоль
    Отлично. У нас есть две обязанности, а значит две причины для изменения класса.

  3. Изменить данные о книге

  4. Изменить способ вывода текущей страницы.
    То есть, мы можем захотеть напечатать текущую страницу в другое место отличное от консоли, например записать ее в файл. Для этого нам нужно изменить класс Book. Хотя если поразмыслить, то класс Book, не должен ничего знать о способе вывода себя на экран или куда еще либо. В этом случаи принцип единственной отвественности нарушен. И метод вывода книги куда либо следует вынести из класса Book в отдельную сущность. А класс Book переписать следующим образом.

Теперь у нас есть лишь одна обязанность у класса и одна причина для его изменения.

Обязанность - предоставление данных о книге.
Причина для изменения - изменить данные о книге.

Теперь код клиент, может использовать книгу и напечатать куда ему вздумается.

Со мной можно пообщаться лично, в любой из соц. сетей указанных в профилеПерейти на instagram.com/pavelozavr
Если развивать вашу мысль дальше. Класс книги сам должен итерировать текущую страницу? В таком случае он будет и... Читать дальше