AgentSkillsCN

parse-dont-validate

基于依赖类型理论原则的“Parse, Don't Validate”使用指南。

SKILL.md
--- frontmatter
name: parse-dont-validate
description: Guidance for "Parse, Don't Validate" using dependent type theory principles.
metadata:
  displayName: Parse Don't Validate

Parse, Don't Validate

Overview

"Parse, Don't Validate" is a principle where data is transformed into types that make invalid states unrepresentable, rather than validating and passing raw data.

Concept

csharp
// Bad: Validate and pass string
public void SendEmail(string email)
{
    if (!IsValidEmail(email))
        throw new ArgumentException("Invalid email");
    // Use email...
}

// Good: Parse into type
public record EmailAddress
{
    private readonly string _value;
    
    private EmailAddress(string value) => _value = value;
    
    public static Result<EmailAddress> Parse(string input)
    {
        if (!IsValidEmail(input))
            return Result.Failure("Invalid email");
        return Result.Success(new EmailAddress(input));
    }
}

public void SendEmail(EmailAddress email)
{
    // email is guaranteed valid
}

Best Practices

  • Create domain-specific types
  • Parse at boundaries
  • Make illegal states unrepresentable
  • Use Result or Either for parse failures
  • Encode invariants in types