Evita i nomi smurf durante il wrapping di una libreria

3

Sto programmando una libreria API che fornisce classi come Document, Folder, ContentElement, Action ...

Queste classi sono fondamentalmente solo la loro rispettiva rappresentazione dal database.

Mi piacerebbe estendere (non significa necessariamente sottoclasse qui, potrebbe anche essere composizione) queste classi per una più facile gestione nella mia applicazione, per esempio. sovrascrivere toString () e fornire metodi di manipolazione dedicati per i miei casi d'uso.

Il nome di queste classi 'wrapper' pone un problema:

  • andare su MyDocument, MyFolder ... è solo brutto (anche con un prefisso migliore)
  • lo stesso vale per la notazione postfix DocumentWrapper, FolderWrapper ...
  • L'uso dello stesso identico nome causa ambiguità e conflitti di denominazione
  • L'inventario di nuove parole (ad esempio File anziché Documento e Raccoglitore invece di Cartella) nasconde la classe API che viene incapsulata e fuorvia l'utente delle mie classi perché non può usare la sua solita terminologia

In un mondo ideale, aggiornerei semplicemente le classi API alle mie esigenze che purtroppo non posso poiché la libreria è closed source.

C'è un altro modo per "estendere senza ridenominare"? Ho perso o devo andare con una delle soluzioni sopra?

    
posta tannerli 18.09.2018 - 15:30
fonte

1 risposta

8

Il principio del minimo stupore tenderebbe a incoraggiarti ad evitare di rinominare il più possibile. La versione estesa di Folder non diventerebbe quindi "ManillaEnvelope", poiché ciò aggiungerebbe confusione inutile a chiunque legga il tuo codice.

Credo che il punto cruciale da porsi sia se ti riferirai o meno all'API al di là di queste classi avvolte, perché altrimenti potresti chiamarlo allo stesso modo e metterle semplicemente nel loro pacchetto con un nome significativo ( root.package.libraryname.api.Folder ?). Questa è comunque la situazione ideale, come se si stesse avvolgendo la funzionalità di una libreria, dovresti farlo completamente, in modo da avere solo un posto dove il tuo programma interagisce direttamente con la libreria stessa.

Altrimenti, penso che dovresti necessariamente aggiungere un prefisso per differenziare, altrimenti usare la classe base e la classe estesa di Folder diventerebbero piuttosto disordinati. E in questo caso il minimo di tutti i mali suggerirebbe di aggiungere un suffisso indicativo del nome della libreria (abbreviato se il nome della libreria è troppo lungo altrimenti).

    
risposta data 18.09.2018 - 15:42
fonte

Leggi altre domande sui tag