Creativity vs Best Practices

As a software developer, finding the balance between creativity vs best practices is quite challenging. Definitely, it is something that we should practice writing every line of code without regarding the size or level of a project's complexity.

In my opinion, the complexity lies in our mind and the more creative you are, the more complicated your code become if you do not follow best practices. Being open-minded, practicing instant refactoring, as well as being creative, certainly will help you to find that balance and, furthermore, to increase a project's maintainability. Making it more efficient, cheaper and faster to add new features in the future.

Creativity is a great virtue and projects built following a non-standardized approach will challenge you to be twice more creative to maintain them. Creativity has no limits! I love that idea, however, maintainable projects require using a large number of rules and patterns. That is the point! Be hundred percent sure that you are writing a code implementing, at least, the SOLID design principles and, at the same time, being creative. SOLID principles are a collection of best practices to make software designs more understandable, flexible and maintainable. This topic is not part of the central idea of this article, there is a good reference on this article from Uncle Bob The Principles of OOD.
Continue reading

Cuide bem do seu domínio! Parte 4

Seguindo com a série de posts sobre TDD, vamos implementar a última regra de negócios do nosso projeto que valida a idade do aluno de acordo com a faixa etária para o curso no momento da matrícula. Darei sequência a partir do código fonte disponibilizado na parte 3 deste tutorial.

Passo 23 - Vamos começar criando um nova especificação para a entidade Matricula. Crie uma nova classe na pasta \Specifications\Matriculas\MatriculaFaixaEtariaPorCursoSpecification.cs Continue reading

Cuide bem do seu domínio! Parte 3

Seguindo com o projeto baseado no TDD, vamos continuar os testes restantes e finalizar a implementação das regras de negócio na camada de domínio.

Até aqui testamos apenas as especificações da entidade Aluno que eram: Ter idade entre 6 e 18 anos e CPF único na base.
Utilizamos Rhino Mock onde criamos um repositório falso simulando uma consulta de CPF existente e Specification Pattern com o pacote DomainValidation. Talvez não houvesse necessidade aplicar specification pattern para um projeto pequeno. A ideia é apenas mostrar como podemos implementá-lo para atender n regras de negócio de forma simples.

Continue reading

Cuide bem do seu domínio! Parte 2

Dando sequência ao post anterior vamos iniciar os testes de validação das nossas entidades com base nas especificações de Alunos e Matriculas.

Passo 13 - Abra o arquivo AlunoTests.cs no projeto de testes. Na barra de menu do Visual Studio clique em TEST -> RUN -> ALL TESTS. A imagem abaixo mostra o resultado na guia Test Explorer, retornando False na classe onde informamos dados inválidos(Aluno_Consistente_False), e retornando True para a classe onde passamos dados válidos(Aluno_Consistente_True).

Continue reading

Cuide bem do seu domínio! Parte 1

Irei abordar nesse post e nos próximos uma forma de iniciar o desenvolvimento de uma aplicação web ASP.NET MVC 5 com base na metodologia do TDD - Test Driven Development, Specification Pattern, DDD e SOLID. Iremos focar na criação das entidades e serviços do domínio aplicando os testes de unidade que irão validar as regras de negócio da aplicação. Portanto, sem CRUD e sem camada de apresentação.

Vamos ao exemplo:
Será criada uma aplicação para cadastro de cursos, alunos e matrículas. Considerar como regras de negócio os dados abaixo:

Continue reading