Кто-то не очень понимает, что ORM в первую очередь - маппер. Да, и называется он Object-Relational Mapper. Отвечает за взаимосвязь между реляционными данными и объектно-ориентированным миром.
Тот, кто хотя бы раз сталкивался с опечаткой при загрузке поля в объект, уже не задаёт вопросы, оправдан ли ORM. Когда за тебя связку делает кодогенератор с нулевой возможностью ошибки на любой сложности схеме - начинаешь ценить надёжность такого решения.
Что касается SQL. ORM не может в принципе покрыть весь синтаксис SQL. И не должен, это не его задача. Его задача - сделать простым синтаксис 95% случаев, когда дальше джойна и WHERE ничего не надо. ORM не мешает использовать чистый SQL, а чаще всего может его дополнить, переводя результат сложного запроса в набор объектов.
C# действительно немного особняком стоит, благодаря рефлекшену. Рефлекшен позволяет в рантайме распарсить expression tree и понять "чего хотел программист". К примеру:
Нда, и эта извращённая. F-блок прижат к цифрам (часто будешь задевать escape, когда пишешь "ё"), расстояние между четвёрками F сжато, вслепую по F12 не попадёшь.
Ясно-понятно. Мы не умеем в джойн, поэтому сделаем подзапрос. Может сразу CTE прикрутить?
Задача решается элементарным селфджойном, чтобы проверить потомка на нулл. Парент уже есть в полях. Дальше можно и кейсом, можно и ифом выдать нужное значение
Я вот честно, не понимаю. Почему гадство? Люди, которые уехали в Канаду давно имеют канадские симки. Получили уведомление - ну сделайте что-нибудь, ну для начала симку страны, где живёте. Канадцы не обязаны делать роуминг для вашей страны. То, что был роуминг - это результат договорённостей а не нормальная нормальность. Может надо в политике страны кроется ответ, почему нам так часто напоминают, что текущее положение дел это результат интеграции.
Ну конструкция when(health == 0) это огонь. В концепции zero-cost features это можно даже сделать не на подписке, а вставляя компилятором вызов if (health == 0) при каждом декременте health. Очень красивая конструкция
Какая-то неловкая статья о том, как присобачить дженерики туда, куда их не надо присобачивать. Очень наркомански выглядит метод класса, который принимает два параметра типа Т, чтобы склеить их в тот же тип Т.
Ладно, если использовать экстеншены, то да, на вход приходит два аргумента, но первый помечен ключевым словом this, а значит его вызов будет с одним аргументом.
В реальном коде склейки, плюсы, аппенды и прочие конкатинации работают в типе класса и принимают ОДИН аргумент типа класса и выдают свой же тип как результат. Зачем тут дженерик? Чтобы клеить все и вся не учитывая тип? Таких задач в жизни не бывает.
Ближе всего я вижу необходимость помечать классы как способные агреггироваться. Но в данном случае решение унаследоваться от абстрактного класса - это говёное решение. В реальной жизни классу уже есть от чего наследоваться, а для обозначения возможностей классов придумали интерфейсы. В таком случае не надо вот этих всех "мудростей", просто наследуем IPohooy<T> и реализуем метод интерфейса T Pohooy(T second). Всё
Дата последнего изменения это не дата создания. В статье именно речь про дату внесения записи в БД. Такая дата не перезаписывается. И не понимаю, почему Вы против даты изменения. Сохранение даты изменения во всех таблицах ничуть не отменяет истории стейтов или что там у вас... Но добавляет способ выбрать объекты изменённые в определённом промежутке времени и ещё много чего полезного.
James Webb telescope is the most expensive wallpaper generator in the world (c) someone from reddit. А вообще странно рассуждать (в заголовке) стоит оно того или нет. Это первый аппарат такого класса и единственная возможность заглянуть чуть дальше. Аналоги на алиэкспресс ещё не появились.
А что если теория «тёмного леса» верна? Тогда вообще любая коммуникация, видная другим цивилизациям — фатальная ошибка. Тем более, если она видна более развитым цивилизациям. Обезьяны — ерунда, их можно взять под контроль или уничтожить (как мы любим). Вот если услышит какая-нибудь более развитая цивилизация, вот как она отреагирует? Что они сделают?
Может быть наша цивилизация уже обречена, после того, как был отправлен сигнал «Мир, Ленин, СССР» в 62м. И всего пару лет осталось до того, как сигнал доберётся до цивилизации, которая умеет в варп. Сейчас уже ни Ленина, ни СССР, а по прилёту «дружественных» инопланетян не будет и мира.
Позвольте, у ситроена была неподвижная ступица руля с кнопками и это ОЧЕНЬ удобно. Человек, когда ему нужно вслепую нажать кнопку, отталкивается от положения головы, а не рук. И когда кнопки крутятся вместе с рулём, это сбивает с толку, даже если немного руль повёрнут — уже не попадёшь. Ну и бонусом, неподвижная ступица дала возможность сделать овальную подушку безопасности, а не как у всех — круглую, что идёт плюсиком в безопасность.
Кто-то не очень понимает, что ORM в первую очередь - маппер. Да, и называется он Object-Relational Mapper. Отвечает за взаимосвязь между реляционными данными и объектно-ориентированным миром.
Тот, кто хотя бы раз сталкивался с опечаткой при загрузке поля в объект, уже не задаёт вопросы, оправдан ли ORM. Когда за тебя связку делает кодогенератор с нулевой возможностью ошибки на любой сложности схеме - начинаешь ценить надёжность такого решения.
Что касается SQL. ORM не может в принципе покрыть весь синтаксис SQL. И не должен, это не его задача. Его задача - сделать простым синтаксис 95% случаев, когда дальше джойна и WHERE ничего не надо. ORM не мешает использовать чистый SQL, а чаще всего может его дополнить, переводя результат сложного запроса в набор объектов.
C# действительно немного особняком стоит, благодаря рефлекшену. Рефлекшен позволяет в рантайме распарсить expression tree и понять "чего хотел программист". К примеру:
Orders.Where(o => o.IsCompleted && o.CreatedDate.Year > 2020).OrderBy(o.ID)Превращается в рантайме в SQL:
SELECT * FROM db.Orders a WHERE a.IsCompleted = 1 AND YEAR(a.CreatedDate) > 2020 ORDER BY a.IDА потом результат преобразует в массив типизированных объектов с полями, поведением и состоянием.
А с женщиной в чём проблема? В убежищах нет женщин? В любом fallout есть возможность выбрать пол персонажа.
Негры. Что с ними не так? Это же не ведьмак, они тут могут быть в любом количестве, не только Престон Гарви.
Я бы не стал стилистику F3-F4 называть детской.
Cпособ решения сложных задач путём разбиения их на более простые подзадачи называется декомпозицией.
Да если бы. В Казахстане премиума нет, ютуб просто безальтернативно "предлагает" включить рекламу.
Нда, и эта извращённая. F-блок прижат к цифрам (часто будешь задевать escape, когда пишешь "ё"), расстояние между четвёрками F сжато, вслепую по F12 не попадёшь.
понадобится какой-нибудь там хитрый JOIN, но нетЯсно-понятно. Мы не умеем в джойн, поэтому сделаем подзапрос. Может сразу CTE прикрутить?
Задача решается элементарным селфджойном, чтобы проверить потомка на нулл. Парент уже есть в полях. Дальше можно и кейсом, можно и ифом выдать нужное значение
Я вот честно, не понимаю. Почему гадство? Люди, которые уехали в Канаду давно имеют канадские симки. Получили уведомление - ну сделайте что-нибудь, ну для начала симку страны, где живёте. Канадцы не обязаны делать роуминг для вашей страны. То, что был роуминг - это результат договорённостей а не нормальная нормальность. Может надо в политике страны кроется ответ, почему нам так часто напоминают, что текущее положение дел это результат интеграции.
20 лет работаю в рф на C#. Первый раз слышу, что шарп не котируется.
Ну конструкция when(health == 0) это огонь. В концепции zero-cost features это можно даже сделать не на подписке, а вставляя компилятором вызов if (health == 0) при каждом декременте health. Очень красивая конструкция
Какая-то неловкая статья о том, как присобачить дженерики туда, куда их не надо присобачивать. Очень наркомански выглядит метод класса, который принимает два параметра типа Т, чтобы склеить их в тот же тип Т.
Ладно, если использовать экстеншены, то да, на вход приходит два аргумента, но первый помечен ключевым словом this, а значит его вызов будет с одним аргументом.
В реальном коде склейки, плюсы, аппенды и прочие конкатинации работают в типе класса и принимают ОДИН аргумент типа класса и выдают свой же тип как результат. Зачем тут дженерик? Чтобы клеить все и вся не учитывая тип? Таких задач в жизни не бывает.
Ближе всего я вижу необходимость помечать классы как способные агреггироваться. Но в данном случае решение унаследоваться от абстрактного класса - это говёное решение. В реальной жизни классу уже есть от чего наследоваться, а для обозначения возможностей классов придумали интерфейсы. В таком случае не надо вот этих всех "мудростей", просто наследуем IPohooy<T> и реализуем метод интерфейса T Pohooy(T second). Всё
¯\_(ツ)_/¯
Замена стека jetbrains ноутпадом++ - это, конечно, хорошая шутка.
Термин Reflection переводить не надо. "Отражение" смотрится чужеродно.
А что же случилось?
Код скриншотами IDE - это ужас. Поэтому код я не смотрел.
Вообще меня интересует, какую задачу решал автор и чем это отличается от тасков?
Дата последнего изменения это не дата создания. В статье именно речь про дату внесения записи в БД. Такая дата не перезаписывается. И не понимаю, почему Вы против даты изменения. Сохранение даты изменения во всех таблицах ничуть не отменяет истории стейтов или что там у вас... Но добавляет способ выбрать объекты изменённые в определённом промежутке времени и ещё много чего полезного.
James Webb telescope is the most expensive wallpaper generator in the world (c) someone from reddit. А вообще странно рассуждать (в заголовке) стоит оно того или нет. Это первый аппарат такого класса и единственная возможность заглянуть чуть дальше. Аналоги на алиэкспресс ещё не появились.
На такие случаи придумали сериализацию
Может быть наша цивилизация уже обречена, после того, как был отправлен сигнал «Мир, Ленин, СССР» в 62м. И всего пару лет осталось до того, как сигнал доберётся до цивилизации, которая умеет в варп. Сейчас уже ни Ленина, ни СССР, а по прилёту «дружественных» инопланетян не будет и мира.