Ho questa domanda, è più sul modello e in teoria ciò che è sbagliato o meno invece che se è possibile o meno (perché lo è).
In un design DDD, ho un DTO che sto convalidando, per controllare non valori null e altri valori certi.
C'è un campo che ho appena realizzato deve essere convalidato attraverso un servizio che farà una richiesta di rete.
Sto usando guice e questo DTO è fuori dal contesto (significa che non posso iniettare servizi) ma penso che dovrei essere in grado di farlo.
Secondo la teoria, il DTO dovrebbe avere questo tipo di convalide? questo è e non è la validazione dell'input nello stesso punto, questo perché voglio essere sicuro sia valido, ma valido dal punto di vista del business (secondo me), ma penso anche che non faccia affidamento sul livello anti corruzione.
Il flusso è così:
- Viene chiamato il controller che riceve come parametri DTO con il proprio validazioni, le DTO non sono nel contesto guice e non possono essere iniettate un servizio o altro
- Il servizio è chiamato (qui ottengo informazioni come utente registrato, servizio può inject) Service esegue alcune elaborazioni all'interno e quindi chiama una facciata (la facciata può iniettare)
- Chiamate di facciata ai repository, questo metodo è transazionale e quindi salva le informazioni.
Il mio validatore è fuori dal contesto e non può iniettare nulla.
Qualche idea dove sarebbe il migliore? Questo è un flusso di un endpoint che salva informazioni, questo è il motivo delle chiamate.
Ho visto i validatori sul repository, esso chiama un livello anti corruzione, ma per me è troppo tardi per convalidare questo tipo di informazioni (la convalida delle informazioni esiste attraverso una API esterna).
Le convalide nel DTO sono fatte nel costruttore. Altri livelli hanno ulteriori validazioni (come non null, ecc.)