Implenting ActiveRecord con ereditarietà?

0

Recentemente ho convertito una vecchia applicazione che utilizzava file XML come archivio dati per utilizzare SQL. Per evitare molte modifiche, ho praticamente creato classi di stili ActiveRecord ereditate dagli oggetti di business originali.

Ad esempio

SomeClassRecord :SomeClass
//ID Property
//Save method

Ho quindi usato questa nuova classe al posto dell'altro, a causa del polimorfismo non ho avuto bisogno di modificare alcun metodo che ha preso SomeClass come parametro.

Questo dovrebbe essere considerato "cattivo"? Quale sarebbe un'alternativa migliore?

    
posta King 02.08.2012 - 19:53
fonte

2 risposte

1

Non direi che questa è una cosa "cattiva" da fare. Ma ci sono alternative con i loro compromessi.

Supponendo che il modo in cui sono state utilizzate le classi originali fosse il pattern ActiveRecord, ecco alcune alternative.

  1. Modificate il metodo Save() di ogni oggetto business per delegare l'operazione di salvataggio a una classe responsabile della gestione dello storage, che si tratti di XML o SQL. Invece di decorare ogni classe, puoi delegare il salvataggio a una singola interfaccia, ad esempio IDataStore . Ad esempio:

    public class SomeClass {
        IDataStore dataStore; // how this gets set can vary also
        public void Save() {
            dataStore.Save(this);
        }
    }
    

    Ora la modifica è nell'implementazione di IDataStore .

  2. Continua a utilizzare i tuoi oggetti business nel livello aziendale, ma quando fai l'accesso ai dati, associa i tuoi oggetti business agli oggetti di accesso ai dati e usa Repository modello. Ad esempio:

    public class SomeBusinessProcess {
      public void DoSomeWork(SomeClass someClass) {
        // ... do some work on someClass ...
    
        // now save
        SomeClassDAO someClassDao = AutoMapper.Map<SomeClass, SomeClassDAO>(); // can use AutoMapper, for example
        repository.Save(someClassDao);
      }
    

Puoi davvero portarlo il più lontano possibile, in base a quali sono le tue esigenze.

    
risposta data 11.09.2012 - 21:49
fonte
1

In nessun modo questa non è una cosa "cattiva" da fare. Quello che hai fatto è simile allo schema del decoratore. link

In effetti ti suggerisco di leggere il pattern del decoratore poiché è uno strumento utile per il tuo arsenale di design.

    
risposta data 03.08.2012 - 08:21
fonte

Leggi altre domande sui tag