Budem mať definovaných 1000 ErrorCode. Pri vyvolaní výnimky použijem napr. MyErrror.Create(ErrorCode999, ...)
Ano, to je jedna z cest, kdy to ridis Error codem. Ale zrovna tak muzes psat
MyErrror.Create(Category.X, Group.Y, Detail.Z, ErrorCode, E)
A pokud se ti nebude prilis lisit struktura resp. to bude v nejjednoduzsim pripade vzdy
Category,
Group,
Detail a
ErrorCode, tak ti na vsechno staci
jeden variantni record:
- 1. varianta pro jednotlive hodnoty
Category,
Group,
Detail a
ErrorCode - 2. varianta pro vysledek, ve kterem budou hodnoty
Category,
Group,
Detail a
ErrorCode nasackovany na hranicich bytu do uint32/uint64
Z hlediska prace s chybou je uplne jedno, jestli tu chybu vyrenderujes jako napr. decimalni hodnoty oddelene dvojteckou
Category:
Group:
Detail:
ErrorCode nebo uint32/64 renderovanty do desitkove nebo sestnactkove soustavy... Akorat ze desitkouvou soustavu pouzivaji jen strikaci

Kdyz bude struktura tech Error code nesouroda, tak teprve pak se vyplati nadefinovat si tech 1000 error kodu (=konstant) a predavat to jako jediny parametr do konstruktoru a vsude dal to predavat jako parametr s tim, ze kdyz to nekde budes potrebovat, tak si to budes muzes zpetne rozlozit na jednotlive slozky
Ale to uz jsem ti vsechno psal...
Do DB bych nelogoval, protoze k tomu musis mit funkcni nezanedbatelnou infrastrukturu aplikace, muzes mit potrebu logovat nekde uprostred rozpadajici se / zotavovane DB transkace etc... Logovaci subsystem by mel vyzadovat co nejmene zavislosti, idealne jen I/O subsystem OS.