Pavel
в паттерны не умел )
Pavel
http://www.forbes.ru/sites/default/files/users/user4018/Acton-Facebook.jpeg
Roman
Бывает не берут по совершенно разным причинам.
Roman
Собираю копилку архитектурно ужасающего гавнокода, но вполне грамотно написанного.😊
мне очень нравится, когда есть репозиторий, над ним еще репозиторий, над этим есть еще абстракция, все это прибито к EF, а что именно селектится, определяется в конфигах автомаппера.
Roman
о, ну это уже слишком
Roman
* я такого не встречал
Vasily
о, ну это уже слишком
Да не, логично же
Roman
не то, чтобы это было необходимо для хорошего проекта, но если начал собирать паттерны, становится трудно остановиться
Vasily
У меня, помню, один гаврик писал файлвотчер
Vasily
Ну типа мониторинг файлов в папочке и хендлить их
Vasily
Он там умудрился три параллельных иерархии засунуть
Vasily
И около 5 уровней абстракции
Roman
ну раз уж пошел разговор за совсем мясную тему, то самое мощное, что я видел, это 7 классов (всякие Dialog Manager, Dialog container, Layout manager и тд) для того, чтобы просто в WPF приложухе показать во весь экран вопрос да/нет, закрыв остальной контент. Цимес в том, что для этого использовалась техника спизди лэйаут, а потом верни на место, вместо простого Visibility=Hidden, что приводило к перебиндингу контента и тому, что все, что юзер натыкал, слетало обратно в дефолтные значения. Но тут конечно больше автор виноват, чем ООП
x
А тайп провайдеры в коре уже есть?
gsomix
А тайп провайдеры в коре уже есть?
Только те, что портировали.
gsomix
// я смирился, что нужно читать оба чата на предмет вопросов про F#
Roman
@Kleidemos @fillpackart https://github.com/kagetoki/SnakeGame/blob/doc/article/doc/Snake%20Mailbox.md
Klei
@Kleidemos @fillpackart https://github.com/kagetoki/SnakeGame/blob/doc/article/doc/Snake%20Mailbox.md
Ок. Освобожусь начну потихоньку ревьюить.
x
// я смирился, что нужно читать оба чата на предмет вопросов про F#
А мне этот чат больше нравится, тут нет ботов и он душевнее )
Ayrat
@Kleidemos @fillpackart https://github.com/kagetoki/SnakeGame/blob/doc/article/doc/Snake%20Mailbox.md
После слов что 500мс минимально допустимый делей, сложилось впечатление что фшарп - тормозное говно
Ayrat
Не публикуй без код ревью. Надо ускорять
gsomix
Не публикуй без код ревью. Надо ускорять
Отрицательный результат — тоже результат.
Крылатый
Если верить одному зарубежному автору, Атья представил не вполне доказательство, и не вполне про Дзета-функцию. Он сделал утверждения относительно другой функции, но с такими свойтвами она не существует. https://aperiodical.com/2018/09/atiyah-riemann-hypothesis-proof-final-thoughts/
Ayrat
Отрицательный результат — тоже результат.
В науке да, но здесь не очень) ведь известно что фшарп может быть быстрым. И в змейке мягко говоря не дофига чего происходит чтобы там делей такой был
gsomix
Просто если исправить изначальную версию, то и статья немного другая получится. :)
Ayrat
Но в статье же все хорошо закончилось?
Кстати да! Дочитал до конца. Посмотрел на код - офигел
Ayrat
свои континуейшены, трамплины для них, своя очередь
Ayrat
О.о
gsomix
Сделал ребрендинг аватарки.
Ayrat
В стандартной библиотеке?
Ну конкурентная очередь точно есть. И континуейшены - Async
Ayrat
System.Collections.Concurrent вроде
gsomix
Roman
Ну да, там зубодробительно. Иногда люблю почитать такие исходники
Dr. Friedrich
Ну, вернее, там всё сложно.
Dr. Friedrich
F# просто не требует <summary>
Dr. Friedrich
А Ionide (в обход стандарта, надо заметить?) интерпретирует комментарии как Markdown.
Dr. Friedrich
https://github.com/philippranzhin/testTask
Я посмотрел немножко, и мне кажется, что ты делал слишком абстрактно. Везде штуки, которые принимают и передают функи и экшены из string в bool и обратно. На мой взгляд, это выглядит крайне запутанно. Вот как бы я ожидал увидеть внешний интерфейс такой библиотеки: 1. У нас есть класс IT9Helper, который в конструктор ожидает IIoService. 2. У IIoService уже есть все эти методы ReadString, WriteString, WriteError и т.п. (хотя для WriteError можно и название получше найти, или вообще бросать исключения, но не суть) 3. Можно также параметризовать наш класс каким-нибудь IT9Validator, который бы валидировал сообщения (то, что ты сейчас сделал просто списком фунок)
Dr. Friedrich
(код почти из настоящего продакшена; если б я не взялся ревьюить, то он бы, может, и не появился, но, может, и дожил бы до продакшена)
Vasily
Откуда там двойное приведение типов
Vasily
И почему не as
Dr. Friedrich
И почему не as
Потому что я против as в тех случаях, когда оно не нужно.
Dr. Friedrich
И я буду стоять насмерть.
Dr. Friedrich
Откуда там двойное приведение типов
А это хороший вопрос для собеседования ;)
Dr. Friedrich
C# по какой-то мутной причине не умеет там (TThis)this
Vasily
Ох млин
Vasily
Это жидбрейнс?
Dr. Friedrich
Ну то есть кастовать this к генерик тайп параметру просто так нельзя, если для this не известно в компил-тайме, что он точно наследуется
Dr. Friedrich
Но там был указан констрейнт от IBusinessLogic<T, TThis>
Dr. Friedrich
Поэтому дабл каст сработал :)
Dr. Friedrich
Это жидбрейнс?
Нет, у JB я не видел настолько мутного кода.
Dr. Friedrich
Пока что, во всяком случае.
Dr. Friedrich
Но мб я его ещё напишу!
Vasily
Вообще, конечно, странноватый код
Vasily
Не совсем ясно, какую задачу решает
Dr. Friedrich
Задачу кастования this к TThis.
Dr. Friedrich
Мы CRTP делали на C#.
Vasily
А внешним методом это не делалось?
Vasily
Типа extension
Dr. Friedrich
И что написать в экстеншене?
Dr. Friedrich
Задачка довольно простая, на самом деле
Dr. Friedrich
Представь, что ты делаешь билдер
Dr. Friedrich
(о да!)
Dr. Friedrich
class BuilderBase { BuilderBase WithFooOption() => this; }
Vasily
Так
Vasily
И?
Dr. Friedrich
И хочешь его вызывать так: var muBuilder = new ChildBuilder() .WithFooOption() .WithChildOption();
Vasily
Выглядит как ебанина, если честно
Dr. Friedrich
И пишешь потом такой: class ChildBuilder : BuilderBase { ChildBuilder WithChildOption() => this; }