Nel mio progetto personale ho cercato di aderire a MVC, ma mi sono anche reso conto che attaccare troppo a MVC può essere una cosa negativa in quanto rende difficile la scrittura e costringe il flusso del programma in modi strani ( cioè alcune semplici funzioni possono essere eseguite da qualcosa che normalmente non lo farebbe ed evitare i costi generali associati a MVC.
Quindi comincio a sentirmi giustificato in questo compromesso:
Ho alcuni "programmi manager" che "possiedono" dati e hanno un modo per manipolarli, quindi penso che contino come entrambi parte del modello, e parte del controllo e per me è più naturale che tenerti separato. Ad esempio: Uno dei miei manager è PlayerCharacterManager che ha questi metodi:
void buySkill(PlayerCharacter playerCharacter, Skill skill);
void changeName();
void changeRole();
void restatCharacter();
void addCharacterToGame();
void createNewCharacter();
PlayerCharacter getPlayerCharacter();
List<PlayerCharacter> getPlayersCharacter(Player player);
List<PlayerCharacter> getAllCharacters();
Spero che i nomi delle mothod siano abbastanza trasparenti da non aver bisogno di spiegazioni.
L'ho chiamato gestore perché aiuta a gestire tutti gli oggetti del modello "PlayerCharacter" che il codice crea e crea e mantiene una mappa di questi. Potrei anche averlo per memorizzare altre informazioni in futuro.
Ho in programma di avere altre due classi simili per questo tipo di controllo, ma orchestrerò quando e come ciò accadrà e cosa fare con i dati restituiti tramite una pura classe di controller. Questo dividere il controllo tra i responsabili informati e il controller, al contrario di operare solo attraverso un controller, sembra che semplificherà il mio codice e lo farà fluire di più.
La mia domanda è, è una scelta pericolosa, in termini di rendere il codice più difficile da seguire / testare / correggere? Questo qualcosa è stabilito come buono o cattivo o neutro? Non riesco a trovare nulla di simile, tranne l'idea di attori ma non è proprio il motivo per cui sto cercando di farlo.
Modifica: forse è necessario un esempio; Sto usando il controller per aggiornare la vista e accedere ai dati, quindi quando faccio clic sul pulsante "Aggiungi nuovo personaggio a un giocatore" chiameremo i metodi nel controller che poi andranno a dire alla classe PlayerCharacterManager di creare un nuovo personaggio Ad esempio, chiamerà la classe PlayerManager per aggiungere quel nuovo personaggio alla mappa giocatore-personaggio, quindi aggiungerà queste informazioni al database e dirà alla vista di aggiornare qualsiasi GUI effettuata. Questo è il tipo di "sequenza di controllo" che spero di creare con queste classi di manager.