Supponiamo che io abbia due servizi Person Service e Company Service e voglio mantenere dei collegamenti tra loro, ad esempio una persona è collegata alla società perché lavora lì o possiede la società ecc. Quindi andrò avanti e creerò un database tabella come
PersonId, CompanyId, RelationType
Ora la logica aziendale può essere scritta in uno dei servizi che il cliente chiamerà per collegarli. Ma cosa succede se ho bisogno di collegare più persone a una singola azienda e più società a una sola persona. Ho bisogno di avere due metodi, uno che prende solo PersonId e l'elenco di CompanyIds e uno che prende CompanyId singolo e più PersonID. Quindi ho scritto due diversi metodi in ogni servizio. Il seguente metodo è in Person Service
void LinkPersonToCompanies(long personId,
IEnumerable<long> companyIds,
RelationType type)
e sotto il metodo si trova nel servizio aziendale
void LinkCompanyToPersons(long companyId,
IEnumerable<long> personIds,
RelationType type)
So che questi sono due metodi diversi ma stanno facendo lo stesso compito, cioè la loro logica si ripete. Può diventare difficile da mantenere perché dovrebbe essere apportato un singolo cambiamento nel meccanismo di collegamento a entrambi i metodi. È contro il principio ASCIUTTO? Quale dovrebbe essere il design giusto per risolvere efficacemente questo problema?