[CodeJam] WTF moments
От: Sinix  
Дата: 18.04.16 10:08
Оценка:
Продолжаю смотреть код в CodeJam.

Всё классно, но несколько типов/методов не дотягивают до общей (довольно высокой) планки.
Может, их в Experimental пока?

1. DisjointSetsBase выглядит как заготовка для чего-то большего.
С точки зрения незнакомого с матчастью клиента код выглядит как один большой WTF. Ну вот навскидку
* базовый класс не абстрактный
* как часть контракта торчит T (в идеале переименовать в TNode), который в публичном API недоступен,
* никаких проверок индексов
но это чисто косвенные признаки, главная проблема в том, что никаких реальных сценариев использования при дизайне API не использовалось.
Ну, или эти сценарии настолько экзотичные, что из API их не восстановишь.

2. EnumerableExtensions — AsList, AsArray, ToStrings. По сравнению с остальными все три выглядят _очень_ спорно.
Они нам точно нужны?

3. StringExtensions.Length()
        public static int Length([CanBeNull] this string str) => str?.Length ?? 0;

Я бы убрал. Ну, или переименовать в TryGetLength тогда уж.

4. ParallelExtensions.RunInParallel + ParallelQueue. Сам код ок, но чем оно лучше Parallel.For/Foreach?
Нужен свой пул — надо свой таск шедулер делать. Иначе будет побег из курятника на первом же await.

5. ReaderWriterLockSlimExtensions — надо наследовать от CriticalFinalizerObject + освобождать в финалайзере. Иначе первый же
залетевший дятел Thread.Abort() очень больно всё порушит.

UPD
6. XNodeExtensions — Required/Optional переименовать в стандартные Get/TryGet/XxxOrDefault.

Все 6 точно делать только после обсуждения, тут на своей правоте не настаиваю
Отредактировано 18.04.2016 19:15 Sinix . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.