"In other words, does "abstract" not literally mean abstract classes or interfaces" - that's correct, it does not; as you said, it refers to high-level policies captured by the code at the core of the application (as opposed to the outer layer code that contains the more low-level details of how things actually get done at the "edges" of the application). That said, you can have, if needed, interfaces that are called by the outer layer, or an interface that a class in the outer layer implements (dependency inversion). Just don't create them by default, up front, that can create problems.
↧