Abbiamo un contesto limitato che si occupa dei pagamenti .
Sto provando a modellare il caso, in cui Commerciante può creare un altro commerciante e ereditare alcune delle sue proprietà in questo caso: utenti che sono necessari per l'autenticazione in un altro contesto limitato (processore di pagamento) che funge da servizio di hosting aperto con un livello di anti-corruzione dalla nostra parte.
class Merchant {
public Merchant registerSubMerchant(name, ..);
...
}
Il problema è che Utente è anche un aggregato come Commerciante . Il processo creerà un'istanza di commerciante, la memorizzerà, ma dovrò anche caricare tutti gli utenti dal commerciante principale e assegnarli al commerciante appena creato e anche generare un nuovo utente per l'autenticazione contro il nostro sistema:
users.filter(user -> user.realm() == PAYMENT_PROCESSOR)
.forEach(user -> {
user.assignTo(merchantId);
userRepository.store(user);
});
User anotherUser = new UserForOurSystem(passwordGenerator).assignTo(merchantId);
userRepository.store(anotherUser);
L'intero processo dovrebbe essere (suppongo) in una transazione per essere valido. Ora ecco il problema: sto infrangendo la regola (e credo anche molti altri) che solo 1 istanza aggregata può essere modificata (o creata?).
So che sto facendo qualcosa di sbagliato, ma non sono sicuro che gli utenti debbano essere inclusi nell'aggregato Merchant o dovrebbero conoscere alcuni utenti e le loro password, ecc. Come posso modellare tale situazione?