Przepraszamy za niewyraźny tytuł; nie mógł wymyślić, jak wyrazić to lepiej. Oto najważniejsze z pytań:Jak zaprojektować łatwo rozszerzalny interfejs API z prostotą Enums?
Highlights
- Zadawanie wzoru API pytanie o bibliotece ExifTool for Java.
- Oto an example tego, jak wygląda bieżący interfejs API.
- Jako USER, interfejs API jest bardzo prosty w użyciu, ponieważ po prostu przekazujesz w Enums dla metadanych obrazu, które chcesz odzyskać.
- Jako DEV, API jest nieco do bani, ponieważ nie można łatwo rozszerzyć klasy bazowej o więcej typów Enum, aby obsługiwać dodatkowe metadane, które mogą nie być obsługiwane bezpośrednio w bibliotece.
- Po prostu wstępnie zdefiniowano i dodano "wszystkie metadane" to non-trivial.
Pytanie
Biorąc pod uwagę, że informacje dotyczące instalacji, co ja po próbuje znaleźć sposób, aby wstępnie określić najczęstsze flagi 30 lub 40 metadanych, że ludzie zazwyczaj mają ze swoich obrazów; teraz wszystko jest defined as an Enum, ale klasa nie jest rozszerzalna w ten sposób.
Jeśli przejdę do opcji "Class-per-Metadata-Flag", rozszerzalność będzie prosta, ale API będzie o wiele mniej przyjazne w użyciu po wyjęciu z pudełka.
Rozważę zrobienie v2.0 tej biblioteki Java 8+, jeśli zamknięcia oferują naprawdę piękne i proste rozwiązanie, ale poza tym zdecydowanie wolałbym, aby był kompatybilny z większą liczbą systemów (Java 6/7) niż mniej.
Podsumowanie
Moje cele dla biblioteki są „proste w obsłudze i rozszerzyć” - czuję się przybity „prosty w obsłudze” aspekt w wydaniu 1.x, ale biblioteka nie jest łatwo Rozszerzalny i chciałbym to poprawić w serii 2.x.
Siedziałem w wydaniu 2.x przez ponad rok, czekając na inspirację do strajku i to mi umknęło; Mam nadzieję, że ktoś może dostrzec mój błąd i mogę przenieść libę do przodu w naprawdę elegancki sposób.
Dziękuję za czasy!
Jeśli chcesz najprostszy, najłatwiejszy i najbardziej elastyczny/potężny do rozszerzenia, [właściwość worka] (http://steve-yegge.blogspot.com/2008/10uniwersalny-design-pattern.html) jest sposobem iść. –
@MattBall Nie jestem zaznajomiony z tym terminem. Patrząc na sekcję Właściwość tego linku, masz na myśli coś w rodzaju zwykłego przejścia w Mapę ze wszystkimi kluczami reprezentującymi metadane, których żąda osoba żądająca, a następnie biblioteka wypełnia powiązane wartości dla wszystkich tych kluczy i zwraca tę samą mapę? (nie jest to zły pomysł ... bardzo prosty i elastyczny) –