Dove implementare il metodo per creare una copia logica di un oggetto

2

Sono impegnato nello sviluppo di codice che elabora un gruppo di oggetti che rappresentano rapporti mensili per regioni (ad esempio, un'istanza per regione al mese). Chiamiamoli RegionMonthlyReport oggetti. Alla fine del mese, è necessario creare un nuovo set di RegionMonthlyReport s per il mese successivo che viene popolato con valori di determinati campi dell'originale RegionMonthlyReport s.

In una parte del mio codice, queste copie saranno salvate nel database, in modo tale che abbiamo una serie completa di regioni a tempo pieno al mese: diciamo che avevamo 10 regioni, avremmo 10 record per un singolo mese; dopo un anno intero di questo, avremo 10 regioni x 12 mesi = 120 record.

La mia domanda è: dove dovrei implementare un metodo per creare la 'copia' dell'oggetto RegionMonthlyReport e quali sono i pro / contro di un approccio preferito? Dovrebbe essere

  • Un metodo su RegionMonthlyReport stesso, come RegionMonthlyReport.CreateCopy(newMonth)
  • Un metodo statico in una classe di utilità, come StaticUtilityClass.CreateRegionMonthlyReportCopy(sourceRegionMonthlyReport, newMonth)
  • Qualcos'altro

Nota che non sto parlando di alcun metodo Copy in un framework. Questa è una domanda sul design della soluzione. FWIW sto sviluppando in .NET / C #

Questa domanda sembra essere piuttosto rilevante - e indica che la seconda opzione potrebbe essere migliore - ma sono troppo un principiante per generalizzare con certezza il mio caso.

    
posta sasfrog 14.11.2018 - 07:45
fonte

2 risposte

5

Il modo intuitivo per farlo è creare una copia nell'oggetto stesso. Ecco alcuni argomenti:

  • chi conosce meglio dell'oggetto che cosa deve essere copiato?
  • chi ha un accesso migliore (controllato) al membro dell'oggetto rispetto all'oggetto stesso?
  • I linguaggi mainstream di
  • consentono di definire i costruttori di copia o gli operatori di assegnazione nell'oggetto stesso.
  • il modello di prototipo basato anche sulla clonazione di oggetti si basa su un'operazione di un oggetto.

Questo approccio è solido e comprovato e implementa la separazione delle preoccupazioni.

Se si dispone di diversi oggetti indipendenti che è necessario copiare (ad esempio report regionali?), è comunque possibile disporre di un servizio di copia che garantisce che tutti gli oggetti pertinenti vengano copiati contemporaneamente. Questo servizio dovrebbe tuttavia basarsi sul metodo di copia degli oggetti per la sua implementazione.

    
risposta data 14.11.2018 - 08:05
fonte
3

Oltre ad essere "intuitivo" da copiare nell'oggetto stesso, (@Christophe answer) the Il principio" esperto di informazioni "di GRASP supporta questa decisione.

"L'esperto di informazioni porterà a mettere la responsabilità sulla classe con la maggior quantità di informazioni necessarie per soddisfarla". In questo caso, la classe stessa.

    
risposta data 14.11.2018 - 08:18
fonte

Leggi altre domande sui tag