Это приложение для сокращения URL с использованием Docker и Redis. Приложение позволяет сократить URL и создать короткую ссылку, которая будет перенаправлять на оригинальный ресурс.
- Dockerfile — используется для создания Docker-образа приложения.
- docker-compose.yml — конфигурация Docker Compose, включающая сервисы Redis и приложение.
- server.js — основной серверный файл на Node.js, реализующий логику сокращения URL.
- views/ — каталог с шаблонами для отображения страниц (используется EJS).
- services/ — каталог с сервисами:
- IStorageService.js — интерфейс для различных хранилищ URL.
- RedisStorageService.js — реализация хранилища URL с использованием Redis.
- InMemoryStorageService.js — альтернативное хранилище (в памяти) для локального тестирования.
- UrlService.js — сервис обработки и сокращения ссылок.
- Установленный Docker для контейнеризации приложения.
- Node.js — для выполнения серверной логики приложения.
Убедитесь, что все зависимости установлены перед запуском приложения.
-
Клонируйте репозиторий:
git clone https://github.com/YanKarpov/URL-shortening-service.git cd URL-shortening-service
-
Соберите и запустите контейнеры:
docker-compose up --build
-
Перейдите в браузер и откройте http://localhost:3000.
-
Используйте интерфейс для создания сокращённых ссылок.
В ходе рефакторинга код стал чище, гибче и удобнее для расширения.
- SRP (Принцип единственной ответственности) – логика хранения и обработки ссылок теперь разделена.
UrlService
отвечает только за работу с URL, аredisStorage.js
— за хранение данных. - OCP (Принцип открытости/закрытости) – теперь можно заменить Redis на другое хранилище (например, MongoDB) без изменения основной логики.
- DIP (Принцип инверсии зависимостей) –
UrlService
теперь работает через абстрактный интерфейсIStorageService
, а не напрямую с Redis. Это снижает зависимость от конкретного хранилища. - LSP (Принцип подстановки Барбары Лисков) – добавлен
IStorageService
, который можно реализовать для любого хранилища (Redis, файлы, базы данных), не ломая код. - ISP (Принцип разделения интерфейсов) –
IStorageService
содержит только минимальный набор методов (save
,get
), избавляясь от лишних зависимостей. В будущем можно выделитьIClickStatsService
для сбора статистики.
Теперь сервис легко расширять: можно добавить аналитику, сменить хранилище или доработать API без переписывания всей системы. Код стал логичнее и проще в поддержке.