Ебать, я только что посмотрел как работает паттерн Builder с флюент интерфейсом через наследование, сначала нихуя не понял, потом не понял нахуя, а потом как понял и такой, ебать это круто. Чисто делюсь впечатлениями, сори за мат
Ебать, я только что посмотрел как работает паттерн Builder с флюент интерфейсом через наследование, сначала нихуя не понял, потом не понял нахуя, а потом как понял и такой, ебать это круто. Чисто делюсь впечатлениями, сори за мат
public abstract class PersonBuilder { protected Person person = new Person();
public Person Build() { return person; } }
public class PersonInfoBuilder<SELF> : PersonBuilder where SELF : PersonInfoBuilder<SELF> { public SELF Called(string name) { person.Name = name; return (SELF) this; } }
public class PersonJobBuilder<SELF> : PersonInfoBuilder</*PersonJobBuilder<SELF>*/SELF> where SELF : PersonJobBuilder<SELF> { public SELF WorksAsA(string position) { person.Position = position; return (SELF) this; } }
// here's another inheritance level // note there's no PersonInfoBuilder<PersonJobBuilder<PersonBirthDateBuilder<SELF>>>!
public class PersonBirthDateBuilder<SELF> : PersonJobBuilder<SELF> where SELF : PersonBirthDateBuilder<SELF> { public SELF Born(DateTime dateOfBirth) { person.DateOfBirth = dateOfBirth; return (SELF)this; } }
internal class Program {
public static void Main(string[] args) { var me = Person.New .WorksAsA("Quant") .Called("Dmitri") .Born(DateTime.UtcNow) .Build(); Console.WriteLine(me);