Uma escolha de design na arquitetura do GRVT continuava me incomodando.
Se toda transação eventualmente chega ao Motor de Risco, por que não deixar que ele realize todas as validações? Não seria mais simples tomar uma única decisão do que verificar a mesma transação em várias camadas?
Então percebi que havia assumido que todos os problemas deveriam ser detectados no mesmo instante.
O GRVT parece rejeitar essa premissa.
Uma transação pode falhar por motivos muito diferentes. O remetente pode não ter permissão. O capital disponível pode já estar comprometido em outro lugar. As condições de mercado podem mudar antes da correspondência. Ou o estado resultante pode ainda não estar qualificado para a liquidação final.
Todos terminam com o mesmo resultado: a transação é interrompida. Mas esses problemas não devem ser descobertos na mesma etapa.
Essa é a decisão de design que considero mais interessante.
O GRVT não tenta construir um componente inteligente o suficiente para identificar todas as falhas. Em vez disso, cada camada rejeita uma transação assim que tem contexto suficiente para saber que algo está errado.
Isso é mais do que uma separação de responsabilidades.
É uma separação no momento da tomada de decisão.
A permissão deve ser rejeitada antes que o capital seja consumido. O capital deve ser rejeitado antes que o risco de mercado seja recalculado.
A liquidação deve ser rejeitada antes que a propriedade financeira mude.
Esperar que um componente final detecte todos os problemas significa que todas as etapas desnecessárias já foram realizadas.
A implicação mais profunda é arquitetônica.
Se cada nova regra de negócio precisar ser avaliada pelo Motor de Risco, ele eventualmente se tornará a dependência de todos os recursos futuros. Cada novo produto, regra de negociação e mudança de liquidação expande sua responsabilidade.
O GRVT escolhe a direção oposta.
Cada camada é responsável apenas pelas decisões para as quais tem contexto suficiente e as rejeita o mais cedo possível. O Motor de Risco permanece responsável pelo risco, não toda a bolsa.
Para mim, esta é uma das decisões de design mais subestimadas do GRVT.
O objetivo não é fazer com que um componente entenda tudo, mas garantir que nenhum jamais precise entender.
@grvt_io #grvt $LAB $BEAT