> For the complete documentation index, see [llms.txt](https://hanfak.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanfak.gitbook.io/workspace/general-paradigms/architecture/patterns/domain/transaction-usecase-applicaiton.md).

# Transaction Script/ Use Case pattern

## What it is?

* Domain logic goes in here.
  * Single procedure for each action(http request) that a user might want to do
* Procedural in nature
* Takes input from presentation layer
  * validated or changed to be able to used here
* Flow of the process takes place
  * processes input with validations and calculations, stores data in the database, and invokes any operations from other systems
* Dependencies from outer layers are injected here using the interface
* The response is what is processed by the presentation layer
* avoid calls to presentation layer
  * Should not interact again

## Advantages

* easy to follow, clear structure
* Easy to use several depenencies to perform actions
* useful for simple domain logic

## Disadvantages

* can grow in complexity, and become big
  * dont want to extract to much logic as it adds layer of indirection
* Duplication can occur between different transaction scripts

## Other

* Can use command pattern for this
