Этот код выглядит не так уж плохо с точки зрения Tell-Don't-Ask .
По сути, Tell-Don't-Ask означает, что вы не должны запрашивать объекто его состоянии, примите решение, основанное на его состоянии, и затем скажите тому же объекту, что и .Если объект имеет всю необходимую ему информацию, он должен решить для себя.
Вы получаете данные от task1
и используете эту информацию с task2
, не сообщая task1
, что делать.Так что я бы сказал, что это нормально с точки зрения «не спрашивай».
Что касается Processor.Process
: там тоже ничего плохого.Клиент звонит myProcessor.Process
и тем самым говорит ему, что делать, не спрашивая.
Скажи-не-спроси выглядит хорошо, может быть, есть что-то еще в коде, который тебе не нравится?Например, вы можете рассмотреть вопрос о включении DoStuffToData
в класс Data
, тем самым комбинируя состояние и поведение.Но будет ли это лучше, зависит от модели и ее контекста.