Задать вопрос
  • Правильно ли я понял принцип инверсии зависимостей?

    @Akela_wolf
    Extreme Programmer
    Главная идея принципа инверсии зависимостей "детали зависят от абстракций, но не абстракции от деталей".
    В приведенном вами примере класс Main зависит от всего: от интерфейса INumberOperation и от обоих классов NumberOperation1, NumberOperation2. То есть тут принцип инверсии зависимостей вообще не работает. Никак.

    Проявляется же он в следующем примере. Пусть у меня есть некая абстрактная логика "прочитай число, выполни над ним операцию, запиши результат". Эта абстрактная логика (потому она и абстрактная) ничего не должна знать ни откуда она читает число, ни какую операцию над ним выполняет, ни куда и как записывает результат. Таким образом, у нас есть модуль, состоящий из
    interface NumberInput {
      int read();
    }
    interface NumberProcessor {
      int process(int a);
    }
    interface NumberOutput {
      void write(int a);
    }
    class Processor {
      private final NumberInput input;  
      private final NumberProcessor processor;
      private final NumberOutput output;
    
      public Processor(NumberInput input, NumberProcessor processor, NumberOutput output) {
        this.input = input;
        this.processor = processor;
        this.output = output;
      }
    
      void process() {
        output.write(processor.process(input.read()));
      }
    }

    Все. Модуль получился очень абстрактным и ни от кого никак не зависящим.
    Затем мы можем сделать реализации этих интерфейсов - они будут зависеть от нашего модуля логики (так как ссылаются на интерфейсы). И это полностью соответствует принципу инверсии зависимостей - детали зависят от абстракций.

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

    Этот принцип очень хорошо объяснен в книге Р.Мартина "Чистая архитектура", по крайней мере у меня все встало на свои места именно после прочтения этой книги.
    Ответ написан
    1 комментарий
  • Есть ли жизнь на Java (Бекенд) кроме Финтеха?

    Jacen11
    @Jacen11
    копание в легаси без намека на светлое будущее
    а вы значение слова легаси точно понимаете? не существует проектов без легаси в принципе

    Востребован ли стек на новые проекты?
    да

    И есть ли топовые (вплане зп) вакансии не в финтех?
    ну как бы да, но скорее нет. Изредка пара жирных вакансий на два десятка из финтеха

    Причем везде идет Java 8, иногда Java 11
    еще бывает java 4. Если вам не понятно почему нет 9, 10 версии и новее 11, то у меня большие вопросы к вашей компетенции

    когда же уже наконец то люди поймут, что в реальном мире ну не зависит ничего в компании от языка. В стартапах пишут прототипное говно (с точки зрения кода) на простых языках вроде питона. Потом если проект выстрелил пишут на нормальном языке вроде джавы, но старая то часть уже есть. Практически только банки и могут себе позволить сразу хреначить на джаве без проверки гипотезы. Ну не может новая компания без сложившегося проекта платить миллионы просто так, а уже устоявшаяся компания с хорошим доходом, которая может, благодаря своему проекту, очевидно будет для вас "легаси"
    Ответ написан
    3 комментария
  • Как прибавить число к названию переменой?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    let op = [];
    for(let i = 0; i < 10; i++){
      op[i] = "blabla";
    }
    
    alert(op[2]);
    Ответ написан
    Комментировать
  • Как исправить ошибку "To run this application, you must install .NET Core"?

    Есть несколько вариантов:
    1. Использовать .net 6 - он умеет тащить за собой не весь рантайм, а только то что нужно для работы.
    По крайней мере Hello World в 12мб получалось уместить (single file + self contained + assembly trimming)
    2. Поставлять программу вместе со скриптом, который проверит, установлен ли .net runtime и установит его сам, скачав из интернета
    3. Забить и оставить как есть (засунуть в архив)
    4. Использовать .NET Framework, который идёт на винде из коробки, но имхо - это шаг назад по всем параметрам, и так делать не стоит.

    UPD: Hello world таки весит 12 мегабайт
    Ответ написан
    6 комментариев
  • Для каких примерно целей программисту нужен computer science?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    читайте уже best practices
    это спасет от глупых ошибок и позволит подумать а почему так сделано.
    Когда поймете сможете находить баланс между супер быстрым говнокодом и тормозом но понятным для всех.
    Ответ написан
    Комментировать
  • Как типизировать такой объект данных?

    Zraza
    @Zraza
    Помог ответ? Отметь решением!
    Нет, обобщенные типы можно использовать не только в функциях
    type SomeData<Data = any> = {
        data: Data[];
    }
    const a: SomeData<number> = {data: [1,2,3]};
    Ответ написан
    Комментировать
  • Зачем писать .to_string() при объявлении строки?

    vabka
    @vabka Куратор тега Rust
    Есть хорошая статья: https://habr.com/ru/post/274485/

    У строковых литералов тип &'static str. Тоесть это заимствованная ссылка на объект с неограниченным временем жизни.
    А to_string возвращает уже owned строку типа std::string::String

    А нужно это в данном коде, чтобы показать механику владения, что очевидно нельзя, если никто не является владельцем значений, как в случае со ссылками.

    Если ты хочешь получить именно String из строкового литерала, то есть сразу несколько вариантов, включая показанный:
    let a: String = String::from("a");
    let b: String = "b".to_string();
    let c: String = "c".into(); // или "c".into::<String>(), если не указывать тип явно.
    let d: String = "d".to_owned();
    Ответ написан
    Комментировать
  • Отфильтровать массив объектов, в которых есть вложенный массив?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Давайте представим, что skills у вас не массив, а булевое поле knows_js. Как можно получить такие элементы стандартными средствами языка?
    Когда решите эту задачу, нужно решить вторую — как получить наличие или отсутствие элемента в массиве (js в skills) в виде булевого значения?
    Ну и наконец — скомбинируйте ответы на два этих элементарных вопроса, чтобы получить рабочий код. Примерно так работает программирование — мы не заучиваем ответы на все возможные варианты задач, а учимся сложные задачи декомпозировать до простых, решение которых нам известно.
    Ответ написан
    Комментировать
  • Какие есть способы подстановки домена?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    .hosts даже не помнюможет ли такое.


    именно hosts

    Просто правишь ?:/windows/system32/drivers/etc/hosts
    и добавляешь туда
    1.1.1.1 roga.kopyta.com
    Ответ написан
    5 комментариев
  • Как в JavaScript контролировать удаление объекта garbage collector-ом?

    Никак.
    Все что может быть собрано, будет собрано. Если у вас утечки, нужно искать источник.
    Ответ написан
    2 комментария
  • Пользуетесь ли вы кириллицей в Git?

    delphinpro
    @delphinpro
    frontend developer
    Стараюсь писать на английском даже в своих проектиках. На локальной машине без разницы, а на хостах лениво настраивать терминал, чтобы он корректно отображал кирриллицу, а не кракозябры.
    Ответ написан
    Комментировать
  • Зачем нужны методы отправки данных отличные от GET, POST?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Удобно эндпойнты в апи делать

    [GET]    /order/{id}  получить информацию о заказе
    [POST]   /order/{id}  создать новый заказ
    [PUT]    /order/{id}  обновить данные в заказе
    [DELETE] /order/{id}  удалить заказ


    Вместо

    [GET]  /order/{id}
    [POST] /order/{id}/create
    [POST] /order/{id}/update
    [POST] /order/{id}/delete


    будет ли нормальная поддержка этих методов в том же php и формах html?


    https://caniuse.com/mdn-http_methods_put
    https://caniuse.com/mdn-http_methods_delete

    А что вы имеете ввиду под нормальностью в php? Определить метод запроса можно, прочитав $_SERVER['REQUEST_METHOD'], получить данные из php://input

    UPD

    Нашел вопрос аналогичный. Ответы краткие но емкие и по делу.
    https://stackoverflow.com/questions/27941207/http-...
    Ответ написан
    Комментировать
  • Диминаческий метод в AxiosInstance с Typescript?

    Alexandroppolus
    @Alexandroppolus
    кодир
    await apiClient.request({
       method: workMode
     ...
    })
    Ответ написан
    1 комментарий
  • Что будет если объявить двум элементам один id?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    <img data-id="uuid" />
    <p data-id="uuid" >text</p>

    querySelectorAll('[data-id="uuid" ]');

    можно ли объявить двум элементам один id

    Можно, но в приличном обществе могут ударить по лицу за такое.
    Ответ написан
    3 комментария
  • Куда пропадают ответы?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Пропасть может потому что:
    - ответ удален модератором
    - ответ удален автором ответа
    - ответ автоматически удалился при удалении учетки отвечавшего

    В данном случае, поскольку там была ссылка на программу, вангую, что либо посчитали рекламой, либо там была ссылка на пиратку
    Ответ написан
    Комментировать
  • На сколько плохо, если в винде будут установлены драйвера на 10 разных пк?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Даже XP могла запуститься с другого железа
    7ка уже почти всегда без проблем
    с 10й, думаю, проблем ещё меньше

    В любом случае: практика - критерий истины. Если будет выпадать в синий экран или не загружаться - то проблема явно есть. Если работает - то и не стоит переживать за это.
    Ответ написан
    Комментировать
  • Можно ли написать полноценную 3D игру (ну наподобие WoT) на js?

    GavriKos
    @GavriKos Куратор тега Unity
    Уже давно в юнити нельзя использовать JS (по факту его там и никогда небыло - но оставим это).
    Язык - всего лишь инструмент. С точки зрения реализации алгоритма JS, С++, Java - равны. Тем боле еопд капотом юнити они переварятся во что то другое.

    Так что ответ - на JS можно написать WoT
    Ответ написан
    3 комментария
  • Есть ли способ более-менее комфортно работать на виртуальных машинах?

    hint000
    @hint000
    у админа три руки
    видеокарта не задействуется должным образом
    Чтобы на десктопе пробрасывать видеокарту в виртуальную машину, нужно иметь две видеокарты. Потому что видеокарта либо здесь (на хосте), либо там (на виртуалке), но не в двух местах одновременно. Если пробрасываете в виртуалку, то эта видеокарта не может выдавать картинку на хосте. Поэтому пробрасывать нужно ту видеокарту, которая в данный момент не задействована на хосте.

    На других виртуалках так же?
    https://habr.com/ru/post/448312/
    Ответ написан