Come creare il servizio stateless DDD e progettare il modello di costruzione

-1

Voglio creare un pattern builder in un'applicazione DDD, ma il mio costruttore non è stateless, non è un'entità e non è un servizio.

Se l'apolide dovrebbe essere utilizzato per il servizio, come rendere il modello di builder come un servizio stateless con il parametro specifico del sottotipo e l'inizializzazione?

E come rendere la composizione di classe factory oltre l'inerzia.

(La mia classe di builder è chiamata factory)

Questo è corretto? Poiché la proprietà EnvoieGAV impostata nel costruttore FactoryFicheGav non è stateless.

Classe base

public interface IFactoryFiche
{

}

public interface IFactoryForType
{
    ContactInfoCommands GetContactInformation();

    void InitFiche(Fiche fiche);
}

public class FactoryFiche : IFactoryFiche
{
    public void CreateFiche(IFactoryForType factoryForType)
    {
        var contact = factoryForType.GetContactInformation();
        Fiche fiche = new Fiche()
        {
            nom = contact.Nom,
            prenom = contact.Prenom,
            Adresse1 = contact.Adresse1,
            Adresse2 = contact.Adresse2,
            ville = contact.Ville,
            codePostal = contact.CodePostal,
            email = contact.Email,
        };

        factoryForType.InitFiche(fiche);
    }
}

Classe specifica

public class FactoryFicheGav : IFactoryForType
{
    public EnvoiGAVCommands EnvoieGAV { get; set; }


    public  FactoryFicheGav(EnvoiGAVCommands envoieGAV)
    {
        EnvoieGAV = envoieGAV;
    }

    public ContactInfoCommands GetContactInformation()
    {
        return EnvoieGAV.ContactInfoCommands;
    }

    public void InitFiche(Fiche fiche)
    {

    }
}
    
posta ArDumez 06.09.2016 - 10:46
fonte

1 risposta

-1

Sì, ho trovato una soluzione, uso il "comando" generico e il contesto

Classe base

public interface IFactoryFiche<COMMAND>
{
    void CreateFiche(IFactoryForType<COMMAND> factoryForType, COMMAND command, string origine);
}

public class FactoryFiche<COMMAND> : IFactoryFiche<COMMAND>
{
    [Dependency]
    public IFicheRepository FicheRepository { get; set; }

    public void CreateFiche(IFactoryForType<COMMAND> factoryForType, COMMAND command, string origine)
    {
        var contact = factoryForType.GetContactInformation(command);
        var composition = factoryForType.GetCompositionInformation(command);

        if (string.IsNullOrEmpty(contact.Email))
        {
            throw new ReceptionException("L'email est obligatoire");
        }

        Fiche fiche = new Fiche()
        {
            nom = contact.Nom,
            prenom = contact.Prenom,
            Adresse1 = contact.Adresse1,
            Adresse2 = contact.Adresse2,
            ville = contact.Ville,
            codePostal = contact.CodePostal,
            email = contact.Email,
            Type = (int)factoryForType.GetType()
        };

        factoryForType.InitFiche(fiche, command);

        FicheRepository.Add(fiche);
        FicheRepository.Save();
    }
}

Classe specifica

public interface IFactoryForType<COMMAND>
{
    ContactInfoCommands GetContactInformation(COMMAND cmd);

    CompositionCommands GetCompositionInformation(COMMAND command);

    void InitFiche(Fiche fiche, COMMAND command);

    Fiche.TypeFiche GetType();
}

public class FactoryFicheGav : IFactoryForType<EnvoiGAVCommands>
{
    public ContactInfoCommands GetContactInformation(EnvoiGAVCommands command)
    {
        return command.ContactInfoCommands;
    }

    public void InitFiche(Fiche fiche, EnvoiGAVCommands command)
    {
        fiche.Complement = command.Commentaire;
    }

    public CompositionCommands GetCompositionInformation(EnvoiGAVCommands command)
    {
        return command.CompositionCommands;
    }

    public Fiche.TypeFiche GetType()
    {
        return Fiche.TypeFiche.GAV;
    }
}
    
risposta data 12.09.2016 - 09:09
fonte

Leggi altre domande sui tag