Per prima cosa, un po 'di background. Ho un'applicazione che richiede l'uso di diversi fornitori di geocodifica esterni che non controllo. Utilizza un livello di servizio centrale all'interno dell'applicazione per inviarlo al fornitore appropriato.
Ho un numero di classi che sono organizzate in questo modo:
-
GeocodingService : responsabile di inviare una richiesta per geocodificare qualcosa a un fornitore appropriato.
- Ha un metodo pubblico,
geocode
, che accetta un GeocodingService :: Request e restituisce un GeocodingService :: Response . - Ogni risposta include: la latitudine della query geocoded, la longitudine della query geocoded e un elenco di componenti di indirizzo per l'indirizzo in cui è stata trovata la query (ad esempio, un componente di indirizzo per "123", uno per "Principale Street ", uno per" Paris "e così via).
- Ha un metodo pubblico,
-
GeocodingService :: AddressComponent : un singolo segmento di un indirizzo che contiene il nome del segmento, la sua abbreviazione e i suoi tipi. Ad esempio, la Francia ha un nome di
France
, un'abbreviazione diFR
, ed è uncountry
e unpolitical
segmento.- AddressComponent è responsabile di verificare che i tipi con cui un'istanza è impostata non siano al di fuori dei limiti di determinati tipi di tracciamento.
-
Indirizzo : modello di dominio per gli indirizzi, contenente sia un indirizzo di posta preferito (un elenco di linee di stringa) sia un elenco di componenti di indirizzo (un elenco di GeocodingService :: AddressComponents).
La mia domanda è: dove dovrebbe vivere AddressComponent - come classe di servizio (come fa ora), o con i miei altri modelli di dominio?
-
Se vive nel servizio , la vita è semplice. Ma ciò sembra sbagliato, perché ora un modello di dominio deve dipendere dalla definizione di un indirizzo di un servizio, e sembra che dovrebbero essere indipendenti.
-
Se vive come un oggetto dominio completo , allora questo non significa che il servizio ora è abbinato a un oggetto dominio? Anche questo sembra indesiderabile.
Come posso risolvere questa impasse?