Quale modello di progettazione dovrei usare per importare, aggiornare, esportare

0

Devo creare un semplice validatore di pagamenti. Sul seguente diagramma di classe, ho provato a presentare il modello dei pagamenti. Come puoi vedere, ogni tipo di pagamento eredita dalla classe Payments.

Ora voglio lavorare con questi pagamenti ma nascondere i dettagli in modo che l'utente possa accedere solo a ciò di cui ha bisogno. E quelle cose sono:

Load pagamenti dal percorso e elenco dei pagamenti di ritorno

Save pagamenti al percorso

Update elenco pagamenti in entrata e ritorno elenco aggiornato

Non sono sicuro che il modo in cui lo sto facendo sia corretto.

La mia idea sarebbe quella di utilizzare il modello di progettazione di facciata, quindi dovrebbe essere creata la classe PaymentsModel che conterrebbe i seguenti metodi:

public class PaymentsModel
{

    IList<ToBePaidPaymentsDto>  GetToBePaidPayments(string path){
         return new IList<ToBePaidPaymentsDto>();
    }

    IList<DonePaymentsDto>  GetDonePayments(string path){
         return new IList<DonePaymentsDto>();
    }

    IList<MissedPaymentsDto>  GetMissedPayments(string path){
         return new IList<MissedPaymentsDto>();
    }

    ...

}

Quindi crea una classe astratta:

public abstract class Payments<T> 
{
    protected string Delimiter {get; private set;}
    protected int NumberOfHeaders {get; private set;}

    public abstract IList<T> LoadRecords(string path);

    public abstract IList<T> UpdateRecords(IList<T> records);

    public void SaveRecords(string path, DataGridViewRowCollection records)
    {
    }

}

dove T è l'oggetto di trasferimento dati a seconda del tipo di pagamento, quindi:

ToBePaidPayments class userebbe ToBePaidPaymentsDto

DonePayments class userebbe DonePaymentsDto

come presentato di seguito

public class PaymentsToBePaid : Payments<IcsToBePaidPaymentDto> {

    public override IList<IcsToBePaidPaymentDto> LoadRecords(string path){

        return null;
    }


    public override  IList<IcsToBePaidPaymentDto> UpdateRecords(IList<IcsToBePaidPaymentDto> records){

        return null;
    }

}

e

public class PaymentsDone : Payments<IcsDonePaymentDto>
{
    public override IList<IcsDonePaymentDto> LoadRecords(string path){

        return null;
    }

    public override IList<IcsDonePaymentDto> UpdateRecords(IList<IcsDonePaymentDto> records){

        return null;
    }

}

Ora, la mia ultima domanda è - sto facendo questo correttamente? Sto applicando il modello di progettazione corretto e sto applicandolo correttamente? Grazie per il consiglio.

    
posta Macin 16.07.2014 - 16:08
fonte

1 risposta

1

Dato il tuo commento che i pagamenti hanno campi diversi in base al loro stato (e presumo quindi che questo sia un problema a causa delle tabelle del database), allora quello che farei è implementare una classe CsvReader che abbia un argomento di tipo generico, che mappa i campi Csv al POCO in questione. Pertanto dovresti scrivere un singolo CSV Importer e questo può essere utilizzato per importare i dati indipendentemente dalla classe che hai lanciato.

Allo stesso modo, puoi scrivere una classe CsvExporter che faccia la stessa cosa. Scrivi una volta, usa ovunque.

Alcuni commenti:

  1. Rimuovi l'estensione Dto . Sappiamo che cos'è un pagamento, può potenzialmente essere usato in molti posti (il database, il file CSV, la logica aziendale). Dto è rilevante in un singolo scenario specifico.

  2. Considera di cambiare Todo in Pending .

risposta data 16.07.2014 - 16:19
fonte

Leggi altre domande sui tag