Splitting API e implementazione tra pacchetti / jar

0

Ho un dilemma. Come fare meglio? Ho un sacco di interfacce API e le loro implementazioni che utilizzano alcuni framework / librerie specifici che non vorrei esporre. Non riesco a decidere se mettere entrambe le interfacce API e la loro implementazione nello stesso pacchetto o dividerle in pacchetti diversi: uno (o più) per l'API e altri per la loro implementazione. Ecco cosa intendo ( versione semplificata ):

single-package:

Split-pacchetti:

NelprimocasoabbiamoAPIeimplementazionenellostessopacchettoche(può)semplificarel'accessoadesso.Manelsecondocasopotremmoanchedividerloinunfilejardiversochesupporteràpiù"incapsulamento" da una particolare implementazione.

Personalmente , sceglierei di suddividerli in file jar diversi per mantenere l'API isolata dalle implementazioni.

    
posta user3663882 11.05.2016 - 18:57
fonte

1 risposta

2

Bene, penso che la migliore guida siano i Principi del pacchetto , e più specificamente i tre sulla coesione dei pacchetti (cosa dovrebbe essere raggruppati in pacchetti).

  1. Reuse-release equivalence principle (REP)
  2. Principio di riutilizzo comune (CRP)
  3. Principio di chiusura comune (CCP)

Il primo e il terzo offrono alcune basi per suddividere l'API e la sua implementazione in diversi pacchetti.

Per il primo (REP), si può sostenere che un'implementazione può avere un ciclo di rilascio diverso dall'API (quindi non dovrebbero essere nello stesso pacchetto) Per il terzo (PCC), penso che un argomento più strong possa essere fatto. Poiché l'API, in quanto astrazione, è più stabile dell'implementazione concreta e pertanto cambierà per motivi diversi dall'implementazione, non dovrebbe essere raggruppata nello stesso pacchetto.

Dai restanti principi (quelli dell'accoppiamento):

  1. Principio di dipendenza aciclica (ADP)
  2. Principio di dipendenza stabile (SDP)
  3. Principio delle astrazioni stabili (SAP)

è chiaro che il secondo e il terzo implicano implicitamente anche la separazione dell'API dall'implementazione.

    
risposta data 12.05.2016 - 19:51
fonte

Leggi altre domande sui tag