Ответ 1
Вы можете использовать AOP для применения регистрации без какого-либо навязчивого поведения. АОП может чувствовать себя как смесь прокси и декоратора.
Приложение, над которым я работаю, требует регистрации действий, пользователя, выполняющего действие, и времени действия в базе данных.
Какой шаблон дизайна наиболее популярен/подходит для ведения журнала?
Я думаю о шаблоне Command, который требует текущего пользователя и действия. Выполните действие и напишите в журнал.
Как вы думаете? Любые другие альтернативы, которые я могу рассмотреть?
Спасибо.
Вы можете использовать AOP для применения регистрации без какого-либо навязчивого поведения. АОП может чувствовать себя как смесь прокси и декоратора.
Не объединяйте команду и журнал Memento.
Команда - это то, что делается. Это может включать некоторые общие аспекты во всех командах, включая запись записи в журнал.
Сама запись журнала может быть Memento или резюме Memento.
Регистратор - это своего рода Factory, который создает Mementos для зарегистрированных событий.
Как и в большинстве случаев, у вас есть большое количество взаимосвязанных шаблонов проектирования. Какой "один" шаблон "самый популярный/подходящий" не входит в него.
Вопрос: "Что должно произойти?"
Наблюдательный шаблон хорошо подходит для ведения журнала. Вы можете иметь класс Logger, расширяемый Observable, и дочерние классы, такие как log to console, log to Database и log to File system etc, а каждый дочерний класс реализует Observer. Теперь, когда регистрируется сообщение журнала, все классы наблюдателей, зарегистрированные в классе Logger, будут уведомлены, чтобы каждый дочерний класс ex: log to console записывал сообщение в консоль. Кроме того, класс Logger может следовать шаблону Singleton, чтобы убедиться, что один экземпляр Logger доступен через приложение.
Я согласен, я думаю, что шаблон команды будет максимально соответствовать, поскольку у вас есть все перечисленные действия.
Но я не думаю, что вам действительно нужно следовать шаблону дизайна для этого. Вы можете просто установить обратный вызов для действий по обновлению журнала. Это зависит от вашей архитектуры и технологий, но из моей головы командный шаблон звучит как перебор.
Строка команды звучит нормально. Это, в частности, позволяет передать регистратору команду и дать команду выполнить операцию журнала в журнале. Таким образом, вы можете иметь каждое действие для форматирования самого журнала, и если некоторые действия не должны регистрироваться или вам нужна специальная информация, вам не нужно знать общую архитектуру. Недостатком является объединение действий с регистратором, если вы хотите предотвратить это, вы можете дать каждому действию метод, который возвращает строку журнала, которая должна быть добавлена.
Если у вас будет много разных действий, я не думаю, что это слишком много, если это только действия с базой данных, и вы можете заставить базу данных выполнять действия при каждом действии базы данных, она может изобретать колесо, чтобы иметь один но, как отмечает marcgg, это зависит от вашей архитектуры.