Z
ZHANK
进阶工程

C# 设计模式

Result 模式、Fluent Interface、策略模式、工厂泛型实现

C# 设计模式

C# 的类型系统让设计模式有了更优雅的实现——Result 模式替代异常、Fluent Interface 链式调用。

学完本章你将: 掌握 Result 模式、Fluent Interface、策略模式泛型实现。


Result 模式 —— 替代异常

csharp
public class Result<T>
{
    public bool Success { get; }
    public T? Data { get; }
    public string? Error { get; }

    private Result(bool success, T? data, string? error)
        => (Success, Data, Error) = (success, data, error);

    public static Result<T> Ok(T data) => new(true, data, null);
    public static Result<T> Fail(string error) => new(false, default, error);

    public Result<TNext> Then<TNext>(Func<T, Result<TNext>> f)
        => Success ? f(Data!) : Result<TNext>.Fail(Error!);
}

// 使用——链式调用
Result<User> GetUser(int id) => Result<User>.Ok(user);
Result<Order> CreateOrder(User u) => Result<Order>.Ok(order);

var result = GetUser(1).Then(u => CreateOrder(u));

Fluent Interface

csharp
var request = RequestBuilder.Create()
    .WithUrl("/api/users")
    .WithMethod("POST")
    .WithHeader("Authorization", "Bearer xxx")
    .WithBody(new { name = "小明" })
    .Build();

策略模式 + 泛型

csharp
public interface IPaymentStrategy
{
    Task<bool> PayAsync(decimal amount);
}

public class PaymentService<T> where T : IPaymentStrategy
{
    private readonly T _strategy;
    public PaymentService(T strategy) => _strategy = strategy;
    public Task<bool> CheckoutAsync(decimal amount) => _strategy.PayAsync(amount);
}