Null Object
Null Object é um design pattern comportamental baseado em herança que cria representações válidas de objetos null em um sistema, de modo a evitar que se retorne um null
quando um objeto é esperado, por consequência, gerando null checks para evitar que exceções NullPointerException
sejam lançadas e comportamentos inesperados sejam apresentados.
Introdução
É comum escrever métodos que retornem null
em situações onde a informação requisitada não está presente ou algumas condições não são atendidas para executar um determinado trecho de código. Entretanto, as vezes este tipo de comportamento é mal documentado e acaba pegando outros desenvolvedores de surpresa quando estes decidem utilizar uma API, além disso, isto pode forçar tais desenvolvedores a escreverem inúmeros null checks a fim de evitar exceções de runtime.
De qualquer modo, o código da aplicação pode se tornar pouco coeso e pouco limpo, pois agora aquele trecho de código também precisa lidar com as situações onde um null é possível, tendo assim que tomar decisões que inicialmente não seriam de sua responsabilidade.
O design pattern Null Object vem para trabalhar neste problema, de um modo que basicamente, ao invés de simplesmente retornar um null
onde um objeto da classe Foo
era esperado, ele retorna um objeto que é subclasse de Foo
em um estado válido para ser utilizado em tempo de execução, aderindo ao contrato de Foo
.