Ho uno scenario comune in cui ho un oggetto (a) che influisce logicamente su un altro oggetto (b), come a fa una nota su b, o su un segno b come disabilitato (di solito a è un oggetto utente del sistema e b è una specie di oggetto aziendale come un cliente o un appuntamento).
In passato, il metodo era sull'oggetto interessato come:
customer.Disable(user); // user is marking the customer as disabled
... ma non legge bene (appare a ritroso). Il contrario:
user.Disable(customer);
... legge meglio, ma c'è qualcosa a riguardo che non riesco a capire che non sembra giusto. L'unica altra opzione è avere un intermediario statico:
ThirdPartyClass.DisableCustomer(customer, user);
... ma gli oggetti del dominio finiscono per diventare più simili agli DTO e preferisco l'approccio del modello di dominio perché ha più senso.
Quindi la domanda è: che ha più senso? C'è un'opzione che non ho considerato? Chi possiede effettivamente un'operazione come questa?
Modifica
Con la seconda opzione, gli oggetti utilizzabili nel sistema (di solito gli utenti) diventano enormi perché gli utenti del sistema sono quelli che praticamente fanno e influenzano tutto.