Chapter 23. Application Design
Until now, we have mostly discussed language features. Most of the examples we’ve studied have been small, although I tried to make them realistic and useful. Actually, small is a very good thing. Drastic reduction in code size means all the problems of software development diminish in significance.
Not all applications can be small, however. This chapter considers the concerns of large, evolving APIs and applications. We’ll discuss a few Scala language and API features that we haven’t covered yet, consider a few design patterns and idioms, discuss architecture concepts, and balance object-oriented versus functional design techniques.
Recap of What We Already Know
Let’s recap a few of the concepts we’ve covered already that make small design problems easier to solve and thereby provide a stable foundation for applications.
- Functional composition
-
Most of the book examples have been tiny in large part because we’ve used the concise, powerful combinators provided by collections and other containers. They allow us to compose logic with a minimum amount of code.
- Types, especially parametric polymorphism
-
Types enforce constraints. Ideally, they express as much information as possible about the behavior of our programs. For example, using
Option[T]
can eliminate the use ofnull
s. Parameterized types and abstract type members are tools for abstraction and code reuse. - Mixin traits
-
Traits enable modularized and composable behaviors.
- for comprehensions ...
Get Programming Scala, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.