Рубрики
Без рубрики

Создание новой информационной системы больницы с использованием Java, Spring Boot, Apache Wicket и Gradle

Описание архитектурного прототипа. Помеченный java, spring, калиткой, начальной загрузкой.

Благотворительная больница Кирпал Сагар – это небольшая больница в Пенджабе, Индия, рассчитанная примерно на 30-50 коек. В течение следующих десятилетий планируется увеличить его до 500 коек. Для управления внутренними процессами такого масштаба требуется информационная система здравоохранения. Хотя программная система уже существует, она не обеспечивает дополнительной поддержки для этого пути роста.

Одним из вариантов достижения этой цели является создание индивидуального решения с нуля. В отличие от настройки больничных процессов некоторым стандартным программным обеспечением, этот подход позволяет адаптировать программное обеспечение к конкретным требованиям. Например, выставление счетов должно поддерживать схему скидок в диапазоне от 0 до 100%, в зависимости от жизненных обстоятельств пациента. Также в какой-то момент записи пациентов должны быть синхронизированы с учетными записями студентов Академии Кирпал Сагар и т.д.

Это сообщение в блоге представляет собой описание архитектурного прототипа для этого подхода.

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

В качестве основы приложения Используется Spring . Платформа Spring Core предоставляет такие функции, как внедрение зависимостей, доступ к данным и управление транзакциями. С помощью Spring Security можно указать правила доступа для определенных URL-адресов. Spring Data обеспечивает уровень абстракции для базы данных. Проект Spring Boot упрощает работу с Spring, предоставляя такие функции, как автоматическая настройка и управление зависимостями для часто используемых библиотек.

Для создания HTML-страниц применяется Apache Wicket . Это позволяет развертывать приложение в одном пакете, так что требуется отслеживать только один процесс приложения и сервер базы данных. Еще одним преимуществом Wicket является то, что он позволяет использовать методы объектно-ориентированного проектирования для композиции веб-элементов. Эти HTML-компоненты могут быть разработаны веб-дизайнерами самостоятельно, так как для этого не требуется никаких знаний о бэкэнде. Помимо этого, Wicket предлагает широкий спектр функций для создания продвинутых веб-приложений, например, сеансы пользователей, аутентификация на основе ролей, кэширование и динамическое обновление страниц с помощью AJAX.

Программные системы, как правило, со временем становятся чрезвычайно сложными. Чтобы держать эту сложность под контролем, они должны быть правильно структурированы. В повседневной жизни для поддержания порядка применяются различные средства. Например, винты хранятся в маленьких коробочках. Различные виды винтов хранятся вместе в больших коробках. Эти большие коробки ставятся вместе с другими материалами и инструментами на полки. Следующий уровень детализации – это комната, где расположены соответствующие полки. Несколько комнат в здании, предназначенном для определенной цели.

Существуют также различные средства, доступные для структурирования приложений Java на разных уровнях детализации. Тончайший уровень структуры – это методы. Связанные методы и переменные хранятся вместе в классах. Несколько классов, которые предоставляют определенные возможности, сгруппированы в пакеты. Несколько пакетов, относящихся к определенному аспекту, объединяются в модули через Систему модулей платформы Java (JPMS), пакеты OSGi , многомодульные проекты Maven или Сборки нескольких проектов Gradle . Затем приложение в целом предоставляет набор возможностей для бизнес-домена.

Идеальным решением для этого приложения является то, что методы и классы структурированы в соответствии с принципами проектирования SOLID . Затем классы группируются по шаблону пакет по функциям , чтобы сосредоточиться на бизнес-домене. Для разделения различных контекстов применяется опция, основанная на градации. Это обеспечивает лучшую интеграцию Spring, чем JPMS и OSGi, в то время как детали реализации модулей все еще можно скрыть с помощью плагина Библиотеки Java .

