Регистрация действий пользователя - PullRequest
2 голосов
/ 24 декабря 2008

Клиент хочет, чтобы мы "регистрировали" "действия", которые пользователь выполняет в нашей системе: в основном, создание, удаление и обновление. У меня уже есть аспект, который регистрирует трассировку, но он работает на довольно низком уровне, регистрируя каждый вызов метода. Поэтому, если пользователь нажмет кнопку «открыть медицинский файл», журнал будет выглядеть так:

  1. closePreviousFiles ("ноль пациента")
  2. createMedicalFile ("ноль пациента") -> файл # 001
  3. changeStatus ("# 001") -> открыть

пока желаемый результат:

  1. открытый медицинский файл № 001 для пациента ноль

Я думаю о том, чтобы снабдить действия Struts2 инструкциями журнала, но мне интересно ... есть ли другой способ сделать это? Я мог бы снова использовать AspectJ (или фильтр) и хранить логику в одном месте, чтобы я мог легко настроить журнал, но тогда я боюсь, что все станет сложнее для понимания (т. Е. Журнал для этого действия неправильный ... где, черт возьми, мне искать неприятности? ").

Ответы [ 4 ]

3 голосов
/ 24 декабря 2008

Похоже, ваш клиент хочет получить контрольный журнал действий пользователя в системе.

Учтите, что в каждой точке входа действия (из веб-запроса) нужно начинать запись аудита с перечислением / константой для действия. Заполните его информацией, которую предоставил пользователь, если это возможно.

На выходе / наконец, укажите в аудите, если он прошел успешно или не удалось. Пример в псевдокоде:

enum Actions {
  OPEN_MEDICAL_FILE
  ...
}

void handleRequest(...) {
  String patient = ...;
  Audit audit = new Audit(OPEN_MEDICAL_FILE);
  audit.addParameter("patient", patient);
  try {
     ... more things ..
     audit.addParameter("file", "#001");
     ... more things ...
     audit.setSuccess();
  } finally {
    audit.save();
  }
}

Здесь важно то, что все действия пользователя сохраняются независимо от успеха или неудачи. Также клиенту действительно нужно знать всю необходимую информацию вместе с действием.

Поскольку мы регистрируем константы действий и данные, представление аудита клиенту может быть отдельно закодировано. Вы также получаете гибкость, поскольку изменение строки представления (например, «открытый медицинский файл № 001 для пациента с нулем» на «медицинский файл пациента с нулевым номером 001 открыт») не определяется во время действия, но позже. необходимо повторно проверить данные аудита.

1 голос
/ 13 января 2009

Я делал подобные вещи в действиях Struts2, я использовал "log4j". В зависимости от вашего сервера приложений он может иметь интегрированную систему ведения журналов, позволяющую использовать каталоги сообщений (например, Weblogic).

1 голос
/ 24 декабря 2008

Если вы работаете с медицинскими данными, вы можете рассмотреть как ведение журнала, так и управление версиями. Я бы даже подумал сделать это с помощью триггеров базы данных. Я не очень много занимаюсь программированием на Java, но я обсудил эту проблему с нашей командой студенческих информационных систем. Они используют Oracle на сервере и регистрируют переменную сеанса со своими соединениями. Их триггеры используют эту переменную сеанса для создания записей журнала и истории версий (при обновлении / удалении) критических таблиц. Это дает им возможности аудита и отката. Я думаю, что оба они будут полезны для применения в медицинской документации.

Они также используют log4j для ведения журнала на уровне приложения, но регистрация данных происходит в базе данных.

1 голос
/ 24 декабря 2008

Я недавно постобработал журналы для генерации сводки. Возможно, вы захотите рассмотреть этот подход, особенно если # 2 и # 3 в вышеупомянутых журналах создаются в разных местах, и желаемый результат потребует переноса состояния из одного места в другое.

...