Would it be bad design to abstract a graphics library and wrap it in a
single class?
La risposta è: non necessariamente!
Ma nel tuo caso: Probabilmente!
Immagino che quello che stai cercando di fare abbia anche un nome: si chiama pattern di facciata e viene usato per semplificare le routine complesse e le dipendenze sequenziali per l'utente.
It provides various classes for handling graphics, input, etc, but I
would like to wrap it all up in a single Media class.
Sento un cattivo design OO qui perché assegni a una classe molteplici responsabilità. Input Handling non dovrebbe condividere il codice con le routine grafiche. Questa classe potrebbe benissimo aggiungere qualcosa di non realizzabile alla fine.
However, I have read several times that monolithic, do-it-all classes
such as this might not be a good idea.
Why is that?
Riguarda la manutenibilità. Stai accoppiando cose che non appartengono insieme, e ogni parte del tuo sistema che la usa poi ha un strong accoppiamento con queste cose. Permettetemi di darvi un rapido esempio di codice che ho visto di recente:
//bad! This is in a data access class! I have effectively coupled it to web libraries by using HttpServletRequest
public List<Reason> getReasons(HttpServletRequest request, String filter) {
Locale locale = request.getLocale();
//get reasons and process according to locale
}
//much much better: No coupling/dependencies to web environment
public List<Reason> getReasons(Locale locale, String filter) {
//get reasons and process according to locale
}
Pensa a questo esempio: se usassi quella classe in Desktop-Application, avrei comunque tutte le cose del web lì, solo perché qualcuno ha deciso di usare HttpServletRequest. Sarebbe una dipendenza inutile.
Potresti chiedere come questo sia direttamente correlato alla tua domanda, e la risposta è: si tratta di dipendenze / accoppiamenti. Più dipendenze, più forti sono i tuoi accoppiamenti, più difficile sarà il tuo codice da riutilizzare o migliorare o mantenere senza portare in giro molta spazzatura o usando brutti hack.