2 The basics of functional declarative design

This chapter covers

  • Software architecture
  • Functional design tools, ideas, and approaches
  • Shaping the surface of functional declarative design
  • Practicing simple eDSLs

High-level requirements and business environments are never the same for different business tasks. Budgets, technology stacks, available resources—all of them are very situational. We can’t predict everything. If some idea works better here, it can fail under other circumstances. The object-oriented paradigm addresses graphic user interfaces nicely, while making it very difficult to build concurrent applications. Imperative code will be the fastest on average, but its safety will require much more effort than functional languages can take.

2.1 The engineering approach

2.1.1 Software architecture classification

2.1.2 Design tools and abstractions

2.1.3 Top-down iterative development process

2.1.4 Collecting requirements

2.1.5 Requirements in mind maps

2.2 Application architecture

2.2.1 Architecture layers

2.2.2 Embedded domain-specific languages

2.2.3 Modularization of applications

Summary