Comments 11
Там сразу LoD и CQS описаны как неотделимые понятия.
Как правило, у меня есть объект-источник данных, несколько объектов — обработчиков, и, возможно, фасад, который все это скрывает.
Если его не использовать то вместо классов и объектов вы пользуетесь просто структурами данных.
if condition do возможно придётся пересмотреть ответственности, пошевелить код слегка и сделать только do
В теории понятно что это за принцип. Но давайте рассмотрим на практике. У нас есть класс платеж, которому мы можем сказать - отменись. Кроме изменения собственного статуса отмена платежа должна создать еще один обьект - обьект отмены.
class Payment {
fun reverse()
}
И тогда получается что либо tell don't ask метод reverse должен возвращать что-то, нарушая Command Query Separation, либо сам payment и reversal должны уметь себя куда-то сохранять - то есть получать интерфейс репозитория, что нарушает Single Responsability Principle.
Как быть с этим?
Когда в следующий раз захотите съесть в кафе яичницу, попробуйте не заказывать ее напрямую у повара. Обратитесь к официанту ;-)
Он (Invoker) получит от вас (Client) команду (Command) и точно знает, кому (Receiver) ее доставить. Повар знает, как готовить яичницу, и сообщит официанту о готовности. А официант знает, кто заказал у него яичницу, и уже через 5 минут вы насладитесь блюдом :-)
Tell-Don’t-Ask