Ci scusiamo per il titolo vago; non potevo pensare a come esprimerlo più chiaramente. Ecco i punti salienti delle domande:Come progettare un'API facilmente estendibile con la semplicità di Enums?
evidenza
- Chiedere una questione di progettazione API sulla libreria ExifTool for Java.
- Ecco il numero an example dell'aspetto dell'API corrente.
- In qualità di UTENTE, l'API è semplicissimo da utilizzare perché basta passare in Enum per i metadati dell'immagine che si desidera recuperare.
- Come DEV, l'API in qualche modo fa schifo perché non è possibile estendere facilmente la classe base con più tipi Enum per supportare metadati aggiuntivi che potrebbero non essere supportati direttamente nella lib.
- Semplicemente pre-definendo e supportando "tutti i metadati" è non-trivial.
Domanda
Dato che le informazioni di installazione, quello che sto dopo sta cercando di trovare un modo per predefinire i 30 o 40 bandiere di metadati più comuni che la gente di solito vogliono dalle loro immagini; in questo momento tutto è defined as an Enum, ma la classe non è estensibile in questo modo.
Se si esegue il percorso "Class-per-Metadata-flag", l'estensibilità sarà semplice, ma l'API sarà molto meno intuitiva da utilizzare immediatamente.
Prenderò in considerazione la possibilità di creare v2.0 di questa libreria Java 8+ se le chiusure offrono una soluzione davvero bella e semplice, ma altrimenti preferirei ovviamente mantenerlo compatibile con più sistemi (Java 6/7) rispetto a meno.
Sommario
I miei obiettivi per la libreria sono "semplice da usare ed estendere" - sento di aver inchiodato la "semplice da usare" aspetto con il rilascio 1.x, ma la libreria non è facilmente estensibile e vorrei correggerlo nella serie 2.x.
Sono stato seduto sull'uscita 2.x per oltre un anno in attesa dell'ispirazione per colpire e mi ha eluso; Spero che qualcuno possa individuare il mio errore e posso spostare la libreria in un modo davvero elegante.
Grazie per il momento ragazzi!
Se si desidera la più semplice, più semplice e più flessibile/potente da estendere, [property bag] (http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html) è il modo andare. –
@MattBall Non sono così familiare con quel termine. Guardando la sezione Proprietà di quel collegamento, intendi qualcosa come il semplice passaggio in una mappa con tutte le chiavi che rappresentano i metadati richiesti dal richiedente e quindi la libreria riempie i valori associati per tutte quelle chiavi e restituisce la stessa mappa? (non una cattiva idea ... molto semplice e flessibile) –