Информация об изменениях

Сообщение Re[3]: "Монадические" костыли в дотнет от 10.06.2015 10:45

Изменено 10.06.2015 10:48 Venom

Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Venom, Вы писали:


S>По-моему, вы сами ответили на свой вопрос, добавить особо нечего


Справедливости ради нужно отметить что это справедливо только для плоской модели как у меня.
В случае иерархии глубиной более трех, к сожалению возникнет потребность в таких "монадных" хелперах типа IfNotNull, как показал Jack128.
Кстати, у меня в другом проекте заводятся сущности (руками) для всех элементов, а значения хранятся в Attribute.Value, т.е. проблем с вложенностью не возникает, т.к. всегда работа идет на "плоском" уровне.

S>Если в наследство досталась модель данных с цепочкой nullable свойств, то тут ничего не поделаешь: или ждать c#6, или писать свой хелпер для null propagation.

Да, такая модель данных и досталась. Но имея только xml без схемы (кстати, не уверен, поможет ли она тут) по-другому модель и не опишешь, только через nullable свойства, потому что всегда может не оказаться какого-либо элемента/атрибута.

S>Если модель однотипная — эти хелперы быстро вытеснятся более специализированными, но и более удобными (в нашем проекте то же самое зовётся емнип TryGetElementValue/TryGetAttributeValue).

+1

S>Префикс 'Try' важен. Иначе у вас будет два набора методов с однотипными названиями, но разным поведением: одни падают, другие возвращают null.

+1

S>P.S. И да, монады тут ни к селу ни к городу. Вы ж не пишете про абелевы группы в одномерном линейном пространстве при обсуждении "x + y == y + x"?

+1
Re[3]: "Монадические" костыли в дотнет
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Venom, Вы писали:


S>По-моему, вы сами ответили на свой вопрос, добавить особо нечего


Справедливости ради нужно отметить что это справедливо только для плоской модели как у меня.
В случае иерархии глубиной более трех, к сожалению возникнет потребность в таких "монадных" хелперах типа IfNotNull, как показал Jack128.
Кстати, у меня в другом проекте заводятся сущности (руками) для всех элементов, а значения хранятся в Attribute.Value, т.е. проблем с вложенностью не возникает, т.к. всегда работа идет на "плоском" уровне.

S>Если в наследство досталась модель данных с цепочкой nullable свойств, то тут ничего не поделаешь: или ждать c#6, или писать свой хелпер для null propagation.

Да, такая модель данных и досталась. Но имея только xml без схемы (кстати, не уверен, поможет ли она тут) по-другому модель и не опишешь, только через nullable свойства, потому что всегда может не оказаться какого-либо элемента/атрибута.

S>Если модель однотипная — эти хелперы быстро вытеснятся более специализированными, но и более удобными (в нашем проекте то же самое зовётся емнип TryGetElementValue/TryGetAttributeValue).

+1

S>Префикс 'Try' важен. Иначе у вас будет два набора методов с однотипными названиями, но разным поведением: одни падают, другие возвращают null.

+1

S>P.S. И да, монады тут ни к селу ни к городу. Вы ж не пишете про абелевы группы в одномерном линейном пространстве при обсуждении "x + y == y + x"?

+1

ЗЫ. > Ваш лимит оценок данному пользователю на сегодня исчерпан.
Первый раз достиг этого предела