Сервіс
Наша стратегія розробки базується на ідеї використання сервісів як окремих компонентів функціональності, які можна розглядати та розробляти незалежно один від одного. Кожен сервіс відповідає за виконання конкретного завдання або надання певної послуги.
Бізнес-логіка описує бізнес-процеси, одночасно з цим, графічні інтерфейси описують під окремих акторів - кінцевих користувачів, які будуть взаємодіяти з бізнес-логікою веб-застосунку. Це вносить поділ між описом бізнес-моделі та реальним її використанням на графічних інтерфейсах.
Результатом такого поділу може бути, що на сторінці половина вмісту інформації буде з одного сервісу, а інша половину з другого сервісу. При чому ці сервіси є різні по навантаженню, та з точки зору веб-сервера один з цих сервісів матиме декілька екземплярів роботи сервісу.
Замість того, щоб будувати веб-застосунок як єдину монолітну систему, ми розглядаємо його як модульний моноліт - сукупність таких сервісів, які можуть взаємодіяти один з одним. Це дає можливість гнучко використовувати систему
Особливість цього підходу полягає в тому, що розробники можуть працювати над різними сервісами незалежно один від одного, зосереджуючись на своїй області компетенції або відповідальності. Це сприяє швидкому впровадженню нових функцій та зменшує ризик виникнення конфліктів між різними командами.
Такий підхід також сприяє легкості підтримки, оскільки проблеми, які виникають у конкретних сервісах, можуть бути ізольовані і вирішені без впливу на решту системи. Також він полегшує вступ нових розробників у проєкт, оскільки їм не потрібно розуміти всю систему цілком, а лише той сервіс, над яким вони працюють.
Архітектура
Кожний графічний інтерфейс, який потребує включення бізнес-логіки, встановлює ядро відображення, що забезпечує роботу сервісу, або групи сервісів.
При описі кожного графічного інтерфейсу є можливість описати, які саме сервіси будуть в ньому використанні.
Використання сервісів, в контексті X-Fiber
це вико ристання графічних представлень предметних областей цих сервісів.
В випадку створення декількох графічних інтерфейсів необхідно запровадити монорепозиторій.
Впровадження монорепозиторію є важливим рішенням, оскільки графічний інтерфейс прямо пов'язаний зі структурою секцій та навігаційних панелей, що використовуються на веб-сторінках. Компоненти, які використовуються у графічних інтерфейсах, описуються в бізнес-логіці та використовуються на сторінках через вбудовані функції ядра відображення. Такий підхід дозволяє підтримувати прийнятний розмір окремого графічного інтерфейсу
Опис бізнес-логіки в одному місці дозволяє забезпечити міцне зв'язування кодової бази, що запобігає виникненню розбіжностей у використанні однієї сутності в різних версіях або структурах тому що представлення предметної області формуються в одному місці для всіх графічних інтерфейсів, а розподіл бізнес-логіки на сервіси дозволяє розробникам та групам розробників будувати власну бізнес-логіку незалежно.
Склад
Опис сервісу має наступний вид:
type RegistryStructure = {
// ... registry structure
}
type ServiceDocumentation<N extends string = string> = {
// ... service documentation structure
}
type ServiceStructure<S extends string = string> = {
service: S;
domains: RegistryStructure[];
documentation?:
| ServiceDocumentation
| ServiceDocumentation[]
| null;
};
export const setService = <S extends string = string>(
service: S,
domains: RegistryStructure[],
documentation?:
| ServiceDocumentation
| ServiceDocumentation[]
| null
): ServiceStructure<S> => {
return {service, domains, documentation};
};
де:
- Типи:
RegistryStructure
- документ "Реєстр" предметної області, який реєструє похідні документи веб-клієнта.ServiceDocumentation
- опис документації сервісу, його інтерфейсів та ін. конкретною мовою перекладу, будь-тоen
,ru
чи ін.ServiceStructure
- сформований обʼєкт сервісу для подальшої реєстрації вsetServices
ядра відображень.setService
- вбудована функція в ядро відображень, яка призначена для опису сервісів бізнес-схеми.S
- строковий тип назви сервісу, який повинен бути унікальним в рамках бізнес-схеми одного ядра відображень.
- Аргументи:
service
- ідентифікаційний тег, який однозначно визначає сервіс.domains
- перелік функціональних сфер, які охоплює конкретний сервіс.documentation
- детальний опис функціональності, інтерфейсів, параметрів виклику та іншої важливої інформації про сервіс. Ця документація допомагає розробникам та іншим зацікавленим особам розуміти, як користуватися сервісом.
- Результат:
- Сформований опис бізнес-схеми сервісу, який необхідно зареєструвати в
setServices
ядра відображень.
- Сформований опис бізнес-схеми сервісу, який необхідно зареєструвати в
При описі кожного сервісу важливо уникати дублювання опису функціональності, яка вже визначена в інших сервісах. Це допомагає уникнути зайвої реєстрації сервісів та зберігає чистоту архітектури системи.
Реалізація
Розділяйте програмний код на модулі, оскільки це сприяє збереженню структурованості, зменшенню залежностей між різними частинами програми та полегшує тестування. Декомпозиція на модулі дозволяє кожному модулю мати чітко визначену відповідальність та набір функцій або методів, що реалізують цю відповідальність.
Декомпозиція коду на модулі полягає у роз діленні програмного коду на невеликі, самодостатні блоки, які відповідають
за конкретні функціональні області програми. X-Fiber
надає перелік вбудованих документів - невеликих блоків, через,
які необхідно описувати функціональну сферу.
import { setService } from 'x-fiber/display'
import {
BusUsersAgg,
BusUsersAuthSpec,
BusUsersRolesSpec,
BusUsersRolesPermissionsSpec
} from './bus.users'
export const Service1 = setService<"BusinessAdmin" | "Accounting">('BusinessAdmin', [
BusUsersAgg,
BusUsersAuthSpec,
BusUsersRolesSpec,
BusUsersRolesPermissionsSpec,
]);
де:
BusinessAdmin
- назва сервісу.[BusUsersAgg, BusUsersAuthSpec, ...]
- масив предметних областей.
Предметна область
Кожний сервіс складається з групи предметних областей. Предметна область при цьому описується переліком документів. Методологія створення та реалізація предметної області описується в наступних розділах:
📄️ Реалізація
📚 Опис реалізації предметної області
📄️ Методологія
📚 Методологія побудови предметних областей