1
resposta

Orientação Objeto x Mapeamento

        class A {

            public IList<D> BagTipo0 { get; set; }

            public IList<E> BagTipo1 { get; set; }

            public IList<F> BagTipo2 { get; set; }
        }

        class B { }

        enum Tipo
        {
            Tipo0,
            Tipo1,
            Tipo2
        }

        abstract class C
        {
            public C(Tipo tipo)
            {
                Tipo = tipo;
            }

            public Tipo Tipo { get; protected internal set; }

            public B B { get; set; }

            public DateTime DataInicio { get; set; }
        }

        class D : C
        {
            public D() : base(Tipo.Tipo0)
            {
            }
        }

        class E : C
        {
            public E() : base(Tipo.Tipo1)
            {
            }
        }

        class F : C
        {
            public F() : base(Tipo.Tipo2)
            {
            }
        }

        //<class name="A">
        //    <bag name = "Addresses" >
        //        < key column="" />
        //        <one-to-many class="D" />
        //    </bag>
        //    <bag name = "Addresses" >
        //        < key column="" />
        //        <one-to-many class="E" />
        //    </bag>
        //    <bag name = "Addresses" >
        //        < key column="" />
        //        <one-to-many class="F" />
        //    </bag>
        //</class>

        //<class name="C" table="Historico">
        //    <discriminator column = "Tipo" type="Int32" Force="True"/>
        //    <property name = "Tipo" />

        //    <many-to-one name="B" class="B"/>
        //    <property name = "DataInicio" type="DateTime"/>

        //    <subclass name = "D" discriminator-value="0">
        //    </subclass>    

        //    <subclass name = "E" discriminator-value="1">
        //    </subclass>

        //    <subclass name = "F" discriminator-value="2">
        //    </subclass>
        //</class>

Com o objetivo de criar um histórico de atribuições (enum Tipo) da class B foi criado a class C, D, E, F. A classe A tem um bag por tipo de atribuição. Nota: Em cada bag a informação data é única e esta é validada em uma classe de validação e depois garantida por UK no banco de dados. Nota: É uma aplicação WEB.

Após assistir o conteúdo de refatoração de tipo, fiquei curioso em saber outras maneiras de fazer o cenário acima.

1 resposta

Oii, Diego! Tudo bem?

Peço desculpas pela demora no retorno a sua mensagem.

Uma solução para o cenário que você apresentou é utilizar a abordagem de herança, como você já fez com as classes C, D, E e F. Essa abordagem permite que você tenha diferentes tipos de atribuições, cada um representado por uma classe específica. No entanto, se você quiser evitar a criação de várias classes para cada tipo de atribuição, você pode considerar o uso de uma única classe de atribuição com um campo que armazena o tipo.

Por exemplo, você pode ter uma classe de atribuição chamada "Atribuicao" com os seguintes campos:

class Atribuicao {
    public Tipo Tipo { get; set; }
    public B B { get; set; }
    public DateTime DataInicio { get; set; }
}

Dessa forma, você pode ter uma lista de atribuições na classe A, onde cada atribuição contém informações sobre o tipo, o objeto B e a data de início.

class A {
    public IList<Atribuicao> Atribuicoes { get; set; }
}

Essa abordagem permite que você tenha um único tipo de classe para representar as atribuições, tornando o código mais simples e fácil de manter.

E caso tenha interesse em se aprofundar mais no conteúdo, recomendo a Documentação oficial de Programação orientada a objetos C#.

Espero ter ajudado.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software