Per dare un po 'di contesto, sto usando python. Abbiamo la seguente struttura del pacchetto:
/package_name
/request.py # defines class Request
/response.py # defines class Response
Supponiamo anche di avere una dipendenza bidirezionale a livello di classe e modulo:
- Il metodo
Request.run
restituisce un'istanzaResponse
. -
Response
ha bisogno di un'istanzaRequest
da__init__
ializzata.
La mia soluzione ingenua consisterebbe nel definire la classe astratta IRequest
e IResponse
da memorizzare nei rispettivi moduli. Di conseguenza
-
Request
implementeràIRequest
e dipenderà daIResponse
-
Response
implementeràIResponse
dipende daIRequest
quindi la dipendenza circolare a livello di classe è sconfitta.
Tuttavia, abbiamo ancora una dipendenza bidirezionale a livello di modulo, che impedisce l'importazione dei moduli quando si utilizza python. La dipendenza del modulo bidirezionale può essere risolta memorizzando le classi astratte in un terzo modulo diciamo interfaces.py
, ma mi sembra una soluzione dubbia.
Domanda : Sto violando qualsiasi principio di architettura? Quali sono le possibili soluzioni?