1
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« Poslední příspěvek od Franta Kučera kdy Dnes v 11:33:01 »To je dost rozdíl oproti té serializaci do různých formátů (počet těch formátů je neomezený a předem neznámý).No a v objektovém návrhu, jak ho chápu já, by naopak spíše objekt toužící po serializaci jiného objektu (exportu do jiného formátu...) poskytl takovému objektu objekt, pomocí kterého si to ten inkriminovaný objekt zařídí sám. Tím netvrdím, že opačný přístup je chybný, spíše bych řekl, že ve skutečnosti jen není objektový, protože narušuje zapouzdření. Ve skutečnosti může být (a také asi bude) jednodušší a efektivnější - znalost nějakých vnitřních detailů objektu může spoustu věcí usnadnit, naopak - blackboxing "za každou cenu" může vést k neřešitelným (nepředvídatelným) situacím při návrhu rozhraní. Ale to se dostáváme k samotné filosofické otázce, zda tedy vůbec OOP.
Může být. Podle mého jsou legitimní oba přístupy. Ten objekt může poskytnout svoji kanonickou reprezentaci, metody pro její iterování nebo mít metody pro serializaci a deserializaci skrze nějaké abstraktní rozhraní. V obou případech ale považuji za klíčové, aby to bylo abstraktní, ne vázané na konkrétní formát.
Ty přístupy mají svoje pro a proti. Např. když ta metoda pro načtení/uložení bude v té třídě, tak ji musí někdo napsat. Zatímco když to bude řešené přes reflexi, tak to mám zadarmo, maximálně tam přidám nějakou tu anotaci, když chci něco jinak (třeba že tenhle atribut nechci v XML nebo v DB nebo že se má přejmenovat), nebo to můžu definovat na jednom místě (že chci třeba názvy v Javě jako CamelCase, zatímco v XML jako lisp-case, nebo definuji globálně formát data atd.). Může to být v externím konfiguráku nebo kódu a ty de/serializované třídy o tom vůbec nemusí vědět.
Pak můžeme narazit na problém prosakující abstrakce. I když si uděláme krásně abstraktní rozhraní, tak někdy můžeme chtít ovlivnit, jak se nějaký atribut bude v konkrétním formátu de/serializovat. To je řešitelné přes anotace (JPA, JAXB…) nebo přes externí konfiguraci (viz taky JPA nebo JAXB…) nebo tam můžu mít nějakou volnou strukturu, mapu klíč-hodnota, do které připojím nápovědu, jak to de/serializovat v konkrétním formátu (ta struktura je pořád obecná, abstraktní a klíče by měly být globálně unikátní, typicky URI).