[ d ] [ b / cu / dev ] [ r ] [ a / ts ] [ ci ] [ gnx / int ] [ misc ] [ dev / stat ]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог] [Главная]

Файл: prog.jpg -(168 KB, 400x300, prog.jpg)
168 No.11022  
Есть тут кто пишет код на 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.
>> No.11028  
>monads
>c#
я пробовал многажды. монадический код выглядит настолько визульно сложно, что оно того не стоит.

>TDD, Agile
обезьяньи ужимки.

>DDD
не слышал, но осуждаю.
>> No.11029  
>обезьяньи ужимки

девчую
>> No.11030  
Алсо, раз доска все-равно мертвая, мне интересно в чем агил и тдд проявляются у опа. Он что, пишет программы корректируя каждый шаг с клиентом и дописывая находу требуемые функции, может даже составляя детсадовские карточки вроде - я нажму эту кнопку и случится то-то и то-то? Он пишет тесты раньше чем код и код пишет только так что бы тот проходил тесты?
>> No.11033  
>пишет программы корректируя каждый шаг с клиентом и дописывая находу требуемые функции
Почти так и происходит.
>Он пишет тесты раньше чем код и код пишет только так что бы тот проходил тесты
Иногда так. Иногда пишу быстро прототип того, что нужно и уже потом покрываю тестами.

Тесты неиллюзорно помогают при внесении изменений. Мне нравится думать о (блочных)тестах как о некой проверке кода на адекватность. Иногда пишу тесты и узнаю по ним, что что-то работает не так как ожидалось, хотя при этом компилируется и не кидает исключений.
>> No.11035  
>Иногда пишу быстро прототип того, что нужно и уже потом покрываю тестами.

Это не тдд.
>> No.11038  
>>11035
Конечно не тдд.
Тдд как единственный метод для разработки всего слишком узок.
>> No.11049  
>>11022
Монады в быту использовал в .NET'е, как и в C# так и в F#.

Как-то раз нужно было писать сервис, api которого подразумевал целую кучу опциональных значений, там-то самописная Maybe и пригодилась, получилось вполне прилично и удобно.

Далее понадобилось написать парсер на небольшого формального подмножества естественного языка, и тут сильно пригодился FParsec для F#.
>> No.11050  
>>11049
>там-то самописная Maybe и пригодилась, получилось вполне прилично и удобно.
Ты или пиздобол, или говноед. Сотни вложенных лямбд - не самое приличное и удобное на этом свете. Уж лучше ранние ретурны.
>> No.11052  
>>11050
Если определить extension методы SelectMany, Where, Select и т.п. то можно будет пользоваться LINQ в виде запросов, что весьма похоже на монадический синтаксис:

from x in something.ToMaybe()
from y in somewhat.ToMaybe()
select x.DoSomeStuffWith(y)
>> No.11053  
>>11052
А, вон ты про что. Прошу прощения. Я линку синтаксис просто не перевариваю, поэтому у меня были Fmap(), Bind(...) и тонны анонимок.
>> No.11054  
>>11053

А просто extension методы и различные helper'ы я очень активно использую.

Из чего-то более менее нестандратного могу вспомнить такую штуку:
Было нужно в одном месте передавать названия некоторых полей, свойств или методов, и захотелось делать так, чтобы при изменении их названий через рефакторинг не нужно было менять их ручками. Передача таких названий, это, конечно, плохая практика, но это был легаси код и исправлять его более глобально совсем не хотелось.
Тогда родилось такое решение:

Name.For<MyClass>.Of(x=>x.SomeProperty), которое возвращает название соотвествующего поля, св-ва или метода указанного класса.
>> No.11056  
>>11054
У меня начальник такую штуку написал для всяких озервабл. Охуенная вещь была.
>> No.11125  
public static T Match<T>(
this T target,
Predicate<T> predicate,
Action<T> whenMatched)
{
if (predicate(target))
whenMatched(target);
return target;
}
>> No.14481  
А я как-то раз запилил логирование 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");
>> No.14482  
> 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;
}
Написал хуйню, но идея ясна.
Так же в экстеншоны запихиваются методы-беспризорники.
Или хитровыебанные сортировки/поиски туда же отправляются.



[ d ] [ b / cu / dev ] [ r ] [ a / ts ] [ ci ] [ gnx / int ] [ misc ] [ dev / stat ]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог] [Главная]