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.runrestituisce un'istanzaResponse. -
Responseha bisogno di un'istanzaRequestda__init__ializzata.
La mia soluzione ingenua consisterebbe nel definire la classe astratta IRequest e IResponse da memorizzare nei rispettivi moduli. Di conseguenza
-
RequestimplementeràIRequeste dipenderà daIResponse -
ResponseimplementeràIResponsedipende 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?