Java-это объектно-ориентированный язык; Он поддерживает инкапсуляцию, наследование и полиморфизм. Как мы видим из постоянного успеха Java в предпринимательских приложениях через 30 лет, это популярный способ разработки приложений, которые включают в себя много бизнес -логики. Большая часть этой бизнес -логики требует доступа и обработки данных, хранящихся в постоянной форме, обычно (хотя и не исключительно) в базе данных.
Реляционные базы данных, которые, вероятно, являются наиболее распространенным способом хранения больших объемов данных, не легко отображаются с объектно-ориентированным подходом. Это называется несоответствием объектно-реляционного импеданса.
На протяжении многих лет для решения этой проблемы использовались различные подходы. EJBS ENTITY были ранним решением, которое никогда не приобретало особой тяги. Другие рамки, такие как Hibernate и Java Persistence API, оказались гораздо более популярными.
На более базовом уровне шаблоны проектирования могут использоваться для упрощения этого типа кодирования. Объекты доступа данных (DAO) — один, а шаблон репозитория — другой.
В этой статье мы рассмотрим шаблон хранилища и, в частности, как это можно использовать асинхронно.
Прежде чем мы пойдем в детали, давайте обсудим, что асинхронно означает в этом контексте.
Понимание синхронного и асинхронного исполнения
Когда в приложении необходим результат, мы призываем к чему -то, что обеспечит этот результат. Это могло бы использовать что угодно, от метода Java до запроса в спокойной веб -сервиса по сети. Результат займет время для производства, и у нас есть два варианта о том, как справиться с этим. Первый — сделать призыв синхронным; Мы делаем запрос и ждем возвращения результата. Это заблокирует наш приложенный поток от выполнения каких -либо работ, пока результат не будет возвращен.
Второй вариант — асинхронно сделать звонок. В этом случае мы делаем запрос, но не ждем возврата результата. Мы можем продолжать выполнять полезную работу, которая не зависит от результата.
Зачем использовать Async в репозиториях Java?
Один из примеров того, где это было бы особенно полезно, заключается в том, что вам нужно запросить несколько различных источников, которые не будут реагировать сразу. Используя асинхронный подход, время, необходимое для достижения всех результатов, будет временем самого медленного источника, а не общей суммы времени, требуемого каждым источником.
Как и все хорошие модели, шаблон дизайна репозитория прост в описании (одна из ключевых целей моделей — обеспечить общий словарь для разработчиков). Он также использует наиболее распространенный способ решения проблем в разработке программного обеспечения: он вводит еще один уровень абстракции.
Понимание шаблона хранилища
Взаимодействие с источниками данных потребует различных (потенциально сложных) протоколов, в зависимости от источника и его реализации. Если мы интегрируем эти протоколы непосредственно в нашу бизнес -логику, мы делаем наш код очень хрупким. Любые изменения в источнике, который мы хотим использовать, или как мы взаимодействуем с ним, требуют изменения в нашем коде.
Чтобы устранить это, мы вводим репозиторий; Вы можете думать об этом как о аналогичном библиотекарю. Когда вам нужны данные (книга), библиотекарь знает, где они находятся и как получить к ним доступ. Если вам нужна другая книга, вы просто спросите библиотекаря, который посещает новое место. Это специализированная форма фасада.
Репозиторий абстрагирует, как мы взаимодействуем с источником данных, предоставляя наиболее распространенные формы работы: создавать, читать, обновить и удалять. Как пользователь репозитория, мы не относимся к тому, как реализованы эти функции; Требуется ли звонок JDBC, или звонок для спокойного веб -сервиса нас не касается. Если нам нужно перейти на альтернативный хранилище данных, используя другой протокол, с этим можно обработать изоляцию путем изменения реализации репозитория. Бизнес -логика нашего приложения, используя основные операции, не потребует никаких изменений.
Внедрение асинхронных методов в репозиториях Java
Этот подход также может упростить то, как мы делаем наши звонки асинхронными. Призыв к репозиторию может немедленно вернуться. Поскольку нам нужно знать, когда операция будет завершена, мы зарегистрируем обработчик обратного вызова с помощью репозитория. Мы можем начать несколько операций, и по мере их завершения обработки вызываются, и мы можем отслеживать наш прогресс. Это также дает нам большую гибкость в отношении операций по обработке, которые терпят неудачу или занимают слишком много времени, чтобы завершить.
У Java есть богатый набор библиотек, что облегчает реализацию асинхронного репозитория. Внедрение класса «Завершаемое место» в JDK 8, которое поддерживает несколько этапов, особенно полезно. Кроме того, шаблон репозитория может отлично использовать виртуальные потоки (представленные в JDK 21) для обеспечения значительной повышенной масштабируемости при использовании в распространенной конструкции потока на просмотр.
Ключевые выводы для реализации Async Java Repository
Таким образом, шаблон хранилища предоставляет способ сделать бизнес -логику более читаемой и обслуживаемой. Потенциальным недостатком является дополнительный слой абстракции, который может ухудшить общую производительность. Этот недостаток может быть сведен к минимуму в сочетании с асинхронными операциями, которые используют виртуальные темы Java.
Есть много способов разработки приложений, которые нуждаются в доступе к источникам данных; Асинхронное хранилище следует считать мощным инструментом при выборе правильного подхода для вашего приложения.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Саймон Риттер — заместитель технического директора Азула. Саймон присоединился к Sun Microsystems в 1996 году и провел время, работая как в разработке Java, так и в консультации. Он представляет Java Technologies разработчикам с 1999 года, сосредоточившись на основной платформе Java … Подробнее от Simon Ritter