The DDD implementations I've seen in tutorials tend to leave out a couple of things.

  1. Applications get domain information two different ways. Javascript frameworks call WebApis. But desktop apps can use the domain services directly, avoiding the performance waste of an extra call. Think of the WebApi as a passthrough (façade) to the domain service.

  2. Domain models <> Data models. The domain layer--critically--takes care of mapping data to domain. Consider that your domain models may be populated from multiple data sources, or multiple tables from a single database . . . or both.

Loosely-Coupled Domain-Driven Design Architecture