Структура проекта - niles-developers-team/Niles.PrintWeb GitHub Wiki
Проект Niles.Printweb состоит из Web UI приложения, web api, утилиты для управления базой данных и нескольких библиотек.
printweb
printweb - это standalone single page application которое будут использовать непосредственно наши пользователи и мы сами, чтобы следить за тем, как наш проект живет. Приложение разрабатывается с использованием Angular и Angular Material.
В этом приложении клиент может выбрать печатню и система проложит маршрут к ней, так же пользователь может оставить заказ в электронной очереди и придти в печатню уже за готовым заказом.
Niles.Printweb.Api
Niles.Printweb.Api - это web-api, которое будет связывать пользователей, которые будут использовать наши продукты. Web Api разрабатывается с помощью .net core 3.0 и asp.net core 3.0.
Niles.Printweb.Api.Services
Niles.Printweb.Api.Services - это библиотека с набором реализаций сервисов проекта, которые позволяют вынести основную логику обработки данных в отдельный слой для прозрачности решения и упрощения отладки.
Niles.Printweb.Api.Tests
Niles.Printweb.Api.Tests - это набор авто тестов для упрощения поиска ошибок и тестирования всего web-api.
Niles.Printweb.DataAccessObjects
Niles.Printweb.DataAccessObjects - это библиотека объектов доступа к данным (слой DAL), так же их называют DAO (Data access objects). Доступ к базам данных разрабатывается с помощью пакета Dapper.
Объекты доступа к данным позволяют быстро переключаться между источниками данных, например между разными субд. При создании dao применяются 2 правила:
- Каждый DAO создается только для конкретной модели;
- Сервис может использовать только один DAO, если необходим доступ к другим моделям - необходимо использовать сервисы, которые работают с необходимыми моделями. Таким образом устраняется проблема с огромным количеством ссылок, которые только путают разработчик и увеличивается прозрачность кода. Можно точно отследить, где возникла ошибка.
Niles.Printweb.Models
Niles.Printweb.Models - это библиотека моделей сущностей, которые использует система.
На данный момент модели бывают 2 типов:
- Непосредственно модель сущности;
- Options-модели - модели для вспомогательных методов, например опции получения объектов (GetOptions) или опции валидации (ValidateOptions)
Niles.Printweb.Models.Settings
Niles.Printweb.Models.Settings - это библиотека настроке приложения, таких как:
- Настройки подключения к smtp серверу, для e-mail рассылки;
- Настройки подключения к базе данных;
- Настройки логгирования и прочие системные настройки;
Niles.Printweb.Services
Niles.Printweb.Services - это набор интерфейсов, позволяющий жестко ограничить сервисы по всему проекту, чтобы минимизировать расхождения в моделях и наименованиях.
Niles.Printweb.Shared
Niles.Printweb.Shared - общая для все проектов библиотека расширений или функций, которые могут применяться где угодно в проекте.
Niles.Printweb.Utilities
Niles.Printweb.Utilities - это утилита управления базой данных, которая позволяет быстро создать/удалить базу данных или же накатить миграции или обновить строку подключения. Утилита является консольным приложением, парсинг данных, которые пользователь ввел в командной строке выполняется с помощью пакета CommandLineParser. Миграции выполняются с помощью пакета FluentMigrator