INICIALIZA?ÃO DA CLASSE

F001E 23/08/2017 13:03:10
#475970
Bom tarde a todos !

Hoje esta triste, como inicializo as classes usuário e menus a partir da classe menupermissão ? Deu branco .
KERPLUNK 23/08/2017 13:07:18
#475971
Resposta escolhida
MenuPermissoes, contém uma propriedade [Ô]Usuarios[Ô] que é outra classe, logo, precisa ser insntanciada também antes de passar valores para suas propriedades:

obj.Usuarios = new Usuarios(); //ou seja lá qual o tipo que [Ô]Usuarios[Ô] tenha
obj.Usuarios.ID = 99;


O mesmo para [Ô]Menus[Ô], que deve ser o mesmo caso.
GUIMORAES 23/08/2017 13:47:17
#475972
Citação:

:
MenuPermissoes, contém uma propriedade [Ô]Usuarios[Ô] que é outra classe, logo, precisa ser insntanciada também antes de passar valores para suas propriedades:


obj.Usuarios = new Usuarios(); //ou seja lá qual o tipo que [Ô]Usuarios[Ô] tenha
obj.Usuarios.ID = 99;


O mesmo para [Ô]Menus[Ô], que deve ser o mesmo caso.



Exatamente como o Kerplunk disse. O que você pode fazer também, é instanciar uma nova Classe Usuarios no construtor da classe MenuPermissoes, assim ao instanciar a classe MenuPermissoes, este erro não irá ocorrer, ou fazer da forma que o Kerp demonstrou, o resultado é o mesmo.
KERPLUNK 23/08/2017 14:02:40
#475974
Citação:

:
:
MenuPermissoes, contém uma propriedade [Ô]Usuarios[Ô] que é outra classe, logo, precisa ser insntanciada também antes de passar valores para suas propriedades:


obj.Usuarios = new Usuarios(); //ou seja lá qual o tipo que [Ô]Usuarios[Ô] tenha
obj.Usuarios.ID = 99;


O mesmo para [Ô]Menus[Ô], que deve ser o mesmo caso.

Exatamente como o Kerplunk disse. O que você pode fazer também, é instanciar uma nova Classe Usuarios no construtor da classe MenuPermissoes, assim ao instanciar a classe MenuPermissoes, este erro não irá ocorrer, ou fazer da forma que o Kerp demonstrou, o resultado é o mesmo.


Apesar de essa prática não ir diretamente contra às melhores práticas, pessoalmente não acho uma boa idéia. Esse tipo de situação pode ser contornada de várias formas, yield, Lazy<T> e até mesmo Observable<T>, mas a codificação complica um pouco e não acho boa idéia investir nisso caso não tenha ainda domínio de OOP.
F001E 23/08/2017 14:19:59
#475976
Putz GUIMORAES, o que me deu branco foi a parte do construtor, agora deu certo. O que o Kerplunk falou tbm funciona mas pelo construtor só instancio a classe MenuPermissoes.
F001E 23/08/2017 14:24:36
#475977
Citação:

Apesar de essa prática não ir diretamente contra às melhores práticas, pessoalmente não acho uma boa idéia. Esse tipo de situação pode ser contornada de várias formas, yield, Lazy<T> e até mesmo Observable<T>, mas a codificação complica um pouco e não acho boa idéia investir nisso caso não tenha ainda domínio de OOP.



Qual prática ? Que você mencionou ou a do GUIMORAES ? Ou o que estou fazendo ?
KERPLUNK 23/08/2017 15:16:04
#475978
Citação:

:
Apesar de essa prática não ir diretamente contra às melhores práticas, pessoalmente não acho uma boa idéia. Esse tipo de situação pode ser contornada de várias formas, yield, Lazy<T> e até mesmo Observable<T>, mas a codificação complica um pouco e não acho boa idéia investir nisso caso não tenha ainda domínio de OOP.

Qual prática ? Que você mencionou ou a do GUIMORAES ? Ou o que estou fazendo ?


Sou defensor de padrões S.O.L.I.D. e esses princípios defendem separação de responsabilidades. Instanciar propriedades tipadas, não é responsabilidade do construtor da classe base. Você deve instanciar essas propriedades quando forem ser usadas. Um objeto(no seu caso, uma propriedade) [Ô]null[Ô], deve permanecer null até que seja necessário ser instanciada. Imagine o caso de 1 para muitos, tipo você tem uma classe com uma propriedade List<T> de itens e esses itens podem ser um milhão de entidades. Imagine que cada uma dessas entidades Item, tem uma propriedade tipada qualquer. Para cada uma que você adicionar na lista, você estará jogando [Ô]lixo[Ô] na pilha, fazendo todo o resto do processo interno(incluindo GAC), ser mais lento e mais propensos à serem bem mais lentos.
Um paralelo à isso, seria você instanciar todos os forms da sua aplicação caso abra um deles. Imagine, você abre um form e instancia todos os outros, todas as vezes.
F001E 23/08/2017 16:36:00
#475979
Citação:

Imagine o caso de 1 para muitos, tipo você tem uma classe com uma propriedade List<T> de itens e esses itens podem ser um milhão de entidades. Imagine que cada uma dessas entidades Item, tem uma propriedade tipada qualquer. Para cada uma que você adicionar na lista, você estará jogando [Ô]lixo[Ô] na pilha, fazendo todo o resto do processo interno(incluindo GAC), ser mais lento e mais propensos à serem bem mais lentos.



Seria esse exemplo ?

Lista permissões trazendo os menus e a propriedade Menus, trazendo menus novamente. Vamos supor que a propriedade Menus teria 100 itens, então listaria os 100 itens. Realmente vai ficar lento.
KERPLUNK 23/08/2017 17:00:28
#475980
Citação:

:Seria esse exemplo ?

Lista permissões trazendo os menus e a propriedade Menus, trazendo menus novamente. Vamos supor que a propriedade Menus teria 100 itens, então listaria os 100 itens. Realmente vai ficar lento.


é também um caso. é que carregando coisas desnecessárias quando existem múltiplas dependências, sempre vai causar isso. A regra é somente ler quando for necessário.
Tópico encerrado , respostas não são mais permitidas