• Зачем нужен Dependency Injection в Android разработке?

    artemgapchenko
    @artemgapchenko
    Начать неплохо бы с понимания того, что такое DI. Обратимся к википедии:

    Внедрение зависимости (англ. Dependency injection, DI) — процесс предоставления внешней зависимости программному компоненту.

    Если выражаться не канцеляритом, а обычным русским языком, то DI - это когда вы своему компоненту (например, классу) предоставляете нужные для него зависимости извне, а не создаете их сами в конструкторе, или через инициализацию в месте объявления поля. То есть не так:

    public class Api {
    	....
    	private final HttpClient client = new OkClient();
    }

    А, например, так:

    public class Api {
    	....
    	private final HttpClient client;
    
    	public Api(@NonNull HttpClient client) {
    		this.client = client;
    	}
    }


    И что нам это даёт?

    Ну, очевидно, нам теперь проще менять зависимости. Нужна вам другая реализация абстрактного класса HttpClient - взяли, и передали её через конструктор, или через метод-setter. В случае с первым куском кода, вам пришлось бы ещё и класс Api переписывать, что в случаях, отличных от тривиальных, может привести к ошибкам. Получается, что ваш класс теперь закрыт от изменений (смотрим Open/Closed Principle).

    Окей, а на практике-то какие бенефиты?

    Во-первых, вы теперь можете написать инициализацию вашей программы через конфигурационные файлы. Скажем, на старте будет читаться простенький текстовый файл, который определяет, какой httpclient использовать, какие настройки доступа к бд применять и так далее, и, исходя из этого, будут определяться зависимости.
    Во-вторых, вам теперь существенно проще писать тесты. Написали вы, скажем, какой-нибудь парсер, который принимает InputStream, содержащий в себе данные json-объекта, как-то хитро его парсит, и выдаёт вам объект вашей бизнес-модели. В приложении этот парсер будет принимать на вход реализацию InputStream'а, которая берёт данные из сети, а в тестах - реализацию, которая просто читает файл с диска (потому что тесты должны выполняться часто и быстро, и ваша задача в тесте - протестировать ваш парсер, а не скорость сетевого соединения).

    Вот, в общем-то, и всё. А Dagger - это просто библиотека, которая автоматизирует ручное внедрение зависимостей, равно как и другие DI-библиотеки.

    P.S. В некоторых случаях чрезмерное увлечение DI может привести к нежелательным эффектам, вроде чрезмерного усложнения кода, поэтому внедряйте аккуратно. Понимание приходит с опытом.
    Ответ написан
    Комментировать
  • Как структура баз данных эффективнее: много записей, много таблиц или много баз?

    petermzg
    @petermzg
    Самый лучший программист
    Лучше: 1 база данных, 6 таблиц, и грамотные индексы.
    Ответ написан
    2 комментария
  • В чем разница между контрольной суммой и хешированием?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    stackoverflow.com/a/460581
    I would say that a checksum is necessarily a hashcode. However, not all hashcodes make good checksums.

    A checksum has a special purpose --- it verifies or checks the integrity of data (some can go beyond that by allowing for error-correction). "Good" checksums are easy to compute, and can detect many types of data corruptions (e.g. one, two, three erroneous bits).

    en.wikipedia.org/wiki/Checksum
    Checksum functions are related to hash functions, fingerprints, randomisation functions, and cryptographic hash functions. However, each of those concepts has different applications and therefore different design goals. Check digits and parity bits are special cases of checksums, appropriate for small blocks of data (such as Social Security numbers, bank account numbers, computer words, single bytes, etc.). Some error-correcting codes are based on special checksums that not only detect common errors but also allow the original data to be recovered in certain cases.
    Ответ написан
    Комментировать
  • Чем плохо использовать Crossdatabase foreign key?

    elevenelven
    @elevenelven
    Php Dev @ Amadeus
    Без пруфов, просто информация для размышления.

    Foreign Key Constraint при операциях над таблицей в которой есть Constraint , обязывает смотреть и поддерживать консистентность с записями, которые являются ключами. Это 'on Delete', 'on Update'. То есть операции вставки и обновления теряют в скорости. (хотя мы получаем профит в виде контроля целостности и непротиворечивости данных)

    • Когда Constraint смотрит на другую базу данных, время на взаимодействие растет сильнее.
    • Теряется область видимости согласованности данных на уровне ЯП - части системы могут изолированно работать только с одной БД и не иметь влияния на всю распределенную систему хранения данных. То есть мы имеем механизм контроля согласованности на уровне БД, но на уровне ЯП мы не имеем явных указаний на то, что изменения в нашей модели распространятся на другие БД. Не можем удалить какой-то entity, потому что на него наложен Constraint, а наш контекст не позволяет заглядывать в другую БД.
    • Нарушается доступность - отказ одной из БД приводит к падению всех Constraint на рабочих БД.
    Ответ написан
    Комментировать
  • Что выбрать в данном случае?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    не хочется завязываться на конкретного вендора, который когда захочет меняет свои технологии

    Много ли таких прицедентов было с ASP.NET? Сейчас MS в этом направлении активно захватывает рынок, вытесняет Java с ее EE платформой (с которой, кстати, недавно была драма по поводу vendor-lock недавно), так что выходит сплошной популизм: активно развиваемая коссплатформенность с .NET Core, чуть ли не полная бесплатность платформы Xamarin.

    C# является языком общего назначения, который имеет уйму применений и просто приятен в использовании. Конечно, для _мелких_ веб-проектов он проигрывает в скорости разработки, хостинг под него дороже (если это не Linux-VPS и проект на ванильном ASP.NET MVC, а не ASP.NET Core). Но при этом код легко поддерживать и тестировать. Но порог вхождения здесь выше, но за это щедро платят. В одиночку фрилансить веб на нем сложно.

    Другой угол зрения: PHP - чистый веб-язык, дорога на десктоп и мобилки ему заказана. Также он не подойдет для более-менее ресурсоемких задач по обработке данных (не поддерживает нативные потоки). Да, он идеален для небольших и средних веб-проектов, но серьезный интерпрайз на нем не строят, как правило.
    nC-OQzWjExhlOjJdl7KjYQ.jpg
    Ответ написан
    Комментировать
  • Сброс произвольного коммита git?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Что значит "неправильный коммит"?

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

    UPD2. Если уж прямо в немоготу, то читаем про git rebase (но за это надо бить по рукам)
    Ответ написан
    3 комментария
  • Какой лучше использовать "метод Создания View" для отображение данных из БД в ASP.NET MVC?

    ImmortalCAT
    @ImmortalCAT
    C# loving
    Вместо тысячи слов
    всё гуглиться
    на сайте asp.net есть самплы
    да и вообще в интернете есть множество самплов!!!
    Ответ написан
    5 комментариев
  • Что такое Model в МVС?

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

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


    Best Практик из Yii2
    Ответ написан
    8 комментариев
  • С чего начать писать тех.задание?

    @chronic86
    Ruby on Rails junior
    Мне показалось что человек спрашивал как описать ТЗ а не как его оформить по ГОСТу. Если я прав, то советую взять листок бумаги написать главную цель ТЗ, далее разбиваете эту цель на подзадачи и так в виде дерева до самого низкого уровня который сможете описать. Данное дерево будет основой ТЗ, условно можно представить что каждая задача пункт ТЗ, подзадача подпункт, но тут от уровня погружения зависит. Чем подробнее будет такое дерево тем качественнее получится итоговый продукт, остальное что касается оформления и структуры носит больше формальный характер.
    Ответ написан
    2 комментария
  • С чего начать писать тех.задание?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Смотрите ГОСТ 34.602-89 "ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА СОЗДАНИЕ АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ" - www.rugost.com/index.php?option=com_content&view=a...
    Для начала, прочтите статейку "Документирование по ГОСТ 34* — это просто".
    Шаблон ТЗ - www.rugost.com/index.php?option=com_content&view=a...
    Комментарии - it-gost.ru/content/view/101/51
    Ответ написан
    Комментировать
  • Где скачать базу данных регионов и населенных пунктов России?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    fias.nalog.ru/Updates.aspx

    UPD
    Дополню: КЛАДР о котором пишут в соседних ответах - это не старый формат, это другой формат, хотя и являющийся предшественником ФИАС. Оба справочника являются пополняемыми и обновляемыми, оба содержат косяки и ошибки причем как общие, так и персонально свои.
    На уровне работы с регионами и городами - проблем особых нет (не считая идиотского устройства городов нашей страны, когда город может являться частью другого города находясь в десятке километров, а поселок находящийся в черте города может быть обособленным), а вот на уровне улиц/домов опечатки бывают достаточно часто.
    Ответ написан
    Комментировать
  • Где скачать базу данных регионов и населенных пунктов России?

    MetaAbstract
    @MetaAbstract
    Архитектор информационных систем и баз данных. Ful
    Ответ написан
    Комментировать
  • Как правильно назначать алиасы таблицам и столбцам в mysql?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    dflbrhekbn: ключевое слово AS можно пропускать
    SELECT * FROM `table_name` AS t1
    эквивалентно
    SELECT * FROM `table_name` t1

    Конструкция
    select .. FROM (
    SELECT model, price
    FROM pc
    UNION
    SELECT model, price
    FROM Laptop
    UNION
    SELECT model, price
    FROM Printer
    ) t1
    означает что для данного запроса создается виртуальная таблица в которую помещается результат выполнения "SELECT model, price FROM pc UNION SELECT model, price FROM Laptop UNION SELECT model, price
    FROM Printer" и ей в данном запросе присвоен алиас t1.
    К слову сказать работают виртуальные таблицы дико медленно.
    Ответ написан
    Комментировать
  • Как правильно назначать алиасы таблицам и столбцам в mysql?

    qonand
    @qonand
    Software Engineer
    если Вы внимательно посмотрите на пример, то увидите что там идет селект с подзапроса, которому присвоен псевдоним. В Вашем же коде чему присвоен псевдоним? ничему... должно быть так
    SELECT model
    FROM table_name AS t1
    WHERE model = 1401

    т.е. псевдоним Вы должны присваивать либо конкретной таблице, либо конкретному полю, либо конкретной выборке
    Ответ написан
    2 комментария
  • ASP.NET MVC, лучшие практики?

    AxisPod
    @AxisPod
    1. В настоящем проекте о маршрутах будет думать SEO.
    2. Да. Атрибуты мусорят код, сложнее искать, лучше держать в одном месте. Да и вообще в плане атрибутов, лучше поменьше их использовать, сначала подумать над всеми вариантами без атрибутов и только в конце сравнить и оценить целесообразность их использования.
    3. Ну здесь лучше так, чем писать голый хтмл, хотя в итоге и будет тяжелее.
    4. Считайте, что атрибуты зло. В том что максимально простыми должны быть, это да, стараться использовать стандартные механизмы, если надо вернуть Json, используйте JsonResult (хотя в конкретном случае его возможностей может не хватить, но только в этом случае стоит использовать что-то другое). А сама логика естественно должна быть отделена и быть независима от веб, ничего не знать о веб и т.д.
    5. На стороне клиента по желанию, на стороне сервера обязательна и маниакальна. Придти может всё.
    6. Верно, только код который отвечает за отображение и никакой логики.
    7. Ну свой биндер делать стоит, если не хватает стандартного механизма, но как не сделайте, всё равно придется создавать новый объект.
    8. Лучше вообще никогда не использовать, усложняет понимание кода, усложняет поиск ошибок и т.д. Тут от ситуации конечно многое зависит. Но я бы сделал либо через агрегацию или наследование. Возможно сервис или еще как-нить.
    9. Не совсем понял вообще о чём вы.
    10. Ну тут всё зависит от шаблонизатора, можно и не Razor использовать. никто не запрещает.
    Ответ написан
    1 комментарий
  • Как узнать угол между двумя точками?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Строго говоря, между двумя точками не может быть никакого угла.
    Ответ написан
    3 комментария
  • Как правильно написать вот этот код JQuery?

    https://jsfiddle.net/b513qwqL/5 html тоже изменился.
    Ответ написан
    Комментировать
  • Как собеседовать/тестировать верстальщика?

    1) Спрашивать не те вопросы, которые можно найти в яндексе "что должен знать верстальщик". Я бы спросил:
    - как будет вести себя абсолютный блок в абсолюте
    - как уместить два блока с бордером в 10px и шириной в 50%
    codepen.io/STutukov/pen/mEeYLa
    - width:auto и width:100%. Это одно и тоже?
    - @ media. От чего зависит? От ширины контейнера в котором лежит, или от ширины браузера?
    codepen.io/STutukov/pen/QEjRoy
    - Для гуру бутстрапа. Обязательный вопрос, почему 12 колонок? почему не 10? 20?
    - Какие фреймворки знает.
    - Какие методологии верстки знает (БЭМ,SMACSS,...) и по какой верстает и почему.
    - Чем отличается адаптивный сайт от резинового?
    frontender.info/adaptive-vs-responsive-terminology
    - git, gulp, less, sass, js.
    - ну и так далее))
    2) Посмотреть как он отвечает на эти вопросы, главное чтобы не паниковал.
    3,4,5) Зависит от ваших задач.
    Ответ написан
    8 комментариев
  • Как обновить id сохраняя порядок?

    sanchezzzhak
    @sanchezzzhak
    Ля ля ля...
    SET @a = 0;
    UPDATE `my_table` SET `order` = @a = @a + 1 
    WHERE 
    `id` IN (4,2,5,8,7,3) 
    ORDER BY IF(FIELD(id, 4,2,5,8,7,3)=0,1,0) DESC, FIELD(id,4,2,5,8,7,3)

    Не уверен но при выборке работает
    Ответ написан
    1 комментарий
  • Как получить комментарий, на который ответил человек?

    @r_zaycev
    Эмм,
    <reply_to_comment>10</reply_to_comment>
    где 10 <- ид комментария в текущей выборке?
    Ответ написан
    3 комментария