Skip to content

Latest commit

 

History

History
58 lines (41 loc) · 4.13 KB

ru.md

File metadata and controls

58 lines (41 loc) · 4.13 KB

Описание процессов биллинга общепринятыми терминами и ООП стало главной идеей абстракции. Библиотека писалась под предметную область хостинговой компании, но реализация достаточно абстрактна, чтобы ее можно было применить в другой предметной области. Ниже вкратце описаны идеи этой библиотеки:

Тариф/план - Plan

Тарифный план - собирательная сущность, которая включает в себя набор цен (Price) и служит для порождения списаний (Charge) для событий (Action).

Цена - Price

Price - информационная единица, которая содержит стоимость и тип, который он представляет. В нашей предметной области Price бывает поштучный (SinglePrice) или из списка (EnumPrice).  Например, Plan для доменных имён мог бы содержать два Price: по одному для операций типа "покупка домена" и "продление домена".

Действие - Action

Action - действие, подлежащее оплате. Допустим, мы хотим купить домен example.com. Для этого мы создаём действие (Action) с данными о цели (action.target = Domain(example.com)), устанавливаем тип "покупка домена" (action.type) и срок регистрации (action.quantity) в один год. Используя Plan::calculateCharges(), можно получить массив списаний (Charge) для этого действия.

Заказ - Order

Закказ - цельная операция, которая состоит из множества товаров или услуг (Action). Order - аггрегирующая сущность для объединения Action в единое целое. Например, всю корзину можно представить одним заказом.

Списание - Charge

Класс представляет непосредственно списание средств как результат действия (Action) тарифицированного по соответствующей цене (Price).

Платёж - Bill

Списания объединяются в платежи. Например, платёж за абонплату сервера один на $30, но может включать в себя списания за абонплату за железо $20, за колокейшен $5, за IP-адреса $5.

Калькулятор - Calculator

Калькулятор вычисляет все списания для конкретного заказа (Order) таким способом: находит соответствующий тариф и пытается применить все цены тарифы ко всем действиям заказа.

Продажа/подписка - Sale

Продажа (или подписка) представляет привязку клиента к купленной услуге/объекту (Target) по такому-то тарифу. Также может хранить другие данные описывающие конкрентную продажу: например дату окончания услуги.