Problema DDD con progettazione aggregata (utenti, autenticazione)

2

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?

    
posta Slimer 18.09.2017 - 16:26
fonte

0 risposte

Leggi altre domande sui tag