Design Pattern per applicazione aziendale

3

Ho letto alcuni articoli sul pattern composito e voglio sapere se è applicabile nella seguente situazione,

Ho scoperto che "Un oggetto Entità composita può rappresentare una grana grossa oggetto e tutti i relativi oggetti dipendenti correlati "

public class PatientRegistrationDTO
{
    public string RegistrationNo;
    public string ID;
    public DateTime AdmitDate;    
}


public class PersonDTO
{
     public string ID{ get; set; }
     public string FullName { get; set; }
     public string FirstName { get; set; }
}

utilizzando questi due oggetti che ho bisogno di creare

public class Patient
  {
        public string ID{ get; set; }
        public string FullName { get; set; }
        public DateTime AdmitDate;
  }

Posso usare il pattern Composite per le applicazioni aziendali qui?

Posso aggiungere qualche classe come sotto?

public class PatientDTO
{
    public static Patient ConvertToEntity(PatientRegistrationDTO pregDTO, PersonDTO person)
    {
        Patient p = new Patient();
        p.ID= pregDTO.ID;
        p.FullName = person.FullName;
        p.AdmitDate = pregDTO.AdmitDate;

        return p;
    }
}
    
posta DevT 07.02.2013 - 19:53
fonte

2 risposte

3

Il pattern composito implica che quando si chiama un metodo perform() su un composito ( perform() che fa parte del contratto di interfaccia di IComponent), la chiamata viene reindirizzata a tutti i suoi sotto-componenti, fino a quando non sono elementi foglia che fare una cosa reale

Nel tuo caso, non vedo assolutamente alcuna differenza tra la grana grossa e la grana fine e quale gruppo di entità / rappresenta gli altri come composito.

Quindi direi di no , il pattern composito in realtà non si applica qui.

lo schema della classe wikipedia può esplicitare il mio punto di vista: (in questo diagramma eseguire = operazione)

    
risposta data 07.02.2013 - 23:19
fonte
1

Le tue classi consentono ai dati di essere modificati da forze esterne tramite i membri public . Dal momento che questi dovrebbero essere oggetti Entity, impone l'immutabilità dei dati. Se è necessario modificare un pezzo di dati, buttare via l'oggetto vecchio e crearne uno nuovo con i nuovi dati. Esempio:

public sealed class PatientRegistrationDTO
{
    private readonly string registrationNo;

    private readonly string id;

    private readonly DateTime admitDate;

    public PatientRegistrationDTO(string registrationNo, string id, DateTime admitDate)
    {
        this.registrationNo = registrationNo;
        this.id = id;
        this.admitDate = admitDate;
    }

    public string RegistrationNo
    {
        get
        {
            return this.registrationNo;
        }
    }

    public string ID
    {
        get
        {
            return this.id;
        }
    }

    public DateTime AdmitDate
    {
        get
        {
            return this.admitDate;
        }
    }
}

public sealed class PersonDTO
{
     private readonly string id;

     private readonly string fullName;

     private readonly string firstName;

     public PersonDTO(string id, string fullName, string firstName)
     {
         this.id = id;
         this.fullName = fullName;
         this.firstName = firstName;
     }

     public string ID
     {
         get
         {
             return this.id;
         }
     }

     public string FullName
     {
         get
         {
             return this.fullName;
         }
     }

     public string FirstName
     {
         get
         {
             return this.firstName;
         }
     }
}

E, infine, userei la composizione per fare questo:

public sealed class Patient
{
    private readonly PatientRegistrationDTO patientRegistration;

    private readonly PersonDTO person;

    public Patient(PatientRegistrationDTO patientRegistration, PersonDTO person)
    {
        // Appropriate nullity checks as needed here.
        this.patientRegistration = patientRegistration;
        this.person = person;
    }

    public string ID
    {
        get
        {
            return this.patientRegistration.ID;
        }
    }

    public string FullName
    {
        get
        {
            return this.person.FullName;
        }
    }

    public DateTime AdmitDate
    {
        get
        {
            return this.patientRegistration.AdmitDate;
        }
    }
}
    
risposta data 08.02.2013 - 18:15
fonte