API com modelo para divisão de nomes usando design-patterns
Entrada esperada: Nome Completo de uma Pessoa
Saída esperada: Nome da Pessoa dividido em:
Há diversas assinaturas intermediárias para demonstrar como foi feita a criação e separadação das informações
O uso de Struct é indicado para quando temos objetos simples e de passagem de informação pois usa a memória de Stack, onde ao finalizar a execução, a memória é limpa.
É importante que a Struct não seja usada para objetos muito grandes ou complexos para não ganharmos um StackOverflow
Com isso, o uso do Struct em DTOs de retorno é bem interessante já que justamente se encaixam no perfil de bom uso da Struct
Mais detalhes:
https://pt.stackoverflow.com/questions/16181/qual-a-diferen%C3%A7a-entre-struct-e-class
Seguindo o DDD, as regras de negócio das Entidade estão dentro da própria entidade e não em uma camada de Serviço
As regras de orquestração estão separadas e implementadas na camada de Serviço
Os seguintes design patters foram aplicados nessa solução:
Vantagens:
Modelo: https://refactoring.guru/pt-br/design-patterns/factory-method
Vantagens:
Modelo: https://refactoring.guru/pt-br/design-patterns/chain-of-responsibility
Nesse ponto, a aplicação do design patterns nessa codificação torna os principios do SOLID devidamente cumpridos e houve uma criação inicial mas complexa porém que facilitará muito a manutenabilidade da codificação
Segue aqui mais alguns principios de codificação que foram seguidos nesse projeto:
private void Start()
{
StartCounter();
ClearPositionDictionary();
ClearParts();
ClearParticle();
}
Obs: Muitos métodos inclusive com apenas uma linha… essa pratica é interessante pois esboça por um nome qual a intenção do método
Ao invés de ter uma linha do tipo:
_particlePart = string.Empty;
Termos a codificação assim:
private void ClearParticle() =>
_particlePart = string.Empty;
public class SecondLastNameForAllPlusDivisionHandler: NameDivisionHandler
{
protected override NameParts DefineDivision(NameParts nameParts)
{
nameParts.SetDefinitionForAllUndefined(NameDivisionTypeEnum.SecondLastName);
return nameParts;
}
}
Obs: As outras questões de SOLID também foram seguidas mas essas merecem destaque.