-
Use Onion architecture
- Dependencies go inwards. That is, the Core domain doesn't know about outside layers
-
Use pipeline model to implement workflows/use-cases/stories
- Business logic makes decisions
- IO does storage with minimal logic
- Keep Business logic and IO separate
-
Keep IO at edges
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type Food = | |
| Chicken | |
| Rice | |
type Step<'next> = | |
| GetFood of Food * 'next | |
| Eat of Food * 'next | |
| Sleep of hours:int * 'next | |
module Step = |
Thanks to Sergey Tihon for running F# Weekly and F# Advent.
Thanks to manofstick for trying out the code and coming with invaluable feedback. Cistern.ValueLinq is very impressive.
There were many interesting improvements in F#6 but one in particular caught my eye, the attribute InlineIfLambda
.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// +--------------------------------------+ | |
/// | | | |
/// | Decider | | |
/// | | | |
/// | Jérémie Chassaing | | |
/// | @thinkb4coding | | |
/// +--------------------------------------+ | |
// A decider is a structure define by 7 parameters: |