Na jaké úrovni aplikace logovat operace uživatele? rubrika: Návrh

2 ajda2
položil/-a 21.12.2018

Rád bych se zeptal na vaše názory ohledně toho,
na jaké úrovni aplikace je vhodné či nevhodné logovat operace / události, které provádí její uživatelé?
Nemám Tím na mysli události či chyby spojené s během aplikace.

Jedná se mi např. o to, když nějaký uživatel provede vytvoření nové entity, editaci, smazání apod.

Neodkáži se rozhodnout mezi dvěma úrovněmi:

1. Model

Výhody:

  • Neuteče žádná operace, jelikož je to nejnižší úroveň, kde se operace provádí

Nevýhody:

  • Závislost modelu na logovací službě, která spíše souvisí s interakcí uživatele, než "low level core jádrem"

2. Controler

Výhody:

  • Loguji skutečné interakce až po jejich dokončení
  • Přijde mi logičtější, že má controler závislost na logovací službu než Model (Připomínám, že se nejedná o logování systémových chyb apod.)

Nevýhody:

  • Programátor musí myslet na logování u všech akcí, komponent apod.

Jaké jsou vaše postřehy, zkušenosti, či další (ne)výhody?
Případně úplně jiný úhel pohledu?

Komentáře

  • Taco : Co myslíš tím: "Loguji skutečné interakce až po jejich dokončení" ? 21.12.2018
  • ajda2 : @Taco Tím například myslím to, že když operace nejsou elementární a provádí se třeba ve fasádě, nebo jiné službě, která pak jednotlivé dílčí operace deleguje na nižší vrstvy, tak v případě Controleru takovouto operaci zaloguji jako jeden celek. Kdybych měl logování v jednotlivých modelech, tak se může stát, že pro jednu operaci jako celek (z uživatelského hlediska) budu mít v logu více záznamů - což nechci. 28.12.2018
  • rmaslo : A proč to nechceš? V logu mám parent_id. Když třeba mažu koncept faktury tak se smaže hlavička a id toho log záznamu mazání hlavičky pak mají jako svoje parent_id všechny mazané položky rozpisu této faktury. 28.12.2018
  • Taco : @ajda2: Fasáda je také model. Chápu tvůj problém. IMHO jde o to pojmenovat co chceš. V controlleru chceš chytat akce uživatele. Ve fasádě chceš jednotlivé příkazy (předpokládám, že fasáda nevolá fasádu). V jednotlivých prvcích (nechce se mi je nazvat modelem) loguješ jednotlivé změny stavu. Můžeš logovat a požadovat cokoliv z toho. 28.12.2018
  • ajda2 : @rmaslo: Nechci příliš komplikovanou strukturu v logu. Jedná se mi především o to, abych měl historii akcí uživatele. Nejedná se o systémový log, kde budou uvedeny detailní změny dat apod. Ty z logu, který uvádíš, generuješ i výstup historie akcí pro uživatele? Není to pak zbytečně složité, "přetvořit" to do čitelné a použitelné podoby? Systém, který popisuješ, mi přijde už hodně specifický na konkrétní situaci. Mě se jedná spíše o obecnou historii provedených akcí (CREATE / UPDATE / DELETE) s vazbou na entitu a uživatele, který akci provedl. Možná jsou mé myšlenky špatné a je lepší mít jeden log na vše a z toho poté "vycucat" čitelný výstup pro uživatele. Přišlo mi ale lepší, když bude "jednoduchý" log pro uživatele oddělen. 29.12.2018
  • ajda2 : @Taco: Ano, Fasádu také chápu jako model :) Máš pravdu, je potřeba si přesně určit co chci. Po přečtení příspěvků, jsem dospěl k tomu, že bude nejvhodnější vytvořit vrstvu mezi Controllerem a Modelem - Proxy, jak píše @harrison314 29.12.2018
  • rmaslo : ajda2: Odpověď jsem přidal jako editaci svého komentáře, tady nejde rozumně formátovat. 29.12.2018
odkaz
14 harrison314
odpověděl/-a 21.12.2018

Ono sa na to pozri takto a vyjasni si co chces logovat,
v kontroleroch to su akcie pouzivatela (co stlacil, kam siel atd...),
v bussines logike logujes co sa stalo na zaklade akcii pouzivatela.

Obe vies vyriesit (ak mas rozumny frameowrk a ak nechces specialne log spravy) autoamtciky bez zasahu kodu. V kontroleroch bud pomocou midllweru, alebo pomocou ActionFiltra. V bussines logike (ak pouzivas IoC a rozhrania) tak pomocou interceptoru/dynamickych proxy. Obe rienia su tak na 10-20 riadkov kodu a pokryju celu aplikaciu a to aj do buducna, len sa potom treba pohrat a odfiltrovat citlive data ako hesla a kreditky.

Komentáře

  • Taco : Perfektní definice: "v kontroleroch to su akcie pouzivatela (co stlacil, kam siel atd...), v bussines logike logujes co sa stalo na zaklade akcii pouzivatela." ! 21.12.2018
  • ajda2 : Díky! Tohle dává smysl, především Tvá definice, jak píše @Taco 28.12.2018

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.