В основе приложения лежат модули предметной области, которые представляют различные области клинических услуг и административных функций больницы. Каждый из них имеет два вложенных подмодуля. Одним из них является интерфейс модуля (API), который доступен для всех остальных модулей. Другой предназначен для деталей реализации (Impl). Здесь происходят такие вещи, как доступ к базе данных и вычисление бизнес-логики, без того, чтобы другие модули знали об этом. Таким образом, детали реализации могут быть изменены без какого-либо влияния на клиентов API модуля. Например, хранилище данных потенциально может быть изменено с PostgreSQL на базу данных MongoDB.

Когда один модуль знает о содержимом другого, говорят, что у него есть зависимость от этого. Gradle запрещает циклические зависимости; что оба знают друг о друге. В случае, если им все же необходимо сотрудничать, они могут использовать модель взаимодействия публикация-подписка . С помощью этого один компонент может публиковать сообщения третьей стороне, а другой компонент может подписаться на них, чтобы получать уведомления о тех сообщениях, которые его интересуют. Это может быть реализовано с помощью шаблона проектирования наблюдателя . Однако с помощью функции События приложения Spring эта концепция может быть применена без необходимости ее реализации с нуля. Так, например, модуль управления пациентами может публиковать Событие создания пациента при регистрации нового пациента. Затем модуль отчетов может запросить получение уведомления, когда это произойдет, и затем обработать его соответствующим образом. Таким образом, модуль отчетов потенциально может быть реструктурирован без необходимости что-либо менять в модуле управления пациентами.

Модуль пользовательского интерфейса содержит пакет для каждой компьютерной рабочей станции в больнице. Он может использовать API-интерфейсы всех модулей домена для организации рабочих процессов. По техническим причинам класс приложения Spring и его конфигурация также находятся там.

Калитка соединяет классы Java и HTML-файлы с помощью соглашений об именовании. Для каждого класса веб-страниц он пытается найти HTML-файл с таким же именем. Если этого нет, он пытается найти HTML-файл с именем родительского класса и т. Д. Используя методы объектно-ориентированного программирования, страницы могут быть упорядочены по составу и наследованию. Когда страница или компонент, наконец, визуализируются, HTML-элементы с атрибутом идентификатора калитки получают информацию из соответствующих инструкций в классах Java. Там доменные сервисы доступны с помощью фреймворка Spring.

Чтобы везде выглядеть одинаково, для всех веб-страниц существует общий базовый класс ( ApplicationFrame.java / ApplicationFrame.html ). Исходя из этого, для каждой соответствующей рабочей станции существует базовая страница, которая предоставляет метод шаблона реализацию ссылки на значке “Главная” (например, RegistrationPage.java ). Из этого выводятся все страницы рабочей станции (например, RegisterPatientPage.java ). Листовые страницы сами по себе не определяют HTML, а создают экземпляры компонентов, а затем предоставляют их с помощью другого метода шаблона в качестве содержимого страницы. Затем HTML-код родительского класса заполняется этими компонентами, т.е. панелью мониторинга ( Dashboard.java / Dashboard.html ) или Деятельность ( Activity.java / Activity.html ).

Разработка информационной системы больницы на самом деле является крупным предприятием, скорее жизненной задачей. Так что, возможно, было бы лучше использовать существующую систему с открытым исходным кодом, такую как Bahmani , и платить консультантам за ее внедрение, настройку и поддержку. Однако, учитывая, что уже существуют две специально разработанные программы для школьной администрации и управления запасами, не кажется нереальным добавить третью для больницы. При этом есть шанс создать систему, оптимизированную для требований объекта.

Каково ваше впечатление от такого подхода? Как ты думаешь, как далеко мы сможем с этим продвинуться? В чем вы видите его сильные и слабые стороны?

Любая форма конструктивной обратной связи приветствуется.

Оригинал: “https://dev.to/janux_de/building-a-greenfield-hospital-information-system-with-java-spring-boot-apache-wicket-and-gradle-4np1”