Контакты

Достижения

Все достижения (12)

Наибольший вклад в теги

Все теги (46)

Лучшие ответы пользователя

Все ответы (81)
  • Зачем нужен 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 может привести к нежелательным эффектам, вроде чрезмерного усложнения кода, поэтому внедряйте аккуратно. Понимание приходит с опытом.
    Ответ написан
    Комментировать
  • Стоит ли продолжать изучать Android develop?

    artemgapchenko
    @artemgapchenko
    Здравствуйте, как многие знают, Google готовит замену Android

    Откуда вы всё это берёте? Есть проект на Гитхабе с таким вот README:

    Pink + Purple == Fuchsia (a new Operating System)

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

    artemgapchenko
    @artemgapchenko
    Никак. Вы или пишите два проекта под разные платформы на нативных для этих платформ языках/фреймворках, или используете кроссплатформенные решения (PhoneGap/IONIC/Titanium и иже с ними).
    P.S. Посмотрите ещё на ответ Дениса Загаевского, тоже хорошее предложение.
    Ответ написан
    Комментировать
  • Oracle сертификат(по java) для Android разработчика на Kotlin?

    artemgapchenko
    @artemgapchenko
    Тут есть два ответа.

    1. В каком-то подкасте (возможно это было "Радио Бермудский Треугольник") обсуждали найм программистов, влияние сертификатов на шанс приёма на работу и на последующую зарплату. И ведущие согласились на том, что сертификаты хороши, когда интервьюируемый только вышел из вуза, никакого реального опыта у него, но так как есть сертификаты, то это может быть хорошим поводом к тому, чтобы пригласить на собеседование. Только и всего, больше никаких выгод нет.
    2. На хабре как-то отписывался парень, переехавший в Европу (в Нидерланды, если мне не изменяет память), который получал сертификат (по-моему как раз-таки связанный с Java-технологиями), и говорил, что его работодатель даёт прибавку к за наличие определённых сертификатов. Могу соврать, но вроде бы он так же говорил, что в его городе (стране?) прибавка за сертификаты - распространённое явление.

    Так что определитесь с тем, какую вы выгоду от него хотите поиметь. Если, как написано в комментариях: "Как минимум будет понятно что вы не только на котлине могете" - то не стоит тратить своё время и деньги; вы либо работаете с Java, знаете её, работали над серьёзными проектами сделанными на ней и готовы показать это на собеседовании, или нет, и никакая бумага с печатью вам тут не поможет. Если же вы уже имеете на прицеле работодателя, который даст вам более "вкусные" условия за наличие сертификата, или же у него условия работы одинаково замечательны для всех, но он при этом официально заявляет, что наличие сертификата даёт серьёзное повышение шансов на трудоустройство у него - идите и получайте.
    Ответ написан
    1 комментарий
  • Стоит ли сейчас изучать Kotlin?

    artemgapchenko
    @artemgapchenko
    Начните лучше с Java, мой вам совет. Kotlin очень хорош (я как раз сейчас на нём проект для себя разрабатываю), но смущает меня отсутствие официальной поддержки со стороны Google.
    Мотивация JetBrains в плане адаптации Kotlin к Android понятна - они хотят зайти на рынок языков под JVM через Android-разработчиков, которые давно уже стонут и плачут от Java 6/7. Непонятно, будет ли эта мотивация такой же сильной через пару лет, когда, например, Google определится с тем, что у них будет вместо Java, и определится не в пользу Котлина (если ещё определится, что, скажем так, вилами на воде написано). Или же Бреслав как главный идеолог проекта потеряет к нему интерес. Или же в JetBrains посчитают расходы/доходы, и решат зарезать поддержку Android. Много чего может произойти, а вам потом проект на нём поддерживать.
    Плюс, как правильно отметил в этом треде Денис Загаевский, вакансий мало, и неизвестно, будет ли их больше. А со знанием Java вы себе в обозримом будущем работу Android-разработчика точно найдёте, тут проектов как грязи - выбирай, не хочу.

    Update от 17.05.2017: Google объявил об официальной поддержке Kotlin для разработки под Android, так что теперь точно можно начинать вкладываться в него.
    Ответ написан
    1 комментарий

Лучшие вопросы пользователя

Все вопросы (5)