نکته تکمیلی:
همچنین میتوان از روش زیر هم استفده کرد:
متد WithSurname اصل Command Query Seperation رو نقض میکنه چون در اینجا به صورت یک Query تعریف شده ولی در پایان وضعیت شی رو تغییر میدهد و همانند یک Command رفتار میکند و برای حل این مشکل میتوانیم به صورت زیر این متد رو بازنویسی کنیم:
public IExpectPrimaryContactPersonBuilder WithSurname(string surname) { return new PersonBuilder { Name = this.Name; Surname = surname; } }
class ExpectSurname : IExpectSurnamePersonBuilder { private string Name { get; } public ExpectSurname(string name) { this.Name = name; } public IExpectPrimaryContactPersonBuilder WithSurname(string surname) { if (string.IsNullOrEmpty(surname)) throw new ArgumentException(nameof(surname)); return new ExpectPrimaryContact(this.Name, surname); } }
برای سایر متدها هم میتوان از روشهای بالا استفاده کرد.