Есть тут кто пишет код на C# с использованием DDD, TDD, Agile? Юзаете ли самописные extension methods(какие?) или используете готовые(moreLinq etc)? Используете ли вы в быту монады(кроме IEnumerable) и какие? Нашёл тут github.com/sergun/monads.net. Судя по примерам, можно чуть сократить boilerPlate. codeproject.com/Articles/649989/Monad-like-programming-with-Csharp Вот ещё интересная статья. Шарпотред. Расчехляйте свои Helper.dll.
>monads >c# я пробовал многажды. монадический код выглядит настолько визульно сложно, что оно того не стоит. >TDD, Agile обезьяньи ужимки. >DDD не слышал, но осуждаю.
>обезьяньи ужимки девчую
Алсо, раз доска все-равно мертвая, мне интересно в чем агил и тдд проявляются у опа. Он что, пишет программы корректируя каждый шаг с клиентом и дописывая находу требуемые функции, может даже составляя детсадовские карточки вроде - я нажму эту кнопку и случится то-то и то-то? Он пишет тесты раньше чем код и код пишет только так что бы тот проходил тесты?
>пишет программы корректируя каждый шаг с клиентом и дописывая находу требуемые функции Почти так и происходит. >Он пишет тесты раньше чем код и код пишет только так что бы тот проходил тесты Иногда так. Иногда пишу быстро прототип того, что нужно и уже потом покрываю тестами. Тесты неиллюзорно помогают при внесении изменений. Мне нравится думать о (блочных)тестах как о некой проверке кода на адекватность. Иногда пишу тесты и узнаю по ним, что что-то работает не так как ожидалось, хотя при этом компилируется и не кидает исключений.
>Иногда пишу быстро прототип того, что нужно и уже потом покрываю тестами. Это не тдд.
>>11035 Конечно не тдд. Тдд как единственный метод для разработки всего слишком узок.
>>11022 Монады в быту использовал в .NET'е, как и в C# так и в F#. Как-то раз нужно было писать сервис, api которого подразумевал целую кучу опциональных значений, там-то самописная Maybe и пригодилась, получилось вполне прилично и удобно. Далее понадобилось написать парсер на небольшого формального подмножества естественного языка, и тут сильно пригодился FParsec для F#.
>>11049 >там-то самописная Maybe и пригодилась, получилось вполне прилично и удобно. Ты или пиздобол, или говноед. Сотни вложенных лямбд - не самое приличное и удобное на этом свете. Уж лучше ранние ретурны.
>>11050 Если определить extension методы SelectMany, Where, Select и т.п. то можно будет пользоваться LINQ в виде запросов, что весьма похоже на монадический синтаксис: from x in something.ToMaybe() from y in somewhat.ToMaybe() select x.DoSomeStuffWith(y)
>>11052 А, вон ты про что. Прошу прощения. Я линку синтаксис просто не перевариваю, поэтому у меня были Fmap(), Bind(...) и тонны анонимок.
>>11053 А просто extension методы и различные helper'ы я очень активно использую. Из чего-то более менее нестандратного могу вспомнить такую штуку: Было нужно в одном месте передавать названия некоторых полей, свойств или методов, и захотелось делать так, чтобы при изменении их названий через рефакторинг не нужно было менять их ручками. Передача таких названий, это, конечно, плохая практика, но это был легаси код и исправлять его более глобально совсем не хотелось. Тогда родилось такое решение: Name.For<MyClass>.Of(x=>x.SomeProperty), которое возвращает название соотвествующего поля, св-ва или метода указанного класса.
>>11054 У меня начальник такую штуку написал для всяких озервабл. Охуенная вещь была.
public static T Match<T>( this T target, Predicate<T> predicate, Action<T> whenMatched) { if (predicate(target)) whenMatched(target); return target; }
А я как-то раз запилил логирование NLog'ом и вызов по типу экзепшена: private static readonly Logger Log = LogManager.GetCurrentClassLogger(); private static T LogThrow<T>(string message) where T : Exception { ....Log.Error(message); ....return (T) Activator.CreateInstance(typeof (T), BindingFlags.CreateInstance, message); } Вызывалось так: throw LogThrow<DivideByZeroException>($"You should not devide {value} by zelo");
> DDD, TDD, Agile Хуита. Учитывая, что всё должно было быть готово вчера, а на тесты вечно времени нет. И тесты постоянно стремительно устаревают, а времени на их сопровождение нет. Конечно, круто прогнать тесты и увидеть, что ты сломал до тестирования/продакшена, но на тесты нужно время, а менеджер — пидорас. > Юзаете ли самописные extension methods(какие?) Да. Перечислять долго — они все дико ситуативные. Например, какие-нибудь специфичные преобразования чего-нибудь в кого-нибудь: ToSafePenis(this Penis penis) { if(penis == null) return new Penis(); if(penis.Length == 12) return new Penis(28); return penis; } Написал хуйню, но идея ясна. Так же в экстеншоны запихиваются методы-беспризорники. Или хитровыебанные сортировки/поиски туда же отправляются.
- wahaba + wakaba 3.0.9 + futaba + futallaby -