Что такое голливудский принцип программирования на Java
Источник:
Medium
Эта публикация ознакомит вас с “голливудским” принципом разработки программного обеспечения.
Голливудский принцип — это принцип разработки программного обеспечения, который гласит: “Не вызывайте нас, мы сами вызовем вас” (don’t call us, we’ll call you). Другими словами, он поощряет слабую связь между модулями, поскольку тесно связанные модули зависят от абстракций, а не от конкретных реализаций. Это упрощает замену реализаций, поскольку не затрагивает остальную часть системы.
В Java “голливудский” принцип можно реализовать с помощью интерфейсов и внедрения зависимостей. Интерфейсы позволяют создавать абстракции, которые могут быть реализованы несколькими классами. Внедрение зависимостей позволяет внедрять конкретную реализацию во время выполнения, вместо того, чтобы класс создавал свои собственные зависимости.
Вот пример кода, нарушающего голливудский принцип:
// Плохой пример, сильная связка
class BadMoviePlayer {
public void playMovie() {
// создание экземпляра конкретного класса
MobileDevice mobileDevice = new MobileDevice();
mobileDevice.playMovie();
}
}
В этом примере класс
BadMoviePlayer создает экземпляр
MobileDevice и вызывает его метод
playMovie(). Это создает тесную связь между классом
BadMoviePlayer и классом
MobileDevice, что затрудняет замену реализации без затрагивания остальной части системы.
Лучший способ реализовать все это по-голливудски — использовать интерфейсы и внедрение зависимостей:
interface Device {
void playMovie();
}
class GoodMoviePlayer {
private Device device;
public GoodMoviePlayer(Device device) {
this.device = device;
}
public void playMovie() {
device.playMovie();
}
}
class MobileDevice implements Device {
public void playMovie() {
// Выполнение действия
}
}
В данном примере класс
GoodMoviePlayer принимает экземпляр
Device через свой конструктор. Это позволяет передавать любой класс, реализующий интерфейс
Device, что упрощает замену реализаций без затрагивания остальной части системы.
Голливудский принцип часто используется при разработке приложений для Android. Когда разработчик хочет заменить сетевую библиотеку, например, вместо того, чтобы просматривать всю кодовую базу и изменять все экземпляры предыдущей библиотеки, то он может просто создать новую реализацию сетевого интерфейса и внедрить ее в соответствующие классы.
Еще один реальный пример — разработка платежного шлюза. У компании могут быть разные платежные шлюзы, такие как PayPal, Stripe и так далее. Разработчик может создать интерфейс, определяющий методы, необходимые для обработки платежа, а затем создать разные классы, реализующие этот интерфейс для каждого платежного шлюза. Затем разработчик может легко заменить платежный шлюз, не затрагивая остальную часть системы.
В заключение добавлю, что голливудский принцип отлично подходит для создания гибкого и удобного в сопровождении кода. И, как видите, Java здесь упрощает реализацию.
Как “старая школа” Java поможет улучшить ваши навыки
Источник:
Keyhole Software
Благодаря этой статье вы узнаете, что такое “старая школа” программирования на Java и как она помогает улучшить навыки разработчика.
Итак, вы Java-программист и хотите повысить свои профессиональные навыки. Чтобы помочь вам, я собираюсь предложить вернуться к “старой школе”, дав несколько советов и приемов, с которых можно начать. Мы отойдем от большинства современных инструментов и вернемся к основам, чтобы вы лучше поняли, что такое Java и как этот язык работает.
Начинаем
Современные инструменты в Java-разработке в большинстве своем созданы для повышения производительности. Благодаря им мы можем работать над проектами намного быстрее, и это здорово.
Однако то, как они спроектированы, изолировало нас от компилятора и даже от файла сборки. Мы начинаем слишком полагаться на редактор, который дает нам подсказки о наилучшем способе написания кода, настройках и управлении процессом сборки. Чтобы действительно улучшить свои навыки Java, вам нужно отойти от этого. Выберите, возможно, какой-то личный проект, на котором вы можете поэкспериментировать.
Я не буду предлагать по-настоящему старую школу программирования на Java. Когда я начинал, мы создавали классы Java с помощью команды
javac. Это позволяло нам писать сценарии оболочки для проектов, создавать файлы Makefile с использованием команд Unix и Windows —
make и
nmake соответственно. Я помню, как был в восторге, когда вышла утилита
Ant и у нас появился инструмент сборки на чистом языке Java.
Вы, конечно, можете вернуться к истокам так глубоко, если хотите, но вряд ли сможете разработать что-либо, кроме простого Java-проекта.
Выберите файл сборки
После того, как Ant некоторое время был у всех на виду, появилась утилита
Maven. Какими бы счастливыми мы не были с Ant, в конце концов мы перешли на более простой в использовании Maven. Еще позже был представлен
Gradle. На мой взгляд, Gradle — гораздо более мощный инструмент. Ваша IDE, скорее всего, использует для создания проектов один из этих инструментов.
Короче говоря, выберите подходящий вам инструмент сборки и воспользуйтесь приведенными выше ссылками, чтобы найти нужную документацию для начала работы. Когда у вас есть файл сборки (и, возможно, основной класс с заглушкой), вы можете заняться редактированием.
Редактирование
На этом этапе вы, безусловно, можете использовать выбранную вами IDE для редактирования как файла сборки, так и исходных файлов Java. Это дает вам ряд полезных функций, включая завершение кода, создание любых новых исходных файлов Java в правильном каталоге для пакета и информирование об ошибках кода перед запуском компилятора.
Но это также изолирует вас от причин, по которым возникают ошибки, а без полного их понимания почти невозможно по-настоящему улучшить свои навыки Java.
Даже если вы используете для проекта IDE, я бы посоветовал иметь под рукой хороший редактор. Есть несколько хороших программных редакторов для выбранной вами операционной системы, я лично хотел бы обратить ваше внимание на редактор
Vim.
Как программа-редактор он бесценен, особенно для рефакторинга. Кстати, я изначально написал эту статью в Vim, используя язык разметки данных (Markdown, text-to-HTML language).
При создании исходных файлов Java вне среды IDE необходимо очень внимательно относиться к структуре каталогов, в которые вы помещаете файлы. Сначала они должны соответствовать местоположению, которое ожидает их файл сборки. В документации для инструмента сборки об этом должно упоминаться.
Далее вы должны следовать используемой структуре пакета. Имейте в виду, что даже в Windows важны прописные и строчные буквы. В Windows это позволит вам создать файл с буквами, которые отличаются от тех, которые вы используете в исходном коде для имен пакетов и классов, но это создаст для вас проблемы. В любой системе Unix компилятору придется гораздо тяжелее.
Завершение кода
Мы, или, по крайней мере, я очень привыкли использовать IDE для поиска имен методов для класса, который я использую в любое время. До этого очень полезного новшества
документация JDK всегда была у меня в окне браузера.
Ранее нам приходилось писать свои собственные фреймворки, теперь же большинство современных фреймворков имеют похожую документацию. И Apache, и Spring особенно хороши в этом.
Управление исходным кодом
Независимо от того, используете ли вы Git, Subversion или какое-либо другое программное обеспечение для управления исходным кодом или версиями, попробуйте работать с ним из командной строки. Это заставит вас немного лучше познакомиться с тем, как все это работает, и с различными вариантами ПО.
Если это личный проект, у вас может не быть удаленного репозитория для синхронизации. Тем не менее, контроль версий по-прежнему полезен; это позволит вам отслеживать изменения, которые вы вносите в проект по мере работы над ним.
Заключение
Некоторые из самых разочаровывающих сеансов кодирования, кажется, происходят из-за неполного понимания инструментов, которые мы используем. У меня были дискуссии с молодыми разработчиками, которые были разочарованы тем, что среда разработки работает не так, как они думают. Но как только я объясню причины происходящего, разочарование исчезает, и они могут продолжить работу над проектом.
Отказ от современных инструментов улучшит ваши навыки работы с Java, расширив понимание кода. Понимание — это основа, к которой должен стремиться каждый технический специалист в любой карьере, основанной на навыках.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