Eu não conhecia o conceito de indireção, isso ajuda muito a identificar classes que são só wrappers que não adicionam nada.
Sobre os helpers genéricos, geralmente isso é algo que anda acompanhado com código estático, pois são funções agrupadas em classes. Escrevi um post sobre código estático e acoplamento e o exemplo que uso é uma dessas classes genéricas cheia de funções (sem estado).
Antes eu achava código estático algo sempre ruim (o que é uma postura bem inflexível), hoje vejo que depende do contexto, pois vejo que factorys estáticas adicionam legibilidade em construtores e tem seu valor para criar entidades e value objects.
Um lugar onde vejo uso de método estático é em value objects, pois dá para adicionar lebilidade com funções que ajudam (quase como helpers) só que dentro de um contexto que não é genérico, por exemplo:
<?phpnamespaceDomain\ValueObject;/**
*
* @author Raphael da Silva
*
*/classFullname{private$firstName;private$lastName;publicfunction__construct(string$firstName,string$lastName){$this->firstName=$firstName;$this->lastName=$lastName;}publicstaticfunctionupperCaseFirstChar(string$name):string{returnucfirst($name);}publicfunctiongetFirstName():string{returnself::upperCaseFirstChar($this->firstName);}publicfunctiongetLastName():string{returnself::upperCaseFirstChar($this->lastName);}publicfunctiongetFullname():string{return$this->getFirstName().' '.$this->getLastName();}}
Nesse caso o método estático que usei tem o propósito só de dar mais legibilidade e contexto a função usada pelo value object.
Ótima contribuição, Raphael. Mas nesse seu caso eu teria uma classe Name que cuidaria de ter a primeira letra maiúscula. Isso vai de encontro com o estudo de "Obsessão por tipos primitivos". Talvez eu escreva um artigo ou faça um vídeo sobre isso no futuro.
Acabei de ver que sua classe já é a representação de um nome. No seu caso, concordo com sua implementação. Só deixaria esse método estático privado, talvez. Mas realmente, acredito que você tenha colocado o método no melhor lugar possível sim. :-D Ótimo exemplo!
Obrigado pelo feedback, Vinicius. Eu já troquei uma ideia com você via e-mail sobre o uso de DTO's no qual eu tinha dúvidas sobre o propósito desse padrão.
Sobre o código estático, eu acabei vendo que não é problemático o uso de métodos estáticos em casos assim, o propósito é aqui foi dar contexto e legebilidade, pois o método em questão torna mais nítido (ou óbvio) o objetivo da função nativa ucfirst nesse contexto de nomes.
Pensei agora que o nome do método poderia até ser mais descritivo ainda (upperCaseFirstCharFromName, por exemplo) para reforçar isso. Essa abordagem fez sentido para mim em value objects como esse, achei válido compartilhar.
Valeu!
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Eu não conhecia o conceito de indireção, isso ajuda muito a identificar classes que são só wrappers que não adicionam nada.
Sobre os helpers genéricos, geralmente isso é algo que anda acompanhado com código estático, pois são funções agrupadas em classes. Escrevi um post sobre código estático e acoplamento e o exemplo que uso é uma dessas classes genéricas cheia de funções (sem estado).
Antes eu achava código estático algo sempre ruim (o que é uma postura bem inflexível), hoje vejo que depende do contexto, pois vejo que factorys estáticas adicionam legibilidade em construtores e tem seu valor para criar entidades e value objects.
Um lugar onde vejo uso de método estático é em value objects, pois dá para adicionar lebilidade com funções que ajudam (quase como helpers) só que dentro de um contexto que não é genérico, por exemplo:
Nesse caso o método estático que usei tem o propósito só de dar mais legibilidade e contexto a função usada pelo value object.
Ótima contribuição, Raphael. Mas nesse seu caso eu teria uma classe Name que cuidaria de ter a primeira letra maiúscula. Isso vai de encontro com o estudo de "Obsessão por tipos primitivos". Talvez eu escreva um artigo ou faça um vídeo sobre isso no futuro.
Acabei de ver que sua classe já é a representação de um nome. No seu caso, concordo com sua implementação. Só deixaria esse método estático privado, talvez. Mas realmente, acredito que você tenha colocado o método no melhor lugar possível sim. :-D Ótimo exemplo!
Obrigado pelo feedback, Vinicius. Eu já troquei uma ideia com você via e-mail sobre o uso de DTO's no qual eu tinha dúvidas sobre o propósito desse padrão.
Sobre o código estático, eu acabei vendo que não é problemático o uso de métodos estáticos em casos assim, o propósito é aqui foi dar contexto e legebilidade, pois o método em questão torna mais nítido (ou óbvio) o objetivo da função nativa
ucfirst
nesse contexto de nomes.Pensei agora que o nome do método poderia até ser mais descritivo ainda (
upperCaseFirstCharFromName
, por exemplo) para reforçar isso. Essa abordagem fez sentido para mim em value objects como esse, achei válido compartilhar.Valeu!