Size: a a a

2017 May 02

Dv

Dr. Friedrich von Never in F# Chat
Akhmed Sheriev
в императивном стиле это было бы что то вроде модели предметной области который выбрасывал бы исключение в негативных сценариях
А вот как контрпример решению на исключениях и проверках во время выполнения тот код обычно и приводят, да? Он не совсем жизненный, но идею демонстрирует нормально.
источник

AS

Akhmed Sheriev in F# Chat
да идею то я понял - но что если мне нужно теперь еще третье значение добавить?
источник

AS

Akhmed Sheriev in F# Chat
как тогда разрулить это?
источник

AS

Akhmed Sheriev in F# Chat
в императивном стиле тоже не обязательно выбрасывать на каждый чих исключение
источник

AS

Akhmed Sheriev in F# Chat
как вариант можно сделать какой нибудь Builder который собирает модель
источник

AS

Akhmed Sheriev in F# Chat
и один метод Validate который проверяет что хотя бы одно значение задано
источник

AS

Akhmed Sheriev in F# Chat
тогда в императивном стиле добавление новых полей никак не скажется на предыдущих значениях и не приведет к взрывообразному росту комбинаций возможных значений
источник

AS

Akhmed Sheriev in F# Chat
вот небольщой трешак набросал в многословном императивном стиле:
источник

AS

Akhmed Sheriev in F# Chat
public class BaseModel : Dictionary<string, object>
   {
       protected  void SetValue<T>(string key, T value)
       {
           this[key] = value;
       }

       protected  T GetValue<T>(string key)
       {
           if (this.ContainsKey(key))
           {
               return (T)this[key];
           }
           return default(T);
       }
   }
источник

AS

Akhmed Sheriev in F# Chat
ну и собственно сама модель:
источник

AS

Akhmed Sheriev in F# Chat
public class ContactModel : BaseModel

    {

        public string Email

        {

            get { return GetValue<string>("email"); }

            set { SetValue("email", value); }

        }


        public string Phone

        {

            get { return GetValue<string>("phone"); }

            set {  SetValue("phone",value);}

        }


        public bool Validate()=>this.Any();

    }
источник

AS

Akhmed Sheriev in F# Chat
собственно можно сколько угодно полей добавлять, но Validate сработает только если хотя бы одно значение было указано
источник

AS

Akhmed Sheriev in F# Chat
конечно многословно но можно AOP либу (Fody) замутить для того что бы намного меньше слов было и осталось что то вроде Email {get; set;}
источник

AS

Akhmed Sheriev in F# Chat
ну это если совсем заморочится
источник

RM

Roman Melnikov in F# Chat
Akhmed Sheriev
как тогда разрулить это?
Агрегат.
источник

PK

Pavel Khritonenko in F# Chat
type CaseOfDu = { Id: string; Phone: string }
type Du = CaseOfDu of CaseOfDu
источник

PK

Pavel Khritonenko in F# Chat
Это если в "строчке" больше двух трёх-значений появляется.
источник

g

gsomix in F# Chat
@SherievAkhmed Задача в том, чтобы избежать полностью незаполненный ContactInfo?
источник

NM

Nikolay M in F# Chat
А кто мне пример скидывал из Suave?
источник

NM

Nikolay M in F# Chat
С конфигом)
источник