Ваша проблема полностью соответствует принципу единственной ответственности (SRP) , одному из принципов SOLID .
Принцип, по сути, гласит, что правильно спроектированный компонент должен отвечать только за одну задачу. Другой способ взглянуть на это состоит в том, что компонент должен иметь только одну причину для изменения. Это гарантирует, что когда вам нужно что-то изменить, вы знаете, что все функции будут в одном месте и не будут смешаны с другими функциями .
В вашем случае Job
предположительно имеет какую-то функциональность, отличную от печати, возможно, некоторые обязанности представлять "работу" в вашей доменной модели. Если это так, то вы не хотите добавлять функции печати здесь. Вместо этого создайте свой виджет печати и разместите там всю логику для печати.
Если ваша печать должна измениться, вам не нужно прикасаться к объекту Job
, потому что его обязанности не изменились. Аналогичным образом, если меняется концепция «задания», изменяется только класс Job
, и печать остается неизменной (если у вас нет сейчас чего-либо дополнительного для печати).
Однако ...
Если цель Job
класса только *1022* состоит в том, чтобы представить некоторую информацию для печати, то наиболее определенно должен содержать метод PrintTo(Printer)
, где Printer
будет нести ответственность за разговор с физическим принтером. В этом случае ответственность перешла на Job
, которая связана только с печатью, и целесообразно, чтобы она контролировала способ печати.
SRP может быть трудным для понимания в ваших проектах, но есть простой способ убедиться:
Если вы можете подвести итог функциональности
ваш класс без использования слова
«а», класс имеет единственный
ответственность.
Итак, Job
отвечает либо за «представление задания», либо за «печать информации о задании», но не за оба.