Основною метою існування більшості підприємств в сучасному світі є отримання прибутку, що полягає в збільшенні продуктивності та зменшенні витрат. Нинішні інформаційні системи в області обліку підприємства не відповідають таким умовам. Таке програмне забезпечення (ПЗ), зазвичай, залежить від технологій або операційних систем для яких воно розроблено, тому важливо підводити його до нових умов та випробувань.
Сучасні методи оптимізації включають в себе створення розширюваного програмного продукту, розподілення ПЗ на окремі рівні, можливість зменшення витрати часу на загрузку певних модулів, виважений вибір технології для зменшення витрат пам’яті [1]. Саме використання даної новітньої технології є свого роду оптимізацією.
Архітектура програмного забезпечення
Створення читабельного коду так само важливо як створення робочого коду[2]. Архітектура даного ПЗ є багаторівневою і складається з трьох рівнів:
- рівень доступу до даних;
- рівень бізнес логіки;
- рівень представлення.
Рівень представлення представлений паттерном MVP(Model-View-Presenter). Використання даного шаблону спрощує подальше розширення UI та його функціоналу, код стає читабельнішим, дозволяє розподілити конкретне представлення від моделі даних через презентер. Також даний паттерн було обрано адже він найкраще підходить для створення користувацького інтерфейсу за допомогою технології Windows Forms. Дана технологія пов’язана з обробкою івентів на кожен контрол, на відміну від WPF, де використовується мова розмітки для створення інтерфейсу, з якою в представленні використовують паттерн MVVM, адже WPF представляє ширший набір можливостей для використання DataBinding і спроектований для їхнього використання. На відміну від MVC(Model-View-Controller), в якому на один контролер можуть посилатися декілька представлень, в MVP – кожне представлення посилається на власний презентер та пов’язаний через інтерфейс представлення. Цей рівень також має свої моделі, для того щоб абстрагувати певну поведінку в інтерфейсі, як наприклад назва даних в DataGridView, тощо.
Для створення звітів використовується технологія ReportViewerCore. Створюються шаблони звітів з розширенням rdlc та додаються параметри для внесення даних. Як джерело даних можуть використовуватися одиничні значення та списки. Дана технологія враховує розподіл великого масиву даних на сторінки та подальший друк або експорт файлів в зручний формат.
Рівень бізнес логіки реалізований за допомогою паттерну Service. За допомогою даного шаблону ми можемо відділити логіку роботи з об'єктами в рамках бізнес задач від представлення. Це дозволяє розподілити рівень представлення від рівня доступу до БД, покращити підтримку коду та додавати новий функціонал в подальшому. Об'єкти представленні як Data Transfer Object – DTO, вони не мають бізнес логіки, а призначені лише для переносу даних і представлені як класи з властивостями, в певних випадках з методами парсингу або серіалізації даних.
Рівень доступу до даних представлений шаблонами Repository та Unit Of Work. В даному застосунку використовується технологія EntityFrameworkCore, в якій дані шаблони вже є реалізованими як класи DbContext – клас Unit Of Work, та DbSet – клас Repository. Repository – це шаблон, визначений для роботи з таблицями в БД, та абстрагує такі операції для роботи з ними як CRUD(Create-Read-Update-Delete). Unit Of Work в свою чергу дозволяє провести певні операції над об'єктом чи об'єктами за одну транзакцію[6]. Він потрібний для збереження цілосності даних в БД, коли успішне збереження до одної таблиці і невдале збереження до іншої таблиці пов'язаних сутностей провокує помилку в БД. EntityFrameworkCore є ORM, створені сутності для рівню доступу до даних поміщені в свої списки DbSet в створеному класі AccountingDbContext, що наслідується від DbContext. Так як проект новостворений і не існує бази даних конкретного підприємства, то використовується технологія Code First для створення БД. При зміні моделі або заданні початкових значень використовується технологія міграцій, за допомогою якої можна зберегти дані в БД при зміні моделі. Для пришвидшення роботи з БД, використана технологія компілювання моделей. Вони зберігаються в папці CompiledModels. При зміні моделі даних потрібно використати dotnet ef dbcontext optimize в CLI для оновлення моделей.
В класі Program.cs зберігається конфігурація сервісів застосунку та технологія Dependency Injection. Використовуються Transient залежності, адже в асинхронному коді виклики одного і того самого контексту даних не виконуються, тому потрібно на кожен виклик створювати свій екземпляр контексту даних.
Структура бази даних
При створенні БД для додатку потрібно слідувати чітко поставленим бізнес задачам[3]. Для окреслених бізнес задач наявна потреба в чітко структурованих даних. Створювана інформаційна система передбачує використання реляційної БД. Створення і підтримка БД виконується за допомогою технології Entity Framework Core та підходу Code First. Використовувана СУБД – Microsoft SQL Server. Налаштування таблиць в БД виконується в класі контексту даних в методі OnModelCreating[4] (рисунок 2).
Рисунок 2. Структура бази даних
В результаті вперше реалізовано систему обліку підприємства в сімействі сучасної технології об'єднаної платформи .NET, реалізовані можливості створення звітної системи в програмних застосунках даної предметної області.
Список використаних джерел:
1. Performance improvements in .NET 6 [Електронний ресурс] – Режим доступу: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/
2. Robert C. Martin. Clean Code: A Handbook of Agile Software Craftmanship(2008) – с.20.
3. Thomas Connolly, Carolyn Begg. Database Systems. A Practical Approach to Design, Implementation and Management, 4th Edition – с.22.
4. Julia Lerman, Rowan Miller. Programming Entity Framework: Code First – с.11.
|