Quando é necessária uma camada de caso de uso?

5

Em sua postagem no blog The Clean Architecture Tio Bob sugere uma arquitetura de 4 camadas. Eu entendo a separação entre regras de negócios, interfaces e infraestrutura, mas eu me pergunto se / quando é necessário ter camadas separadas para objetos de domínio e casos de uso. Que valor agregado trará, comparado a ter apenas os casos de uso como "serviços de domínio" na camada de domínio?

A única informação útil que eu encontrei na web sobre uma camada de caso de uso é um artigo de Martin Fowler, que parece contradiz o tio Bob sobre a sua necessidade:

At some point I may run into the problems, and then I'll make a Use Case Controller - but only then. And even when I do that I rarely consider the Use Case Controllers to occupy a separate layer in the system architecture.

Editar:

Eu me deparei com um vídeo da Arquitetura: os anos perdidos do Uncle Bob keynote, em que ele explica essa arquitetura em profundidade. Muito informativo.

    
por Meta-Knight 27.09.2012 / 19:09
fonte

2 respostas

5

Não concordo com o uso que o tio Bob faz do termo "caso de uso", mas entendo em que ele está chegando. Eu realmente não quero discutir sobre a semântica do termo em qualquer caso.

Para fins dessa pergunta, use cases são application specific business rules.

Sua pergunta é realmente "quando as camadas separadas são necessárias para as regras de negócios corporativas e as regras de negócios específicas do aplicativo?" E a resposta rápida é que você precisa deles quando seu aplicativo cresce o suficiente para justificá-lo.

Se houver um pequeno número de regras de qualquer conjunto, será tão fácil manter a implementação dessas regras em uma única camada de aplicativo. Se houver muitas regras para os dois conjuntos, convém dividi-las em camadas específicas.

O tio Bob estabelece uma regra que os círculos internos não devem saber dos círculos externos em seu diagrama de arquitetura. E isso é basicamente a resposta para sua pergunta. À medida que as regras evoluem e têm um delineamento claro das outras, você precisará isolá-las em camadas separadas.

    
por 27.09.2012 / 19:51
fonte
0

Eu não sou especialista no assunto, mas é assim que eu entendo. A ideia com uma camada separada para os objetos de domínio e os objetos de caso de uso é que você pode eventualmente precisar implementar várias versões da camada de objeto de caso de uso para aplicativos que devem ter um comportamento diferente, mas seguir as mesmas regras corporativas. A maneira como ele explica é a camada mais interna das regras corporativas e a camada de caso do usuário são as regras de comportamento do aplicativo.

Se você concorda com o tio Bob ou não, na minha opinião, a resposta fornecida pelo @ GlenH7 não está no espírito do que o tio Bob está promovendo. Ele não quer que você espere até que seu aplicativo cresça antes de separar as camadas. Ele quer que a iteração zero seja quando você projeta como manterá as camadas arquitetônicas separadas e desacopladas. A idéia é que, uma vez que a necessidade de trocar uma camada surja, você deve ser capaz de agir de acordo com essa necessidade de maneira rápida e fácil, porque você já separou as camadas antes da mão. Se você esperar até que o aplicativo cresça ou a necessidade de separar as camadas surja, você provavelmente não fará isso porque é muito trabalho. Mas se você tornar mais fácil, fará isso apenas porque está curioso para ver o que aconteceria se trocasse uma camada por uma alternativa.

    
por 16.08.2017 / 18:10
fonte