Přijdete o zapouzdření, takže si zabetonujete vnitřnosti.
Jak jednou objekt serializujete, tak už takřka nemůžete překopat vnitřní reprezentaci. Nějaká aktualizace pak obvykle něco rozbije.
Ve výsledku pak občas máte vnitřnosti objektů dvakrát. Jednou pro sebe, jednou pro serializátor a přesypáváte je tam a zpět.
Smyslem té serializace je, že chci s někým komunikovat – typicky s nějakým externím systémem nebo třeba s jinou instancí svého programu. Proto si dohodneme nějaké rozhraní, kontrakt, který budou obě strany dodržovat, a který popisuje logickou strukturu předávaných dat případně i protokol jejich předávání. Ten koncept
IDL nevznikl jen tak pro nic za nic…
A proto má smysl, aby ty objekty vygenerované z téhle specifikace jí odpovídaly 1:1 – abych mohl ve své aplikaci mohl vytvářet nebo číst libovolné struktury, které jsou dle té specifikace validní. Tady není moc prostor pro kreativitu a nemá smysl si to dělat po svém a jinak. Ty objekty/třídy nemám pro nějaký serializátor, ale pro podporu toho formátu a jeho logického modelu. Slouží to jako most mezi mým programovacím jazykem (abych používal normální třídy, struktury, konstanty, volal metody, funkce…) a tím formátem nebo protokolem. A tady je žádoucí dodržovat správnou úroveň abstrakce a nedovolit těm strukturám specifickým pro daný formát, aby prosakovaly do zbytku programu, který už je obecný. Takže ano, budu tam ty třídy mít dvakrát, nebo třeba jedenáctkrát, pokud budu pracovat s deseti formáty. Ale pokaždé to jsou trochu jiné struktury a data (pokud by tomu tak nebylo, tak by to znamenalo, že ten program je nejspíš vcelku zbytečný a nic moc nedělá). Tzn. mám nějaké jádro programu a v něm používám nějaké entity-třídy – to je můj datový model, který odpovídá mému záměru logice toho programu. A pak tam mám moduly pro napojení na různé externí systémy a v nich se používají třídy specifické pro dané protokoly nebo formáty. V těchto modulech je pak nějaká
obchodní logika, která na jedné straně pracuje s mými entitami a na druhé straně se strukturami specifickými pro ten formát nebo protokol.
Pokud by ta aplikace měla nějaké extrémní nároky na výkon nebo požadavek, že se data nemají v paměti kopírovat, tak bych se na nějaké objekty a konstruování jejich stromu úplně vykašlal a z parseru bych emitoval události, které by se průběžně zpracovávaly… případně bych vyrobil ukazatele na části dat v té původní paměti, aby se to nikam nekopírovalo a zpracovalo rovnou na místě.