Sto progettando un motore di gioco in Java.Java: Applicazione di oggetti doppiamente collegati
Al centro di questo motore esistono le due classi Asset e Attribute, in cui un asset ha un elenco di attributi. La maggior parte degli Attributi non ha bisogno di link per tornare al loro Attributo, il che significa che gli Attributi possono e spesso appaiono negli elenchi di più di un Bene. Tuttavia, esiste un'estensione dell'Attributo chiamata UniqueAttribute, che è un'implementazione per quelli che sono specifici del loro Asset e utilizza un link back.
Idealmente, il metodo AddAttribute di mio Asset sarebbe simile a questo se ho tagliato fuori l'altro codice:
public void addAttribute(Attribute attribute){ if(attribute instanceof UniqueAttribute) ((UniqueAttribute)attribute).setAsset(this); attributeList.add(attribute); }
Purtroppo, poiché vivono in diversi pacchetti, UniqueAttribute.setAsset() deve essere pubblico . Questo lascia il metodo aperto agli utenti esterni del motore con cui pasticciare, e anche se potrei semplicemente farlo a mano dicendo che usare direttamente questo metodo è un bug - sembra piuttosto sciatto.
La seconda opzione è quella di fornire al UniqueAttribute con l'attività per la costruzione, il che significa che il codice al momento della creazione sarebbe simile a questa:
asset.addAttribute(new UniqueAttribute(asset));
Anche se posso aggiungere un check-e- gettabile o asserito per confermare che la risorsa corretta è passata, fondamentalmente sto facendo affidamento sull'utente per connettere i due, che anch'io preferirei non fare.
La terza opzione consiste nel mordere il proiettile e inserire tutti e 50 i file java nello stesso pacchetto in modo da poter utilizzare solo la visiblity standard.
C'è una sorta di modello o qualcosa che vi aiuterà collegare questi due insieme senza esporre i fili, o costringendomi a mettere tutto in un unico pacchetto di massa?
Rant irrilevante: non mi è mai piaciuto che il concetto di sottofacili in java non sia stato realmente ampliato in alcun modo significativo. Un sotto pacchetto, per quanto riguarda java, è semplicemente un pacchetto diverso, e ci sono state molte occasioni in cui ho potuto fare con più modificatori di visibilità direttamente correlati a questo.
forse l'opzione 2 con una sorta di factory che conosce la relazione tra attributi e risorse univoci? –
Mentre suppongo che avere regole speciali per i pacchetti secondari possa aver funzionato, non è quasi mai necessario (dato che puoi usare sistemi come Spring o OSGi per forzare la separazione tra interfaccia e implementazione) e renderebbe le cose molto più complesse per molto piccolo guadagno. Un'implementazione semplice e affidabile è più importante di una funzionalità "carina" ma complessa. –