Proprio come si usano gli argomenti del costruttore che sono molto trasparenti nei termini di ciò che è necessario per l'oggetto da creare, un costruttore può accettare il tipo di dati byte[]
che contenga i dati serializzati per l'oggetto da creare.
Come Telastyn ha già sottolineato, c'è un problema con la deserializzazione. È molto soggetto a errori perché i tipi di dati byte[]
non forniscono alcun accenno alla struttura dei dati che può essere facilmente corrotta da praticamente qualsiasi cosa. Naturalmente, lanciare un'eccezione da un costruttore non è nulla di cui aver paura e alcune persone, me incluso, incoraggiano a farlo quando i dati di input non sono in un formato valido. Per questo motivo, il metodo factory static
non è davvero necessario poiché praticamente avvolge comunque il costruttore.
A mio parere il metodo static
non porta nulla alla tabella e, proprio come si può lanciare un'eccezione con informazioni di errore dal costruttore, è molto probabile che tu faccia lo stesso dal metodo static
. Potresti introdurre un metodo static getConstructionErrors
che restituisce un elenco di stringhe di errore, ma lo stato statico è condiviso e quindi potresti avere problemi relativi alle condizioni di gara.
Ma a seconda delle tue esigenze, potresti non volere neanche un metodo static
o un costruttore. Se desideri introdurre un altro modo di serializzazione / deserializzazione, devi creare un'interfaccia FooSerialization
personalizzata (qui interface
è la parola chiave della lingua e potresti fare riferimento a protocol
o a pure abstract class
in altre lingue) e hanno diverse classi implementarlo per fornire diverse strategie di serializzazione e deserializzazione. La serializzazione e la deserializzazione di solito non sono considerate una responsabilità diretta di un oggetto che stai modellando e quindi possono essere estrapolate a un servizio personalizzato (vedi Principio di responsabilità singola ). D'altra parte, se non avrai mai bisogno di più di un modo per serializzare l'oggetto, un metodo diretto serialize
e la costruzione dall'array byte
serializzato è probabilmente la strada da percorrere.