|
|
|
Кастомизация логики
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста как быть.... Есть сервис, к которому нужно добавить события (ну по типу того что в журнал винды пишутся), в задачи которого входит: 1. формирование отчетов о работе пользователей 2. статистика использования модулей системы. 3. уведомление отдельных пользователей о событиях (рассылать уведомления). Мне видится реализация подобного функционала, как: события — это запись в некой табличке в базе, с полями: eventId — айди события eventType — тип события eventData — данные в json/xml строке У каждого события, есть уникальные свойства и поведения ( приоритетность события, реакция на события (слать и кому какие уведомления о событии), etc). т.е. фактически, имхо, напрашивается реализация: Event — интерфейс объекта сообщения (в нем определяется набор методов, типа toJSON, toXML, toEmail, toEventDTO etc — каждый из которых реализуется в нужном нам ивенте (ивент содержит больше данных чем ивентДТО ) EventXXX EventYYY — набор ивентов имплементирующих интерфейс Event EventDTO — сериализатор в базу — общий для всех ивентов EventDAO — класс со статическими методами, для посылки, получения, и прочей работы с ивентами. EventEmailSenderBean EventSmsSenderBean EventXXXSenderBean — различные рассылщики ивентов Вопрос собственно в том, как правильно организовать классы обслуживающие данную структуру? Можно ли сделать базовый класс Event сразу же Entyty, и расширять его для конкретных сообщений (реализуя в них методы типа toEmail, toJSON,...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2013, 20:01:22 |
|
||
|
Кастомизация логики
|
|||
|---|---|---|---|
|
#18+
Фактически, вопрос, как удобнее/правильнее, разместить логику (до нескольких сотен различных поведений) в зависимости от сгененированного события? писать if-else километровый в классе типа EventCoder, как-то имхо некрасиво (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2013, 20:16:26 |
|
||
|
Кастомизация логики
|
|||
|---|---|---|---|
|
#18+
qwertun, 1. Готовое не искал? 2. В if else ничего плохого. Посмотри win api ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2013, 20:25:12 |
|
||
|
Кастомизация логики
|
|||
|---|---|---|---|
|
#18+
Petro123, 1. искал но ничего инетресного не нашлось, да и хочется самому поразбираться. На копипасте далеко не уехать ;) 2. ну 1 -2 -3, но когда их будет под сотню, да и не только в свитчинге дело, наборы данных от события к событию отличаются тоже, в общем как-то не очень красиво получается... Хотелось бы иметь четкую структуру, одно событие, один класс реализующий несколько интерфейсов. Но вот как совместить многокласие и базу не знаю ((( Можно конечно, пораждать промежуточный класс типа имент-энтити, который отвечает за сохранение в базу, но может можно наследоваться уже от энтити класса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2013, 21:42:33 |
|
||
|
Кастомизация логики
|
|||
|---|---|---|---|
|
#18+
qwertun, мне непонятна постановка - Причём тут вообще события? 1. Обычные отчёты. 2. Статистика для кого и чего? Для заказчика? Сомневаюсь. 3. Для чего и О ЧЁМ уведомлять? Ты кинулся сразу программировать. А надо - ВИ \ Преценденты. Подозреваю, что ты придумал идею для самого себя. Разумеется, если притянуть за уши события и всё на них построить, то у тебя будет миллион if else ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2013, 22:13:31 |
|
||
|
Кастомизация логики
|
|||
|---|---|---|---|
|
#18+
Petro123, События тут в смысле внутрисистемные события. Ну вот к примеру. Есть банальный метод логин, который может порождать события: 1. успешная авторизация пользователя - просто пишем в лог событий и выгружаем в отчеты, аудит системы, аудит работы пользователя. 2. неудачная авторизация - пишем в лог, и если больше скажем 5 подряд неуспешных пишем письмо админу 3. авторизация пользователя из подозрительного места или другого айпи (ну так чисто для примера) - письмо гланюку по безопасности... И так на туевую кучу методов.. да четко пока не прописано сколько их, но будет больше сотни точно. И главное поведение будет постоянно меняться, то нужно отсылать в почту, то ненужно, то нужно смс только админам, а то еще и гланого босса добавить... В общем получается, есть сущность события, у которых много общего, но и кастомизационная часть не на две строки. лепить все в один метод, там потом п....ц без пол-литра нихрена не найдешь, да и if-else будет нечитаемый... 1. Отчеты выборка из это таблицы ивентов по признакам.. просто отчеты динамические, будут строится от желания проверяющего и писать сразу отчет по событию не получится. 2. Для начальников, типа кто когда и что делал, кто накасячил, зачем и почему.. 3. Да мало ли кейсов. Так внутри в системе есть коментарии к различным сущностям. Тупо подпискка отписка на коменты, добвлени новых, как о них уведомлять то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2013, 08:06:20 |
|
||
|
Кастомизация логики
|
|||
|---|---|---|---|
|
#18+
qwertun, Я сдаюсь). Т.к. ты раздуваешь из банального логировщика СТАНДАРТНОГО БИБЛИОТЕЧНОГО целую ИС. В любом резюме есть фраза - умение разбираться в чужом коде. Вопрос: "если я вставлю Log ( в твои сто методов, то будет работать? ". Он умеет писать бд и на мыло. Не надо выделять события в сущность. Умеешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2013, 08:32:02 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38148498&tid=2129993]: |
0ms |
get settings: |
16ms |
get forum list: |
28ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 277ms |
| total: | 452ms |

| 0 / 0 |
