Start here. This is the direct spoken answer to practice first.
Why this question matters
The two projects are often created together, but they execute in different places and solve different problems. Mixing their responsibilities makes local composition opaque and can couple ordinary services to a development-only host.
The AppHost describes the application from outside its services: projects, containers, dependencies, endpoints, parameters, and startup relationships. ServiceDefaults is referenced inside participating .NET services and registers shared runtime conventions such as telemetry, health checks, and service discovery. AppHost owns composition; ServiceDefaults owns a small reusable runtime baseline. Neither is the place for business logic.