La regola di dipendenza in Pulisci architettura afferma che:
... that source code dependencies can only point inwards.
Mi sono imbattuto in un problema che non riesco a capire da solo.
Supponiamo che abbia un modulo con regole di business dell'applicazione abr
e 2 moduli per servizi che implementano interfacce da abr
.
+---------+
| abr | Business Layer (defines interfaces
+---------+ 'Service1' and 'Service2')
+----^ ^---+
- - -|- - - - - - - - - |- - - - -
| |
+-----+----+ +-----+----+
| service1 | | service2 | Dependencies (implement Interfaces
+----------+ +----------+ define in abr)
Ora i 2 servizi utilizzano la libreria di rete OkHttp
e dovrebbero utilizzare la stessa stringa di agente utente per le loro richieste.
Sfortunatamente non so come ottenerlo bene.
Le possibilità sono:
- Crea un modulo
sharedokhttpconfig
che entrambi i servizi dipendono da
Ciò violerebbe la regola di depdency - Inserisci il codice in abr
Ciò violerebbe il fatto cheabr
non dovrebbe conoscere la rete o anche che i servizi utilizzino okhttp - Duplica il codice per impostare l'agente utente in entrambi i servizi
La duplicazione del codice è errata
Un altro esempio potrebbe essere che il progetto ha 2 diversi moduli dell'interfaccia utente che sono fondamentalmente diversi, ma che in alcuni di essi la logica sarebbe la stessa.
Come formattare l'indirizzo di un utente.
Qualche suggerimento su come gestirlo?
Per chiarire perché penso che violerebbe la regola di dipendenza.
Il abr
è il mezzo della mia applicazione, non dovrebbe conoscere l'interfaccia utente o qualsiasi altra cosa, quindi tutte le dipendenze devono puntare nella sua direzione.
Ma quando aggiungo un modulo dal quale dipendono i 2 moduli, mi sembra che puntino verso l'esterno.
+---------+
| abr |
+---------+
+----^ Inwards ^---+
| |
+-----+----+ +-----+----+
| service1 | | service2 |
+----------+ +----------+
| Outwards? |
+----v v---+
+---------+
| snbl | snbl = share non-business logic
+---------+
O sta andando in quel modo ok perché dal punto di vista di abr
non è cambiato nulla?