Questo contratto su un utente API è inevitabile?

4

Sto progettando un framework UI in Java. Ogni componente dell'interfaccia utente, rappresentato dalla classe Component , nel framework è identificato da una chiave non modificabile String . Quindi prendo la chiave nel costruttore stesso e non fornisco alcun setter.

Ora ho un'altra classe AggregateComponent che rappresenta un componente contenente un array di componenti. Nella classe AggregateComponent a Factory viene utilizzata per creare i componenti figlio. Per alcuni motivi, la chiave dei componenti figlio deve essere parentComponent.key + index , dove index è l'indice dell'array del componente figlio. Quindi passo parentComponent.key + index a Factory.create() .

The contract is the Factory implementer should construct the child Component using the passed key.

Potremmo applicare questo contratto in AggregateComponent controllando la chiave del componente creato rispetto alla chiave passata e generando un'eccezione. Ma sto chiedendo

Is there any solution (even a completely different design solution) without such contracts.

In realtà i componenti hanno lo scopo di visualizzare i dati da un oggetto (un POJO, JSON o XML). Per le primitive nell'oggetto è sufficiente un semplice Component . Per gli array abbiamo bisogno del AggregateComponent . Il factory è utilizzato in AggregateComponent per separare la logica di creazione dei componenti figlio.

Come ho detto prima, la chiave dei componenti del bambino dovrebbe essere in forma particolare. In futuro potremmo scrivere un Component per visualizzare le mappe (simile alla matrice). In quel caso la chiave potrebbe essere di forma parentComponent.key + cKey dove cKey è una chiave nella mappa.

    
posta Durgadass S 03.12.2017 - 07:03
fonte

1 risposta

4

Poiché esiste un requisito esterno su come viene costruita la chiave di un componente figlio, deve esserci un tipo di contratto nella costruzione di componenti figlio che assicuri il formato della chiave.

Come implementare al meglio questo requisito dipende da quale percentuale di tutti i componenti del sistema è un componente figlio.
Se si dispone solo di un componente non aggregato (aggregato), quindi cambierei i costruttori delle classi componente per accettare il componente principale e l'indice. Quindi possono costruire la chiave corretta da soli. Solo un componente non secondario avrebbe bisogno di un costruttore che crea la chiave in un modo diverso (o lo accetta dall'esterno).

Se esiste una grande percentuale di componenti non secondari, il tuo progetto attuale con la fabbrica è perfettamente a posto.

    
risposta data 03.12.2017 - 08:06
fonte

Leggi altre domande sui tag