Como o seu problema é principalmente estilístico (não querendo encher o construtor com várias declarações), ele também pode ser resolvido estilisticamente.
Do meu ponto de vista, muitas linguagens baseadas em classes têm o construtor como uma função com o nome do próprio nome da classe. Estilisticamente, poderíamos usar isso para criar uma classe ES6 que estilisticamente ainda faz sentido, mas não agrupa as ações típicas que ocorrem no construtor com todas as declarações de propriedade que estamos fazendo. Simplesmente usamos o construtor JS real como a "área de declaração" e, em seguida, criamos uma classe denominada função que de outra forma tratamos como a área "outras coisas do construtor", chamando-a no final do construtor verdadeiro.
"use strict";
classe MyClass
{
// apenas declare suas propriedades e chame this.ClassName (); daqui
construtor(){
this.prop1 = 'blá 1';
this.prop2 = 'blá 2';
this.prop3 = 'blá 3';
this.MyClass ();
}
// todos os tipos de outras coisas "construtoras", não mais confundidas com declarações
Minha classe() {
doWhatever ();
}
}
Ambos serão chamados quando a nova instância for construída.
É como ter dois construtores nos quais você separa as declarações e as outras ações que deseja executar, e estilisticamente torna difícil demais entender o que está acontecendo.
Acho que é um bom estilo de usar ao lidar com muitas declarações e / ou muitas ações que precisam acontecer na instanciação e que desejam manter as duas idéias distintas uma da outra.
OBSERVAÇÃO : propositalmente, não uso as idéias idiomáticas típicas de "inicializar" (como um init()
ou initialize()
método) porque essas são frequentemente usadas de maneira diferente. Existe uma espécie de diferença presumida entre a ideia de construir e inicializar. Ao trabalhar com construtores, as pessoas sabem que são chamadas automaticamente como parte da instanciação. Vendo um init
método que muitas pessoas presumem, sem uma segunda olhada, que precisam fazer algo ao longo da forma var mc = MyClass(); mc.init();
, porque é assim que você normalmente inicializa. Não estou tentando adicionar um processo de inicialização para o usuário da classe, estou tentando adicionar ao processo de construção da própria classe.
Embora algumas pessoas possam dar uma olhada duas vezes por um momento, esse é realmente o ponto: comunica a elas que a intenção faz parte da construção, mesmo que isso as faça dar uma olhada duas vezes e ir "não é como os construtores do ES6 funcionam "e dê uma segunda olhada no construtor real para dizer" ah, eles chamam isso de baixo, eu vejo ", isso é muito melhor do que NÃO comunicar essa intenção (ou comunicar incorretamente) e provavelmente obter muito pessoas usando errado, tentando inicializá-lo de fora e lixo. Isso é muito intencional para o padrão que sugiro.
Para aqueles que não querem seguir esse padrão, o oposto exato também pode funcionar. Farm as declarações para outra função no início. Talvez o nomeie "propriedades" ou "publicProperties" ou algo assim. Em seguida, coloque o restante do material no construtor normal.
"use strict";
classe MyClass
{
properties () {
this.prop1 = 'blá 1';
this.prop2 = 'blá 2';
this.prop3 = 'blá 3';
}
constructor () {
this.properties ();
doWhatever ();
}
}
Observe que esse segundo método pode parecer mais limpo, mas também tem um problema inerente, onde properties
é substituído quando uma classe usando esse método se estende a outra. Você precisaria dar nomes mais exclusivos properties
para evitar isso. Meu primeiro método não tem esse problema porque sua metade falsa do construtor é nomeada exclusivamente após a classe.
this.member = member
no seu construtor com 20 a 30 parâmetros?