Инкапсуляция — это концепция объектно-ориентированного программирования, которая связывает вместе данные и функции, которые манипулируют этими данными, чтобы защитить их от внешнего вмешательства со стороны клиентского кода.

Скрытие информации

Сокрытие информации или данных является важной концепцией инкапсуляции. Это часто интерпретируется как сокрытие полей и использование геттеров и сеттеров, но на самом деле это не так. На самом деле это следует называть сокрытием реализации, поскольку мы хотим скрыть детали реализации, а не всю информацию. Мы хотим не запрашивать у объектов их внутреннюю информацию; мы должны попросить объекты, которые знают информацию, сделать работу.

Защита инвариантов

Мы хотим максимально затруднить перевод объектов в недопустимое состояние. У нас не должно быть общедоступных полей или сеттеров, а конструктор должен гарантировать, что объект полностью инициализируется в допустимом состоянии при построении.

Разделение командных запросов (CQS)

Операции должны быть либо командами, либо запросами, а не тем и другим одновременно. Команды имеют побочные эффекты, они каким-то образом влияют на состояние приложения, например, изменяя структуру данных или обновляя базу данных. Запросы просто возвращают данные, они не должны иметь никаких побочных эффектов. Запросы естественно идемпотентны; их можно запускать любое количество раз без изменения ответа.

Следование CQS во всей кодовой базе означает, что вы можете определить по сигнатуре метода, есть ли у метода побочные эффекты, не глядя на реализацию.