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

    paulradzkov
    @paulradzkov
    Дизайнер, верстальщик, начальник отдела UI
    Сто́ит выкладывать всё, вообще всё. И так как это будет публичный код, стоит позаботиться, чтобы это был не стыдный для данного этапа вашего развития код.

    Но в портфолио для работодателя должно быть адекватно малое количество крепких работ. Вы можете создать себе организацию на ГитХабе и перемещать туда неактуальные репозитории, чтобы в корневом аккаунте были только клевые работы. Вы можете создать репозиторий «portfolio» из одного readme.md и в него собирать ссылки на лучшие ваши проекты с аннотациями.

    Я уже писал про сортировку репозиториев на ГитХабе с помощью организаций Как вы организуете свою работу?
    Ответ написан
    Комментировать
  • Имеет ли важность для Java EE работодателя опыт работы Android разработчиком?

    @WhoMe
    Я полтора года назад устраивался на должность Junior Java EE разработчиком в Москве.
    У меня не то что опыта Java EE разработки не было, у меня не было даже трудовой книжки.
    В резюме так и написал: мол опыта Java EE нет, но про Java слышал, про спринги всякие читал,
    ну и приложил ссылочку на свой репозиторий на гитхабе с опенсорс-библиотечкой на Java (ничего особенного, простая обертка над API сайта, день-два работы).

    По моим ощущениям, если у тебя нет опыта в Java EE, то у тебя нет опыта в Java EE и им пофиг че ты делал до этого.
    У меня на собеседовании даже не спрашивали что я писал (кроме вышеуказанной библиотеки), какие проекты делал (до этого я немного фрилансил на php)
    и с чего я решил что знаю Java. Дали бумажный тест по Java и SQL. Потом побеседовали по основам java: коллекции, потоки, синхронизация и т.д.
    по базам: типы связей (один-к-одному/один-ко-многим/многие-ко-многим), транзакции, ACID и в таком духе, ну и в общем плане: процессы, потоки, http-протокол.
    Видимо я не слишком сильно плавал в вопросах, а может их просто устроили мои скромные запросы по ЗП (скромничать, кстати, не советую, выйдет боком, но это уже другая история).
    Меня взяли.

    Вместо постскриптума.
    За неделю работы там я узнал больше чем за пару месяцев самостоятельного изучения спринга и Java EE в целом.
    Java EE на самом деле очень обширная область, а Java SE это так, верхушка айсберга.
    Мозги реально кипели от объема поступаемых новых данных, попутно приходилось дома читать книжки и добирать основы где не хватало.
    Еще смешное, в Java EE на 5 строк java кода приходилось строк 20 xml конфигурации :D Видимо поэтому не особо гоняют по самой Java. Больше времени тратишь на настройку и свзку всяких фреймворков и серверов.

    В общем, налегайте на основы, читайте и самое главное пишите.
    Когда начинаешь писать сразу всплывает куча нюансов и непонятных java экспешенов (куда же без них).
    И еще, если с английским проблемы, налегайте на английский. Вся документация на английском.
    На русском либо её нет вообще, либо её крайне мало, либо она уже устарела.

    Отвечая на Ваш вопрос(имхо, по моим ощущения и по опыту чтения форумов): опыт Android-разработчика _преимуществ перед_ Java EE-работодателем вам особых не даст.
    Android платформа с Java EE имеет мало общего, но хуже от него само собой не будет.

    Извините за многобукаф, Остапа понесло.
    Ответ написан
    Комментировать
  • Фриланс android разработчик без опыта, смс и регистрации?

    @Memorivardo
    Напишу Вам чуть отвлечённо от темы, а потом по вопросам Вашим пройдусь.

    Хотел сказать по поводу Вашего сообщения о невозможности переезда в течение пары лет. Я понимаю, что это может быть связано с множеством причин, но на всякий случай немного пораспинаюсь по поводу финансовой причины. Опять же не знаю куда Вы предполагаете переехать, но я расскажу Вам о ситуации в реалиях с Москвой. А по сути всё довольно просто и удобно. Нужно посчитать минимальный бюджет при отсутствии рабочего места. Что нужно, чтобы прожить пару месяцев:
    1. Место жительства. Берём вариант со съёмной квартирой/комнатой. Однушка на окраине Москвы (не затхлая) недалеко от метро - 30 000 рублей, комната где-то 15-20 тысяч. Итого 30 - 60 т.р.
    2. Проезд. Карта Тройка (метро/автобус/троллейбус/трамвай) на месяц - 2 т.р.. На два месяца - 4 т.р.
    3. Пропитание. Если не шиковать, то 10 т.р. в месяц с головой хватит. Итого 20 т.р.

    Т.е. предполагаем, что Вы плохо общаетесь и Вам из-за этого тяжело искать работу, поэтому искать Вы её можете месяц-полтора. На это время Вам нужно иметь на руках от 54 до 84 т.р. в зависимости от зажористости. Если у Вас уже есть работа, то всё делим на пополам. Это более чем вменяемые деньги как для программиста, так и для PM. Если у Вас серъёзные опасения по этому вопросу, я могу Вас лично проконсультировать - уже нескольким людям помог переехать, есть опыт.

    А теперь по поводу Ваших вопросов:

    Реально ли стать фрилансером по android начиная без какого-либо опыта?

    Да, более чем. Не слушайте никого. Если кто-то не может найти себе удалённую работу, то он просто не умеет договариваться или не умеет искать. Вобщем - это сугубо его проблемы. Нужно пробовать и проводить аналитику своих попыток, тогда всё у Вас получится.,

    Вообще существуют ли фрилансеры среди android разработчиков?

    Конечно, довольно много. Коммерческая разработка приложения берёт свою стоимость от 150 т.р. и дальше, поэтому частные кадры, особенно если они могут провисти фулстак разработку крайне ценны.

    Сколько нужно проектов сделать самостоятельно и какого уровня проекты должны быть (желательно максимально описанные примеры)?

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

    Какая среди них конкуренция?

    Конкуренция всегда большая. При размещении заказа на разработку в течение часа прилетает порядка полусотни-сотни заявок от исполнителей. Но не падайте духом, в большинстве своём это бестолковые личности, неумелые менеджеры и пр. Главное, когда отвечаете на заказ - вчитывайтесь в задание и ответ свой отталкивайте от него. Копипасту резюме никто в заявке видеть не хочет.

    Реально ли найти работу удалённо опять же учитывая отсутствие опыта в принципе?
    Абсолютно не сложно. Но этому нужно научиться. Способов много, работают даже холодные письма.
    Ответ написан
    Комментировать
  • Какие нынче требования к Junior Android Developer?

    @stoptalking
    если у вас есть прожекты/гитхаб сложнее, чем стандартные ресайклеры/фонарики/прочая хрень, то дополнительных вопросов может и не быть. В остальном зависит от собесера (как тут уже было сказано) - один спросит про связь между фрагментом и активей, второй про rxjava, третий про string1 == string2, четвертый про ad hoc полиморфизм, пятый про ковариантный сабтайпинг, шестой попросит стек написать на бумажке по-быстрому. Ведро это вся жава, фреймворк + дополнительный инструментарий. Про графы вас вряд ли спрашивать будут
    Ответ написан
    Комментировать
  • Стоит ли продолжать изучать Android develop?

    vaux
    @vaux
    Курящий лыжник
    Освойте сначала что-то одно на приличном уровне, а уже потом будете гнаться за трендами, следить за выходом новых технологий и т.п. В первую очередь вам нужна база: алгоритмы, структуры данных, понимание ООП, знание паттернов, TDD и т.д. Потом вам нужен опыт программирования. Чем больше вы пишите, тем больше понимания того, что вы делаете. Устройтесь джуном в контору, где над вами будет стоять опытный сеньер или тимлид. В конторе обязательно должен практиковаться code review, где ваш код будут разбирать и указывать на ошибки и спорные моменты. C++ и андроид не исчезнут в одночасье, можете спокойно развиваться в том, что вам интересно. А технологии рождаются и умирают. Это нормально и вам с этим жить, если решили стать программистом. Вам постоянно придется изучать что-то новое, но для начала освойте что-то одно на хорошем уровне.

    Более того. Если вы программист, то вы в первую очередь software engineer. Вам не должно быть дела до языка или технологии. Это всё вторично, потому что вы должны знать всё. Вам дали задачу, вы выбрали наиболее подходящий инструмент и решили эту задачу. К этому нужно стремиться.
    Ответ написан
    1 комментарий
  • Rest api android с чего нужно начать изучение?

    @apro
    Для работы с rest api стоит изучить:

    retrofit (библиотека для работы с http): https://habrahabr.ru/post/314028/

    и rxjava чтобы удобно retrofit использовать:

    https://habrahabr.ru/post/265997/
    Ответ написан
    Комментировать
  • Насколько полезен Hibernate? Сильно ли он упрощает работу?

    @sirs
    Полезен или нет зависит от вашего проекта. Если у вас парочка сущностей и 10 методов, в которых идёт обращение к базе - тогда хибернейт вам не нужен. Если у вас большой, растущий проект, где десятки и сотни сущностей и много CRUD операций - без JPA, hibernate, spring data и т.д. вам не обойтись. Хибернейт сильно упрощает жизнь в простых вещах, но сильно усложняет в сложных. Также можно рассмотреть профит применения хибернейта как получение кэша нескольких уровней из коробки.
    Посмотрите литературу в общем по ORM проблеме и JPA, без привязке к конкретной реализации, которой и является хибернейт.

    П.С. А добавлять какой-то код или логику в сеттеры я бы крайне не рекомендовал. Есть набор заповедей хорошего разработчика - SOLID, первый принцип - Single responsibility - "каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс". А в вашем случае есть какая-то модель/бин - который в полях содержит данные - это и есть его единственная обязанность, а логика по чтению-записи в базу не должна этот объект интересовать в принципе.
    Ответ написан
    Комментировать
  • Бот для телеграмма на JAVA, как обойти блокировку в коде?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Не используйте LongPolling - решение не годится для продакшена, только вебхуки.
    Чтобы не тратится на домен можно использовать самоподписанный сертификат на ip.
    Пример генерации сертификата
    openssl req -newkey rsa:1024 -sha256 -nodes -keyout /home/localhost.key -x509 -days 3650 -out /home/localhost.cert -subj "/C=US/ST=New York/L=Brooklyn/O=Example Company/CN=<тут ip сервера>"


    Хостите бота на заграничных серверах.

    Для локальной разработки использовать https://localtunnel.github.io/www/
    Вещь жуть какая нестабильная, но из аналогичных решений это единственный сервис, что предоставляет именованные поддомены бесплатно.

    Чтобы немного решить проблемы с падениями, запускайте программу в цикле
    Вариант для windows
    FOR /L %N IN () DO @lt --port <локальный порт> --subdomain <поддомен>
    Ответ написан
    Комментировать
  • Можно ли создать репозиторий GitHub через консоль?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    госпади, можно ж поискать...

    https://github.com/github/hub
    Ответ написан
    Комментировать
  • Можно ли создать репозиторий GitHub через консоль?

    BuriK666
    @BuriK666
    Компьютерный псих
    git init
    git remote add origin git@github.com:YOUR_USER/REPO.git
    Ответ написан
    6 комментариев
  • Java программа по поиску наименьшего числа?

    @nesterione
    предложу чуть другое решение:

    public static void main(String[] args) {
        int a=12,
            b=22, 
            c=33, 
            d=11;
    
        int min = Math.min(
                         Math.min(a,b),
                         Math.min(c,d));
    
         System.out.println("Наименьшее число "+min);
    }
    Ответ написан
    Комментировать