Fluent API

Posted: Март 22, 2011 in .NET

Неправильно

    public class Person1
    {
        public string Name { get; private set; }
        public int Age { get; private set; }

        public Person1 Called(string name)
        {
            Name = name;
            return this;
        }
        public Person1 AtAge(int age)
        {
            Age = age;
            return this;
        }
    }

Правильно

    public interface INamed
    {
        IAged Called(string name);
    }

    public interface IAged
    {
        void AtAge(int age);
    }

    public class Person2 : INamed, IAged
    {
        public string Name { get; private set; }
        public int Age { get; private set; }

        public IAged Called(string name)
        {
            Name = name;
            return this;
        }

        public void AtAge(int age)
        {
            Age = age;
        }
    }

В чем разница?

            PersonBuilder builder = new PersonBuilder();
            
            builder.BuildPerson1()
                .Called("Вася")
                .Called("Петя")
                .AtAge(22)
                .AtAge(12)
                .Called("Коля");

            builder.BuildPerson2()
                .Called("Вася")
                .AtAge(22);

Плюшка: унаследовать интерфейсы от

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface ICleanInterface
    {
        [EditorBrowsable(EditorBrowsableState.Never)]
        Type GetType();

        [EditorBrowsable(EditorBrowsableState.Never)]
        int GetHashCode();

        [EditorBrowsable(EditorBrowsableState.Never)]
        string ToString();

        [EditorBrowsable(EditorBrowsableState.Never)]
        bool Equals(object obj);
    }
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s