Va bene. Ho questo modello per modellare che viene fornito in due varianti che sono molto simili. Ho una classe che può essere considerata un "entry point" che chiamerà alcune classi manager a seconda dell'interazione dell'utente. Probabilmente possiamo paragonarlo a una classe controller.
Questa classe dovrebbe consentire all'utente di gestire entrambi i gruppi di utenti o utenti stessi. In entrambi i casi le operazioni sono abbastanza simili, è possibile aggiungere, modificare, rimuovere, visualizzare gruppi e utenti. I gruppi hanno un'altra operazione che consiste nell'aggiungere gli utenti al loro interno. Ecco dove sono bloccato:
La mia idea originale era di modellarla in questo modo:
-
class User
, -
class Group
, -
class GroupManager
, -
class UserManager
, -
class IManager
Tuttavia questo ha il problema di non essere in grado di modellare il fatto che i gruppi devono essere in grado di aggiungere utenti a loro. Se lo metto in IManager, è disponibile per UserManager che non ha senso e lo metto come metodo specifico di GroupManager, quindi non posso avere una singola "interfaccia" che sia meno pulita. Questo mi ha portato a saltare del tutto la classe IManager e avere solo entrambi i gestori, ma poi sembra rozzo e ripetitivo.
Esiste un modello di progettazione adeguato da applicare qui?
TLDR : qual è il modello di progettazione corretto in cui tutti i metodi per gestire un gruppo o utente dovrebbero avere la sensazione di una "interfaccia comune", ma essere comunque in grado di modellare il fatto che i gruppi dovrebbero essere in grado aggiungere utenti a se stessi.