Domanda

Ho scritto un programma di task manager utilizzando Java, e ha fatto un'implementazione dell'interfaccia utente singolo, per il momento in altalena. Il programma ha 3 strati per ora. Un livello di presentazione che interagisce con lo strato di dominio tramite un controller di caso d'uso, e, infine, uno strato di servizi tecnici usati per la persistenza. Ci sono diverse azioni che un utente può prendere a questo punto, come l'aggiunta di compiti, modificando lo stato di un compito, ecc ... Lo scopo del mio logger in questo schema è quello di tenere traccia di tutte le azioni intraprese dagli utenti. Quindi, ci sono alcuni posti dove ho potuto invocare il registratore di scrivere un comando. Io non farò alcuna registrazione nello strato di presentazione come questa sarebbe una decisione di progettazione terribile e così mi sono lasciato con il controller, l'interfaccia di comando (implementata per gestire l'esecuzione di tutti i comandi per la fine di attuare le funzioni di undo / redo ), o nelle classi di livello inferiore che vengono effettivamente manipolati, dire la classe compito per esempio.

Credo che il controllore è un'opzione relativamente discreta per questo in quanto funge da punto di contatto tra lo strato di interfaccia utente e il dominio, quindi tutti i comandi notevoli infine passano attraverso il controllore che rende facile verificare che tutti i metodi importanti vengono registrati. Un motivo per non farlo nel controllore è che si riduce la coesione, aumentare l'accoppiamento e potenzialmente portare ad un controller gonfio.

I comandi di cemento sono un altro luogo potenziale in quanto anche loro hanno tutte le informazioni necessarie per la registrazione. Ciò causare nuovamente i comandi diventano meno coeso e aumenta l'accoppiamento. Inoltre, se io non uso l'interfaccia di comando per l'adozione di un'azione su un oggetto di dominio che perdo la registrazione.

Finalmente Questo mi porta a implementare il registratore nel dominio di livello inferiore oggetti metodi. Questo è un buon candidato per la registrazione si verifica sempre se il programma viene utilizzato e tutte le informazioni necessarie sono disponibili. L'unica parte negativa è che i comandi logger verrà scarsamente distribuiti tra il dominio di livello inferiore oggetti che rende più difficile garantire che tutti i metodi giusti vengono abbattuti.

Mi piacerebbe avere un dibattito in corso su questo tipo di decisione e apprezzare tutti i tuoi commenti.

È stato utile?

Soluzione

Pensate praticità prima. La registrazione è spesso una manutenzione e preoccupazione amministrativa. Ogni strato nel tuo disegno è un candidato per la registrazione, ma per ragioni diverse.

Senza sapere la vostra gerarchia di oggetti di design e ...

Andando dal dominio UI, ogni strato è un'astrazione o la raccolta di comportamento dello strato precedente. Bisogna chiedersi cose come quello che livello di granularità stai cercando? Sarebbe utile per vedere una registrazione di un comando? Sarebbe anche utile per vedere la registrazione per ogni chiamate strato di dominio associato? Esso non può essere sempre facile da decifrare le chiamate dominio e associarlo a un particolare comando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top