Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 28 мар 2024, 14:11

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Модульность и язык Java
СообщениеДобавлено: 20 янв 2017, 23:10 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Цитата:
Как сообщить приложению на Java подлинную модульность? Данная статья — попытка дать ответ на этот вопрос.

Допустим, у нас есть развивающееся приложение на Java с достаточно интересным функционалом. Но, к сожалению, со временем становится все сложнее добавлять в него новые детали, программа начинает расклеиваться в неожиданных местах. Вполне возможно, проблема заключается в недостаточной модульности приложения. Но не казните себя — не вы в этом виноваты. Просто традиционный язык Java печально известен как раз плохо организованной модульностью. Но так быть не должно.

Повышая модульность, удается создавать расширяемые системы, более удобные в поддержке и компоновке. Если у вас есть четко определенные границы между модулями, то все хорошо. Любые функции можно тестировать отдельно от других, на уровне кода и работы с командой отлично действует принцип «разделяй и властвуй». Разработка ускоряется, и такая высокая скорость сохраняется не только в первый год существования системы, но и на протяжении всего ее жизненного цикла.

Что такое истинная модульность? Являются ли объекты или пакеты модулями? А может это jar-файлы?

От архитектуры к программам

Как же построить по-настоящему модульную систему? Конкретное решение мы рассмотрим ниже, а пока давайте четко определим стоящую перед нами проблему. Модульность очень важна на многих уровнях абстрагирования. Архитектура нашей системы устроена по принципу «SOA» (сервис-ориентированная архитектура). Правильно организованная сервис-ориентированная архитектура обеспечивает создание явных и версионированных общедоступных интерфейсов (в основном речь идет о веб-службах) между слабосвязанными системами, скрывающими свои внутренние детали. Эти подсистемы вполне могут работать на основе совершенно автономных технологических стеков, и поэтому каждую из таких подсистем можно легко заменить, не затрагивая все остальные.

Тем не менее при создании отдельно взятых сервисов или подсистем на Java зачастую не удается избавиться от монолитного подхода. К сожалению, характерным примером этого является среда времени исполнения языка Java, rt.jar. Разумеется, вы можете разбить ваше монолитное приложение на три обязательных уровня, но это лишь жалкое подобие истинной модульности. Просто задайтесь вопросом: что потребуется сделать, чтобы извлечь из вашего приложения базовый уровень и заменить этот уровень на совершенно иную реализацию? Очень часто такая замена отражается на всем приложении. А теперь давайте подумаем, как сделать это, не повреждая остальных частей приложения, при горячей замене прямо во время исполнения. Ведь это возможно в SOA-приложениях, так почему бы не реализовать такую возможность в наших приложениях?

Истинная модульность

Итак, что же такое «истинная модульность», которой мы уже слегка коснулись в предыдущем разделе? Сформулирую несколько определяющих характеристик полноценного модуля:

    • модуль — это независимый блок развёртывания (допускающий переиспользование в любом контексте);
    • модуль обладает стабильными конкретными идентификационными признаками (например, именем и версией);
    • модуль предъявляет определенные требования (например, зависимости);
    • один модуль может использоваться другими, но при этом внутренние детали данного модуля остаются для них скрытыми.

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

• Читать целиком статью «История модульности в языке Java».


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club