Как стать автором
Обновить
-4
0

Пользователь

Отправить сообщение

Пробовали уже использовать альтернативу Unsafe - Foreign Function & Memory API? Сильная разница в производительности?

На самом деле, большая доля этих правил не влияет на среду исполнения кода, который вы пишете. Подобные правила невозможно оценить объективно

Возможно. Существует простой численный критерий - время необходимое на реализацию новых фич и внесение изменений при работе с тем или иным кодом.

Правила «чистого» кода были разработаны, потому что кто-то подумал, что
они позволят создавать более удобные в поддержке кодовые базы. Даже если
бы это так, вы должны задаться вопросом: «А какой ценой?»

Автор оригинальной статьи явно пришел из мира разработки системного ПО (к которому, безусловно, можно отнести все игровые движки). И, как следствие, он не понимает одной очень простой вещи: в мире разработки прикладного ПО скорость разработки и внесения изменений обходится заказчику зачастую дороже покупки или аренды нового оборудования. Именно из этого факта растут ноги у всех правил "чистого кода". Экономия на человеко-часах и скорейший выход на рынок ценой потери производительности и большего тербования к объему памяти - банально выгоднее с точки зрения прибыли.

Вот так все просто.

"Пользователь инициирует процесс, обратившись к endpoint'у авторизации IdP" - в то время как на диаграмме показано как пользователь в первую очередь обращается к RP. Поправьте меня пожалуйста, если это не ошибка в статье.
P.s. речь идет о Authorization Code

И сразу напрашиваются очевидные вопросы:
Как часто обычным пользователям встречаются задачи требующие изменения их софта? Насколько критичны эти задачи?
Есть ли другие способы решать такие задачи без изменения текущего софта?
Насколько эти способы затратней по времени в сравнении с собственноручным переписыванием ПО?
Какой уровень знаний требуется пользователю чтобы внести изменения в свой софт?
Сколько времени и сил потребуется для приобретения таких знаний?
Есть ли у пользователей другие задачи помимо изучения ОС и программирования?
Как соотносится выгода, которую получит пользователь вкладывая время в изучение своей специальности с выгодой от вложения времени в изучения ОС и программирования (если они не являются его специальностью)?

Если немного подумать, вы довольно быстро заметите, что предлагаемая вами идея не жизнеспособна.

Можно сделать ещё проще и ничего не переименовывать

Ну, если инициаторы сами готовы заплатить за весь этот банкет (а изменения связанные с переименованиями технических терминов могут быть ОЧЕНЬ дорогими) - то можно и попробовать)

Среди объективных критериев вы забыли один очень важный - скорость внесения изменений в код. Попробуйте взглянуть на вопрос с учетом этой детали.

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

Собирал свое приложение под Ubuntu 20.04 используя OpenJDK. Попробовал добавить для jlink опции --strip-debug, --no-header-files, --no-man-pages. В итоге получилось ужать образ, но только до 100 МБ. Если вам не сложно, опишите кратко как вы смогли получить ваши 50мб?
P.s. я продолжаю надеяться, что когда-нибудь, с помощью этих инструментов, можно будет собрать образ весящий не больше чем делфийские приложения. Эх, мечты)

Чтобы jlink и jpackager могли собрать нативный образ - все завивисмости вашего приложения должн быть модульными, т.е. моддерживать JPMS. Поэтому, вместо H2 рекомендую взять HSQLDB, в качестве бибилиотеки логирования - logback версии 1.3 и выше.

P.s. по сравнению с прожорливостью jlink и jpackager - Flatter и Golang выдают очень даже компактные сборки. Когда я написал небольшой таймер на JavafX + Gson + Logback, то получившейся бинарник весил целых 500 мб (500 МБ, КАРЛ!). Может я неправильно использовал эти инструменты, но это прям дохрена.

Тоже долгое время боролся с этой проблемой в своем проекте. В итоге пришел к подходу, в котором кол-во запросов к БД равно кол-ву типов сущностей входящих в состав загружаемых агрегатов. В вашем случае - это два запроса (один извлекает всех клиентов, другой все email связанные с полученными клиентами).

До сих пор не могу понять, какое отношение имеет это министерство к просвещению?

Бизнес-сущность ничего не знает ни о логике приложения

И при этом вы ссылаетесь на чистый код Роберта Мартина.

Описанный Вами подход называется Simple Domain Model. Он широко распространен и, безусловно, имеет право на жизнь. Однако имеет и ярых противников, одним из которых как раз и является Роберт Мартин. В упомянутой Вами книге он называет этот подход "анемичной моделью" и подвергает резкой критике. Мне кажется, было бы не плохо, если бы в статье вы указали, где отходите от подхода описанного в "чистом коде".

Ну, тут вы правы)

Толпе пора бы уже организоваться или по крайней мере той её части, которая хорошо образована и в состоянии понять, куда все катится.

Потоки - это независимые друг от друга сущности. Не знаю, откуда Вы взяли информацию об иерархии (скорее всего путаете с другим языком).
Код ниже выведет в консоль: main -> TERMINATED

public class Main {

    public static void main(String[] args) throws Exception {
        Thread main = Thread.currentThread();

        Thread child = new Thread(() -> {
            try {
                Thread.sleep(2000);
                System.out.println(main.getName() + " -> " + main.getState());
            } catch(Exception e) {
                e.printStackTrace();
            }
        });
        child.start();
    }

}

И ещё момент - у Java потоков нет состояния Pending (в смысле - вообще нет).

Несколько замечаний из тех, что сразу бросаются в глаза:

"Программа завершается когда Main Thread выполнит метод main()" - неверно. Программа написанная на Java завершится, как только завершится последний её поток не являющийся демоном. Метод main() при этом может быть уже давным-давно завершен.

"Функциональный интерфейс Runnable содержит единственный абстрактный метод run()который запускает новый поток выполнения." - метод run() НЕ запускает новый поток. Он запускается В новом потоке (предварительно созданном).

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность