Recommended patterns

These pages show how to use Schema with ordinary F# modules and projects. They focus on problems that appear as an application grows: public records bypassing checks, wire DTOs entering business code, and updates breaking invariants.

Use only the strength of guarantee the code needs. A plain record is often right for a wire payload or edit form. A private type is useful when many callers must rely on the same invariant without checking it again.

Construction Guarantees explains when a public record, refined field, or private aggregate fits the model.