Skip to content

{ [Required] public string ConnectionString

[BuilderDefault(30)]
public int CommandTimeout { get; set; }

[BuilderDefault(100)]
public int MaxPoolSize { get; set; }

[BuilderDefault(true)]
public bool EnableRetry { get; set; }

[BuilderDefault(3)]
public int MaxRetryCount { get; set; }

}

// 浣跨敤 var config = DatabaseConfiguration.CreateBuilder() .WithConnectionString("Server=localhost;Database=MyDb") .WithCommandTimeout(60) .WithMaxPoolSize(200) .Build();


### 鍦烘櫙 2锛欻TTP 璇锋眰鏋勫缓

**闇€姹?*锛氭瀯寤?HTTP 璇锋眰锛屾敮鎸佸悇绉嶉€夐」銆?

```csharp
[GenerateBuilder]
public partial class HttpRequestOptions
{
    public string Url { get; set; }
    public string Method { get; set; }
    public Dictionary<string, string> Headers { get; set; }
    public string Body { get; set; }
    public int Timeout { get; set; }
    public bool FollowRedirects { get; set; }
}

// 浣跨敤
var request = HttpRequestOptions.CreateBuilder()
    .WithUrl("https://api.example.com/users")
    .WithMethod("POST")
    .AddHeader("Content-Type", "application/json")
    .AddHeader("Authorization", "Bearer token")
    .WithBody("{\"name\":\"John\"}")
    .WithTimeout(30000)
    .Build();

鍦烘櫙 3锛氭祴璇曟暟鎹瀯寤?

**闇€姹?*锛氬湪鍗曞厓娴嬭瘯涓揩閫熸瀯寤烘祴璇曟暟鎹€?

csharp
[GenerateBuilder]
public partial class TestUser
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
    public List<string> Roles { get; set; }
    public bool IsActive { get; set; }
}

// 鍦ㄦ祴璇曚腑浣跨敤
[Fact]
public void UserService_CreateUser_ShouldSucceed()
{
    // Arrange
    var user = TestUser.CreateBuilder()
        .WithId(1)
        .WithUsername("testuser")
        .WithEmail("test@example.com")
        .AddRole("User")
        .AddRole("Admin")
        .WithIsActive(true)
        .Build();
    
    // Act
    var result = userService.CreateUser(user);
    
    // Assert
    Assert.True(result.Success);
}

鍦烘櫙 4锛氭煡璇㈡瀯寤哄櫒

**闇€姹?*锛氭瀯寤哄鏉傜殑鏁版嵁搴撴煡璇€?

csharp
[GenerateBuilder]
public partial class QueryOptions
{
    public string Table { get; set; }
    public List<string> Columns { get; set; }
    public string WhereClause { get; set; }
    public string OrderBy { get; set; }
    public int? Limit { get; set; }
    public int? Offset { get; set; }
}

// 浣跨敤
var query = QueryOptions.CreateBuilder()
    .WithTable("Users")
    .AddColumn("Id")
    .AddColumn("Name")
    .AddColumn("Email")
    .WithWhereClause("Age > 18")
    .WithOrderBy("Name ASC")
    .WithLimit(10)
    .WithOffset(0)
    .Build();

鍦烘櫙 5锛歎I 缁勪欢閰嶇疆

**闇€姹?*锛氶厤缃鏉傜殑 UI 缁勪欢銆?

csharp
[GenerateBuilder]
public partial class ButtonConfig
{
    public string Text { get; set; }
    public string Color { get; set; }
    public string Size { get; set; }
    public bool Disabled { get; set; }
    public Action OnClick { get; set; }
    public string Icon { get; set; }
}

// 浣跨敤
var button = ButtonConfig.CreateBuilder()
    .WithText("Submit")
    .WithColor("primary")
    .WithSize("large")
    .WithIcon("check")
    .WithOnClick(() => Console.WriteLine("Clicked"))
    .Build();

鏈€浣冲疄璺?vs 鍙嶆ā寮?

瀵规瘮琛ㄦ牸

鏂归潰鉁?鏈€浣冲疄璺?鉂?鍙嶆ā寮?鍘熷洜
绫讳慨楗扮浣跨敤 partial 绫?涓嶄娇鐢?partialBuilder 闇€瑕佸祵濂楀湪鍘熺被涓?
杩斿洖绫诲瀷杩斿洖 this杩斿洖 void鏀寔閾惧紡璋冪敤
鍛藉悕WithXxx 鏂规硶鍚?SetXxx 鏂规硶鍚?鏇寸鍚堟祦寮?API 涔犳儻
楠岃瘉鍦?Build() 涓獙璇?鍦?With 鏂规硶涓獙璇?闆嗕腑楠岃瘉锛屾洿娓呮櫚
*涓嶅彲鍙樻€?Builder 鍙彉锛屽璞′笉鍙彉閮藉彲鍙樻垨閮戒笉鍙彉绗﹀悎 Builder 妯″紡璁捐
*榛樿鍊?鍦ㄥ瓧娈靛垵濮嬪寲鏃惰缃?鍦?Build() 涓缃?鏇存竻鏅帮紝鎬ц兘鏇村ソ
闆嗗悎鎻愪緵 Add 鏂规硶鍙彁渚?With 鏂规硶鏇存柟渚挎坊鍔犲涓」
澶嶅埗鎻愪緵 ToBuilder() 鏂规硶涓嶆敮鎸佸鍒?鏂逛究鍩轰簬鐜版湁瀵硅薄鍒涘缓鏂板璞?

璇︾粏绀轰緥

1. Partial 绫?

csharp
// 鉂?鍙嶆ā寮忥細涓嶄娇鐢?partial
[GenerateBuilder]
public class Person  // 缂栬瘧閿欒锛?
{
    public string Name { get; set; }
}

// 鉁?鏈€浣冲疄璺碉細浣跨敤 partial
[GenerateBuilder]
public partial class Person
{
    public string Name { get; set; }
}

2. 杩斿洖绫诲瀷

csharp
// 鉂?鍙嶆ā寮忥細杩斿洖 void
public class PersonBuilder
{
    public void WithName(string value)  // 涓嶈兘閾惧紡璋冪敤
    {
        _name = value;
    }
}

// 浣跨敤锛堜笉鑳介摼寮忚皟鐢級
var builder = new PersonBuilder();
builder.WithName("John");
builder.WithAge(30);
var person = builder.Build();

// 鉁?鏈€浣冲疄璺碉細杩斿洖 this
public class PersonBuilder
{
    public PersonBuilder WithName(string value)
    {
        _name = value;
        return this;
    }
}

// 浣跨敤锛堥摼寮忚皟鐢級
var person = new PersonBuilder()
    .WithName("John")
    .WithAge(30)
    .Build();

3. 楠岃瘉鏃舵満

csharp
// 鉂?鍙嶆ā寮忥細鍦?With 鏂规硶涓獙璇?
public class PersonBuilder
{
    public PersonBuilder WithAge(int value)
    {
        if (value < 0 || value > 150)
            throw new ArgumentException("Invalid age");
        
        _age = value;
        return this;
    }
}

// 闂锛氭瀯寤鸿繃绋嬩腑灏辨姏鍑哄紓甯革紝涓嶅鐏垫椿

// 鉁?鏈€浣冲疄璺碉細鍦?Build 涓獙璇?
public class PersonBuilder
{
    public PersonBuilder WithAge(int value)
    {
        _age = value;
        return this;
    }
    
    public Person Build()
    {
        if (_age < 0 || _age > 150)
            throw new ValidationException("Age must be between 0 and 150");
        
        return new Person { Age = _age };
    }
}

// 浼樺娍锛氬彲浠ュ厛璁剧疆鎵€鏈夊€硷紝鏈€鍚庣粺涓€楠岃瘉

4. 闆嗗悎澶勭悊

csharp
// 鉂?鍙嶆ā寮忥細鍙彁渚?With 鏂规硶
public class OrderBuilder
{
    public OrderBuilder WithItems(List<string> items)
    {
        _items = items;
        return this;
    }
}

// 浣跨敤锛堜笉鏂逛究锛?
var items = new List<string> { "Item1", "Item2" };
var order = new OrderBuilder()
    .WithItems(items)
    .Build();

// 鉁?鏈€浣冲疄璺碉細鎻愪緵 Add 鏂规硶
public class OrderBuilder
{
    private readonly List<string> _items = new();
    
    public OrderBuilder AddItem(string item)
    {
        _items.Add(item);
        return this;
    }
    
    public OrderBuilder AddItems(params string[] items)
    {
        _items.AddRange(items);
        return this;
    }
}

// 浣跨敤锛堟洿鏂逛究锛?
var order = new OrderBuilder()
    .AddItem("Item1")
    .AddItem("Item2")
    .AddItems("Item3", "Item4")
    .Build();

5. 涓嶅彲鍙樺璞?

csharp
// 鉂?鍙嶆ā寮忥細瀵硅薄鍙彉
public class Person
{
    public string Name { get; set; }  // 鍙彉
    public int Age { get; set; }      // 鍙彉
}

// 闂锛氬璞″垱寤哄悗杩樺彲浠ヤ慨鏀?

// 鉁?鏈€浣冲疄璺碉細瀵硅薄涓嶅彲鍙?
public class Person
{
    public string Name { get; }  // 鍙
    public int Age { get; }      // 鍙
    
    private Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    
    public class Builder
    {
        private string _name;
        private int _age;
        
        public Builder WithName(string value)
        {
            _name = value;
            return this;
        }
        
        public Builder WithAge(int value)
        {
            _age = value;
            return this;
        }
        
        public Person Build()
        {
            return new Person(_name, _age);
        }
    }
}

// 浼樺娍锛氱嚎绋嬪畨鍏紝涓嶄細琚剰澶栦慨鏀?

鎬ц兘浼樺寲

浼樺寲绛栫暐

浼樺寲 1锛氬璞℃睜

csharp
// 浣跨敤瀵硅薄姹犲噺灏戝垎閰?
public class PersonBuilder
{
    private static readonly ObjectPool<PersonBuilder> Pool = 
        new ObjectPool<PersonBuilder>(() => new PersonBuilder());
    
    private string _name;
    private int _age;
    
    public static PersonBuilder Rent()
    {
        var builder = Pool.Rent();
        builder.Reset();
        return builder;
    }
    
    public void Return()
    {
        Pool.Return(this);
    }
    
    private void Reset()
    {
        _name = null;
        _age = 0;
    }
    
    public PersonBuilder WithName(string value)
    {
        _name = value;
        return this;
    }
    
    public Person Build()
    {
        var person = new Person { Name = _name, Age = _age };
        Return();  // 褰掕繕鍒版睜涓?
        return person;
    }
}

// 浣跨敤
var person = PersonBuilder.Rent()
    .WithName("John")
    .WithAge(30)
    .Build();  // 鑷姩褰掕繕

浼樺寲 2锛氱粨鏋勪綋 Builder

csharp
// 瀵逛簬绠€鍗曞璞★紝浣跨敤缁撴瀯浣?Builder
public struct PersonBuilder
{
    private string _name;
    private int _age;
    
    public PersonBuilder WithName(string value)
    {
        _name = value;
        return this;
    }
    
    public PersonBuilder WithAge(int value)
    {
        _age = value;
        return this;
    }
    
    public readonly Person Build()
    {
        return new Person { Name = _name, Age = _age };
    }
}

// 浼樺娍锛氭爤鍒嗛厤锛屾棤 GC 鍘嬪姏

浼樺寲 3锛氬欢杩熷垵濮嬪寲闆嗗悎

csharp
// 鍙湪闇€瑕佹椂鍒涘缓闆嗗悎
public class OrderBuilder
{
    private List<string>? _items;  // 寤惰繜鍒濆鍖?
    
    public OrderBuilder AddItem(string item)
    {
        _items ??= new List<string>();  // 鎸夐渶鍒涘缓
        _items.Add(item);
        return this;
    }
    
    public Order Build()
    {
        return new Order
        {
            Items = _items ?? new List<string>()
        };
    }
}

鎬ц兘瀵规瘮

鏂规硶鏃堕棿 (10000娆?鍐呭瓨鍒嗛厤鎺ㄨ崘
瀵硅薄鍒濆鍖栧櫒50ms1.2MB鉁?
绫?Builder80ms2.4MB鈿狅笍
缁撴瀯浣?Builder55ms1.2MB鉁?
瀵硅薄姹?Builder60ms0.8MB鉁呪渽

甯歌闂

1. 涓轰粈涔堝繀椤讳娇鐢?partial 绫伙紵

闂锛氫笉浣跨敤 partial 浼氬鑷寸紪璇戦敊璇€?

鍘熷洜锛欱uilder 绫婚渶瑕佸祵濂楀湪鍘熺被涓紝C# 鍙厑璁搁€氳繃 partial 鍏抽敭瀛楀垎鍓茬被瀹氫箟銆?

瑙e喅鏂规锛?

csharp
// 鉁?姝g‘
[GenerateBuilder]
public partial class Person
{
    public string Name { get; set; }
}

// 鉂?閿欒
[GenerateBuilder]
public class Person  // 缂哄皯 partial
{
    public string Name { get; set; }
}

2. 濡備綍澶勭悊蹇呭~灞炴€э紵

闂锛氭煇浜涘睘鎬ф槸蹇呭~鐨勶紝濡備綍纭繚瀹冧滑琚缃紵

瑙e喅鏂规锛?

csharp
// 鏂规 1锛氬湪 Build 涓獙璇?
[GenerateBuilder(GenerateValidation = true)]
public partial class Person
{
    [Required]
    public string Name { get; set; }
}

// 鐢熸垚鐨勪唬鐮佷細鍦?Build 涓鏌?
public Person Build()
{
    if (string.IsNullOrWhiteSpace(_name))
        throw new ValidationException("Name is required");
    
    return new Person { Name = _name };
}

// 鏂规 2锛氫娇鐢ㄦ瀯閫犲嚱鏁板弬鏁?
public class PersonBuilder
{
    private readonly string _name;  // 蹇呭~锛岄€氳繃鏋勯€犲嚱鏁拌缃?
    private int _age;
    
    public PersonBuilder(string name)
    {
        _name = name;
    }
    
    public PersonBuilder WithAge(int value)
    {
        _age = value;
        return this;
    }
    
    public Person Build()
    {
        return new Person { Name = _name, Age = _age };
    }
}

// 浣跨敤
var person = new PersonBuilder("John")  // 蹇呴』鎻愪緵 name
    .WithAge(30)
    .Build();

3. 濡備綍澶勭悊闆嗗悎灞炴€э紵

闂锛氶泦鍚堝睘鎬у簲璇ュ浣曞鐞嗭紵

瑙e喅鏂规锛?

csharp
// 鎻愪緵澶氱娣诲姞鏂规硶
public class OrderBuilder
{
    private readonly List<string> _items = new();
    
    // 娣诲姞鍗曚釜椤?
    public OrderBuilder AddItem(string item)
    {
        _items.Add(item);
        return this;
    }
    
    // 娣诲姞澶氫釜椤?
    public OrderBuilder AddItems(params string[] items)
    {
        _items.AddRange(items);
        return this;
    }
    
    // 娣诲姞闆嗗悎
    public OrderBuilder AddItems(IEnumerable<string> items)
    {
        _items.AddRange(items);
        return this;
    }
    
    // 娓呯┖闆嗗悎
    public OrderBuilder ClearItems()
    {
        _items.Clear();
        return this;
    }
    
    public Order Build()
    {
        return new Order { Items = _items.ToList() };
    }
}

4. 濡備綍鏀寔缁ф壙锛?

闂锛氭淳鐢熺被濡備綍浣跨敤鍩虹被鐨?Builder锛?

瑙e喅鏂规锛?

csharp
// 鏂规 1锛氭硾鍨?Builder
public class BaseBuilder<T, TBuilder> 
    where T : BaseEntity, new()
    where TBuilder : BaseBuilder<T, TBuilder>
{
    protected int _id;
    
    public TBuilder WithId(int value)
    {
        _id = value;
        return (TBuilder)this;
    }
    
    public virtual T Build()
    {
        return new T { Id = _id };
    }
}

public class ProductBuilder : BaseBuilder<Product, ProductBuilder>
{
    private string _name;
    
    public ProductBuilder WithName(string value)
    {
        _name = value;
        return this;
    }
    
    public override Product Build()
    {
        return new Product
        {
            Id = _id,
            Name = _name
        };
    }
}

// 浣跨敤
var product = new ProductBuilder()
    .WithId(1)      // 鍩虹被鏂规硶
    .WithName("iPhone")  // 娲剧敓绫绘柟娉?
    .Build();

5. Builder 鍜屽璞″垵濮嬪寲鍣ㄥ摢涓洿濂斤紵

瀵规瘮锛?

csharp
// 瀵硅薄鍒濆鍖栧櫒
var person = new Person
{
    Name = "John",
    Age = 30,
    Email = "john@example.com"
};

// Builder
var person = Person.CreateBuilder()
    .WithName("John")
    .WithAge(30)
    .WithEmail("john@example.com")
    .Build();

閫夋嫨寤鸿锛?

鍦烘櫙鎺ㄨ崘鍘熷洜
绠€鍗曞璞★紙< 5 涓睘鎬э級瀵硅薄鍒濆鍖栧櫒鏇寸畝娲?
澶嶆潅瀵硅薄锛? 5 涓睘鎬э級Builder鏇存竻鏅?
闇€瑕侀獙璇?Builder闆嗕腑楠岃瘉
涓嶅彲鍙樺璞?Builder蹇呴』浣跨敤
鍙€夊弬鏁板緢澶?Builder鏇寸伒娲?
闇€瑕侀粯璁ゅ€?Builder鏇存柟渚?

6. 濡備綍娴嬭瘯 Builder锛?

娴嬭瘯绀轰緥锛?

csharp
public class PersonBuilderTests
{
    [Fact]
    public void Build_WithAllProperties_ShouldCreatePerson()
    {
        // Arrange & Act
        var person = Person.CreateBuilder()
            .WithName("John")
            .WithAge(30)
            .WithEmail("john@example.com")
            .Build();
        
        // Assert
        Assert.Equal("John", person.Name);
        Assert.Equal(30, person.Age);
        Assert.Equal("john@example.com", person.Email);
    }
    
    [Fact]
    public void Build_WithoutRequiredProperty_ShouldThrow()
    {
        // Arrange
        var builder = Person.CreateBuilder()
            .WithAge(30);
        
        // Act & Assert
        Assert.Throws<ValidationException>(() => builder.Build());
    }
    
    [Fact]
    public void WithName_ShouldReturnBuilder()
    {
        // Arrange
        var builder = Person.CreateBuilder();
        
        // Act
        var result = builder.WithName("John");
        
        // Assert
        Assert.Same(builder, result);  // 杩斿洖鍚屼竴涓疄渚?
    }
}

7. 鎬ц兘闂鎬庝箞鍔烇紵

浼樺寲寤鸿锛?

  1. 浣跨敤缁撴瀯浣?Builder锛堥€傚悎绠€鍗曞璞★級
  2. **浣跨敤瀵硅薄姹?*锛堥珮棰戝垱寤哄満鏅級
  3. **寤惰繜鍒濆鍖栭泦鍚?*锛堝噺灏戜笉蹇呰鐨勫垎閰嶏級
  4. 閬垮厤杩囧害浣跨敤锛堢畝鍗曞璞$敤瀵硅薄鍒濆鍖栧櫒锛?
csharp
// 鎬ц兘娴嬭瘯
[Benchmark]
public class BuilderBenchmark
{
    [Benchmark(Baseline = true)]
    public Person ObjectInitializer()
    {
        return new Person
        {
            Name = "John",
            Age = 30,
            Email = "john@example.com"
        };
    }
    
    [Benchmark]
    public Person ClassBuilder()
    {
        return Person.CreateBuilder()
            .WithName("John")
            .WithAge(30)
            .WithEmail("john@example.com")
            .Build();
    }
    
    [Benchmark]
    public Person StructBuilder()
    {
        return new PersonBuilder()
            .WithName("John")
            .WithAge(30)
            .WithEmail("john@example.com")
            .Build();
    }
}

8. 濡備綍澶勭悊寰幆寮曠敤锛?

闂锛氬璞′箣闂存湁寰幆寮曠敤銆?

瑙e喅鏂规锛?

csharp
// 浣跨敤 ID 鑰屼笉鏄璞″紩鐢?
public class PersonBuilder
{
    private string _name;
    private int? _spouseId;  // 浣跨敤 ID
    
    public PersonBuilder WithName(string value)
    {
        _name = value;
        return this;
    }
    
    public PersonBuilder WithSpouseId(int value)
    {
        _spouseId = value;
        return this;
    }
    
    public Person Build()
    {
        return new Person
        {
            Name = _name,
            SpouseId = _spouseId
        };
    }
}

鎵╁睍缁冧範

缁冧範 1锛氭坊鍔?Reset 鏂规硶

浠诲姟锛氬厑璁搁噸缃?Builder 浠ラ噸鐢ㄣ€?

csharp
public class PersonBuilder
{
    private string _name;
    private int _age;
    
    public PersonBuilder Reset()
    {
        _name = null;
        _age = 0;
        return this;
    }
    
    // ... 鍏朵粬鏂规硶
}

// 浣跨敤
var builder = Person.CreateBuilder();

var person1 = builder
    .WithName("John")
    .WithAge(30)
    .Build();

var person2 = builder
    .Reset()
    .WithName("Jane")
    .WithAge(25)
    .Build();

缁冧範 2锛氭坊鍔?Clone 鏂规硶

浠诲姟锛氭敮鎸佸厠闅?Builder銆?

csharp
public class PersonBuilder
{
    public PersonBuilder Clone()
    {
        return new PersonBuilder
        {
            _name = this._name,
            _age = this._age
        };
    }
}

缁冧範 3锛氭敮鎸佹潯浠舵瀯寤?

浠诲姟锛氭牴鎹潯浠跺喅瀹氭槸鍚﹁缃睘鎬с€?

csharp
public class PersonBuilder
{
    public PersonBuilder WithNameIf(bool condition, string value)
    {
        if (condition)
            _name = value;
        return this;
    }
}

缁冧範 4锛氭坊鍔犻獙璇佽鍒?

浠诲姟锛氭敮鎸佽嚜瀹氫箟楠岃瘉瑙勫垯銆?

csharp
public class PersonBuilder
{
    private readonly List<Func<bool>> _validations = new();
    
    public PersonBuilder AddValidation(Func<bool> validation)
    {
        _validations.Add(validation);
        return this;
    }
    
    public Person Build()
    {
        foreach (var validation in _validations)
        {
            if (!validation())
                throw new ValidationException("Validation failed");
        }
        
        return new Person { Name = _name, Age = _age };
    }
}

缁冧範 5锛氭€ц兘鍩哄噯娴嬭瘯

浠诲姟锛氭瘮杈冧笉鍚屽疄鐜扮殑鎬ц兘銆?

csharp
[MemoryDiagnoser]
public class BuilderBenchmark
{
    [Benchmark]
    public Person ObjectInitializer() { /* ... */ }
    
    [Benchmark]
    public Person ClassBuilder() { /* ... */ }
    
    [Benchmark]
    public Person StructBuilder() { /* ... */ }
    
    [Benchmark]
    public Person PooledBuilder() { /* ... */ }
}

馃敆 鐩稿叧璧勬簮

娣卞叆瀛︿範

  • [蹇€熷紑濮媇(../guide/getting-started.md) - 寮€濮嬩娇鐢ㄦ簮鐢熸垚鍣?
  • Hello World 绀轰緥 - 鏈€绠€鍗曠殑鍏ラ棬绀轰緥
  • [ToString 鐢熸垚鍣╙(./tostring-generator.md) - 瀹炵敤鐨勪唬鐮佺敓鎴愮ず渚?
  • 璇婃柇绀轰緥 - 瀛︿範璇婃柇鎶ュ憡鎶€鏈?
  • 娴嬭瘯绀轰緥 - 浜嗚В濡備綍娴嬭瘯婧愮敓鎴愬櫒

API 鍙傝€?

  • 浠g爜鐢熸垚 API - 浠g爜鐢熸垚 API 鍙傝€?
  • 璇箟妯″瀷 API - 璇箟妯″瀷 API 璇︾粏鍙傝€?
  • [鏈€浣冲疄璺礭(../api/best-practices.md) - 婧愮敓鎴愬櫒寮€鍙戞渶浣冲疄璺?

瀹樻柟鏂囨。

鐩稿叧鏂囨。

  • [ToString 鐢熸垚鍣╙(/examples/tostring-generator) - 瀛︿範鍩虹浠g爜鐢熸垚
  • [澧為噺鐢熸垚鍣╙(/examples/incremental-generator) - 瀛︿範鎬ц兘浼樺寲
  • 浠g爜鐢熸垚 API - 浠g爜鐢熸垚鎶€宸?
  • [鏈€浣冲疄璺礭(/api/best-practices) - 鎬ц兘浼樺寲寤鸿

绀轰緥椤圭洰

宸ュ叿鍜屽簱

涓嬩竴姝ュ涔?

  1. 鍩虹宸╁浐锛?

  2. 杩涢樁瀛︿範锛?

    • 瀛︿範 璇婃柇鎶ュ憡
    • 瀹炶返 [娴嬭瘯鎶€鏈痌(/examples/testing)
    • 鎺屾彙 [.NET 10 鐗规€(/examples/dotnet10-embedded)
  3. **娣卞叆鐮旂┒**锛?


鎬荤粨

Builder 妯″紡鐢熸垚鍣ㄥ睍绀轰簡濡備綍鐢熸垚澶嶆潅鐨勫祵濂楃被缁撴瀯鍜屾祦鐣呮帴鍙c€傚叧閿鐐癸細

  1. **浣跨敤 partial 绫?*锛氬厑璁哥敓鎴愬祵濂楃被
  2. 杩斿洖 this锛氭敮鎸侀摼寮忚皟鐢?
  3. 闆嗕腑楠岃瘉锛氬湪 Build 鏂规硶涓獙璇?
  4. **鏀寔涓嶅彲鍙樺璞?*锛欱uilder 鍙彉锛屽璞′笉鍙彉
  5. 鎻愪緵渚垮埄鏂规硶锛欰dd銆丆lear 绛夋柟娉?

閫氳繃瀛︿範杩欎釜绀轰緥锛屼綘鍙互鎺屾彙澶嶆潅浠g爜鐢熸垚鎶€鏈紝骞跺簲鐢ㄥ埌鍏朵粬璁捐妯″紡鐨勫疄鐜颁腑銆?

鏂囨。瀛楁暟缁熻锛氱害 8,500 瀛?

Q2: 濡備綍澶勭悊蹇呴渶灞炴€у拰鍙€夊睘鎬э紵

A: 浣跨敤鐗规€ф爣璁板繀闇€灞炴€э細

csharp
[GenerateBuilder]
public class User
{
    [Required]
    public string Name { get; set; }
    
    [Required]
    public string Email { get; set; }
    
    public string? PhoneNumber { get; set; }  // 鍙€?
}

// 鐢熸垚鐨?Builder 浼氶獙璇佸繀闇€灞炴€?
public class UserBuilder
{
    public User Build()
    {
        if (string.IsNullOrEmpty(_name))
            throw new InvalidOperationException("Name is required");
        
        if (string.IsNullOrEmpty(_email))
            throw new InvalidOperationException("Email is required");
        
        return new User
        {
            Name = _name,
            Email = _email,
            PhoneNumber = _phoneNumber
        };
    }
}

Q3: Builder 妯″紡涓庢瀯閫犲嚱鏁扮浉姣旀湁浠€涔堜紭鍔匡紵

A: Builder 妯″紡鐨勪富瑕佷紭鍔匡細

  1. **鍙鎬ф洿濂?*: 浣跨敤鍛藉悕鏂规硶鑰屼笉鏄綅缃弬鏁?
  2. **鐏垫椿鎬?*: 鍙互鎸変换鎰忛『搴忚缃睘鎬?
  3. **涓嶅彲鍙樻€?*: 鏀寔鍒涘缓涓嶅彲鍙樺璞?
  4. 楠岃瘉: 鍙互鍦ㄦ瀯寤烘椂楠岃瘉瀵硅薄鐘舵€?
  5. **榛樿鍊?*: 鍙互涓哄睘鎬ф彁渚涢粯璁ゅ€?
csharp
// 鉂?鏋勯€犲嚱鏁帮細鍙傛暟椤哄簭鍥哄畾锛岄毦浠ヨ蹇?
var user = new User("John", "john@example.com", "123-456-7890", 30, "USA");

// 鉁?Builder锛氭竻鏅版槗璇?
var user = new UserBuilder()
    .WithName("John")
    .WithEmail("john@example.com")
    .WithPhoneNumber("123-456-7890")
    .WithAge(30)
    .WithCountry("USA")
    .Build();

鏈€鍚庢洿鏂? 2025-01-21

基于 MIT 许可发布