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.