Consiglio sul design di un'estensione

Ciao,

mi sto accingendo a scrivere un’estensione per ruby (ripod) che
implementi
i binding per la libreria libgpod e mi trovo davanti ad una scelta di
design sulla quale vorrei un consiglio.

La libreria consente di accedere al database iTunesDB, leggerlo,
modificarlo, aggiungere canzoni, miniature, playlist (consente anche di
accedere al database delle foto, ma di quello mi occuperò in seguito).

Per aggiungere una canzone, ad esempio, è comunque sià necessario aprire
il database dell’ipod, atto attraverso il quale si ottiene una struttura
dati itdb_iTunesDB, e passare tale struttura come argomento della
funzione
che si occupa di fare la magia.

Per questo motivo, ho pensato di realizzare una classe Ripod dove si
trovano i metodi per aggiungere/rimuovere/modificare canzoni, miniature
e
playlist, e poi delle sottoclassi Ripod::Track, Ripod::Playlist e
Ripod::ArtWork che si occupino di contenere i dati relativi. Un qualcosa
del tipo:

Ripod#track_add(Ripod::Track track)
#track_remove

Ripod#artwork_add(Ripod::ArtWork artwork)
#artwork_remove

Ripod#playlist_add(Ripod::Playlist playlist)
#playlist_remove

ecc…

Il problema è che non sono convinto che questa sia la migliore scelta,
pertanto volevo sentire anche il vostro parere.

Ciao,
Nico

Il giorno lun, 15/10/2007 alle 15.34 +0200, Domenico Delle S. ha
scritto:

Per aggiungere una canzone, ad esempio, è comunque sià necessario aprire
Ripod#track_add(Ripod::Track track)
Il problema è che non sono convinto che questa sia la migliore scelta,
pertanto volevo sentire anche il vostro parere.

Secondo me e’ la scelta azzeccata, poi magari guardati i bindings per
python per “rubare” qualche idea

— Domenico Delle S. [email protected] wrote:

 #track_remove


Ripod#artwork_add(Ripod::ArtWork artwork)
#artwork_remove

Ripod#playlist_add(Ripod::Playlist playlist)
#playlist_remove

ecc…

Hai pensato a usare un classico duble dispatch?
Inverti l’idea:
Playlist.add_to(db)
Track.add_to(db)
ArtWork.add_to(db)

Tanto queste richimano ognuna una funzione C diversa.
Poi definisci #add nella classe Ipod come una semplice
def add(obj)
obj.add_to(self)
end

e lo stesso per remove. Che ne pensi?


Goto 10: http://www.goto10.it
blog it: http://riffraff.blogsome.com
blog en: http://www.riffraff.info

  ___________________________________________________________

Yahoo! Answers - Got a question? Someone out there knows the answer. Try
it
now.