Какое наиболее удобное место для использования регистратора?
Я написал программу диспетчера задач с использованием Java и на данный момент создал единую реализацию пользовательского интерфейса. В программе на данный момент 3 слоя. Уровень представления, который взаимодействует с уровнем домена через контроллер варианта использования, и, наконец, уровень технических услуг, используемый для сохранения. В этот момент пользователь может выполнить несколько действий, таких как добавление задач, редактирование статуса задачи и т. Д. Цель моего регистратора в этой схеме - отслеживать все действия, предпринимаемые пользователями. Итак, есть несколько мест, где я мог бы вызвать регистратор, чтобы написать команду. Я не буду вести какую-либо запись на уровне представления, так как это было бы ужасным дизайнерским решением, и поэтому я остался с контроллером, командным интерфейсом (реализованным для управления выполнением всех команд с целью реализации функций отмены / повторения)), или в классах более низкого уровня, которыми фактически манипулируют, скажем, например, класс задачи.
Я думаю, что контроллер является относительно приличным вариантом для этого, поскольку он действует как точка соприкосновения между уровнем пользовательского интерфейса и доменом, таким образом, все известные команды в конечном итоге проходят через контроллер, что позволяет легко проверить, что все важные методы регистрируются, Причина, по которой этого нельзя делать в контроллере, заключается в том, что это приведет к снижению когезии, увеличению сцепления и, возможно, к раздутому контроллеру.
Конкретные команды являются еще одним потенциальным местом, так как они также имеют всю информацию, необходимую для регистрации. Это снова приведет к тому, что команды станут менее связными и увеличат связь. Кроме того, если я не использую командный интерфейс для выполнения действий над объектом домена, то я теряю логирование.
Наконец, это приводит меня к реализации регистратора в методах объектов домена более низкого уровня. Это хороший кандидат, потому что регистрация всегда будет происходить, если программа используется и вся необходимая информация доступна. Единственным отрицательным моментом является то, что команды регистратора будут редко разбросаны среди объектов домена более низкого уровня, что затруднит обеспечение регистрации всех правильных методов.
Я хотел бы получить дебаты об этом типе решения и ценю все ваши комментарии.
1 ответ
Сначала подумайте о практичности. Ведение журнала часто является проблемой технического обслуживания и администрирования. Каждый слой в вашем дизайне является кандидатом на регистрацию, но по нескольким причинам.
Не зная вашей иерархии объектов и дизайна...
Переходя от домена к пользовательскому интерфейсу, каждый уровень представляет собой абстракцию или коллекцию поведения предыдущего уровня. Вы должны спросить себя о том, какой уровень детализации вы ищете? Было бы полезно увидеть запись команды? Было бы также полезно просматривать журналы для каждого связанного вызова уровня домена? Не всегда легко расшифровать вызовы домена и связать его с определенной командой.