- Разработать дизайн и интерфейс мобильного клиента, опираясь на веб-сайт храма.
- Интегрировать функционал для просмотра информации о новостях, расписании служб, контактной информации и других разделов, представленных на сайте храма.
- Оптимизировать производительность приложения для плавной работы на устройствах под управлением операционной системы Android.
- Провести тестирование приложения на различных устройствах, чтобы гарантировать стабильную работу и отзывчивость.
- Улучшение доступности информации: Мобильный клиент позволит увеличить доступность информации о храме для широкой аудитории пользователей мобильных устройств, что способствует привлечению новых посетителей и повышению осведомленности об объекте.
- Удобство пользования: Приложение обеспечивает удобный и простой способ получения актуальной информации о храме, его истории, событиях и расписании богослужений, что способствует повышению интереса и участия пользователей.
- Технологический прогресс: Разработка мобильного приложения демонстрирует использование современных технологий для улучшения взаимодействия организации с пользователем, что актуально в современном мире цифровизации.
- Просмотр информации о храме, его истории и деятельности.
- Просмотр расписания богослужений.
- Отображение последних новостей и событий, связанных с храмом.
- Синхронизация с действующим сайтом www.hramalnevskogo.ru для актуализации информации.
- Приложение должно быть разработано под управлением операционной системы Android версии 8.0 и выше.
- Интерфейс приложения должен быть интуитивно понятным и удобным для использования.
- Приложение должно быть стабильным, быстрым и безопасным.
- Должна быть предусмотрена возможность работы в офлайн-режиме для доступа к ранее загруженным данным.
- Приложение должно поддерживать различные разрешения экранов смартфонов и планшетов.
Web API
ANTWebAPI состоит из классической трехслойной архитектуры:
- data access layer(DAL) в основном отвечает за взаимодействие с базами данных, обеспечивает удобный, безопасный доступ к данным для других слоев.
- business logic layer(BLL) управляет бизнес-правилами и логикой приложения. Он обеспечивает: валидацию входных данных перед их использованием/сохранением, обработку транзакций и логику принятия решений.
- presentation layer(PL) отвечает за взаимодействие с клиентами. Данный слой обрабатывает запросы от клиента, отправляет их в бизнес-логику, получает ответы и передает их клиенту.
По диаграмме можно увидеть, что BLL использует интерфейсы, которые помогают инкапсулировать детали реализации DAL, обеспечивая безопасность и ясность использования только необходимых методов. Это позволяет слою бизнес-логики взаимодействовать с DAL без привязки к конкретной реализации, что упрощает изменения в слое доступа к данным. К тому же использование интерфейсов позволяет легко заменять одну реализацию DAL на другую (например, для тестирования или при изменении базы данных) без изменения кода BLL. PL же в свою очередь непосредственно вызывает необходимые функции без промежуточного уровня, потому что изменения в слое презентации, как правило, происходят реже, чем в слое бизнес-логики, что уменьшает необходимость в абстракции интерфейса для связи с BLL. При разработке данного web api следовал принципам kiss, solid и dry, но, скорее всего, не получилось следовать dry, т.к. есть места с бойлерплейтом.
- язык программирования - C#, .NET 8.
- ASP.NET Core расширяет .NET инструментами и библиотеками, специально предназначенными для создания веб-приложений.
- Microsoft.Extensions.DependencyInjection - DI framework для .NET.
- EntityFrameworkCore - framework для взаимодействия с базой данных.
Android app
Разбор цветов:
- синий - DI.
- красный - зависимости от модулей.
- зеленый - реализации интерфейсов.
- бирюзовый - классы, которые передаются в конструктор.
Domain модуль не зависит от модуля data или presentation. Он взаимодействует только с data, через интерфейс. Data модуль не зависит от других модулей, кроме domain. В нем есть репозиторий, который предоставляет интерфейс для доступа к данным. Presentation зависит от domain для получения данных и бизнес-логики, но не зависит от data. При зависимости presentation от data если изменить один модуль, и придется менять другой, что снижает гибкость и увеличивает вероятность ошибок. app основной модуль, который зависит от presentation, data и domain. Здесь настраивается основная логика приложения и связываются остальные модули.
Приложение соответствует SAA(Single Activity Architecture) и разработано по принципам Clean Architecture и SOLID, что обеспечивает четкое разделение слоев, ответственностей, делает код более читаемым и поддерживаемым. В чистой архитектуре каждый слой отвечает за свою часть (представление, бизнес-логика, данные). Поддерживая эту инкапсуляцию, повышается читаемость кода и уменьшается сложность. Главным принципом при разработке был KISS, т.е. стремление к простоте и минимализму в процессе разработки, что позволило избежать излишней сложности, сохранить код чистым, сделать приложение легким для понимания. А также DRY, чтобы избежать дублирующегося кода.
- язык программирования - kotlin v2.1.0.
- jetpack compose (v1.7.6) - рекомендуемый Андроидом, современный набор инструментов для создания нативного интерфейса.
- koin - мультиплатформенный, легковесный DI framework для kotlin.
- sqlDelight - мультиплатформенная библиотека для взаимодействия с sqlite.
- kotlinx-serialization-json - мультиплатформенная библиотека для преобразования kotlin классов в json и наоборот.
- kotlinx-coroutines - библиотека для работы с корутинами.
- ktor-client - мультиплатформенный асинхронный http клиент, который позволяет совершать запросы и обрабатывать ответы.
- androidx-navigation-compose - для навигации между экранами внутри приложения.
- coil - библиотека загрузки изображений.
parser
Значения цветов стрелок такие же, как в пункте с Android App
.
В данном проекте также используется Clean Architecture, однако вся кодовая база собрана в одном модуле, а разделение осуществляется через пакеты. Сначала мы планировали разработать проект на Kotlin, но из-за нехватки библиотек для парсинга данных решили отказаться от этой идеи. C# имел много доступных библиотек, но определиться с выбором было непросто, и мы не хотели рисковать. Однако в java была только одна и довольно-таки известная библиотека для парсинга html, поэтому выбор пал на него.
- язык программирования - java, jdk 21.
- Dagger - compile-time DI framework.
- jsoup - библиотека для извлечения данных из html.
- gson - библиотека для преобразования объектов java в их json представление и наоборот.
- gradle - система автоматической сборки.