Що визначає день?

Програмісти часто зосереджуються не на тому, коли створюють нові функції.

Ви можете думати про дані бекенду, дублювання коду або продуктивність. Ці питання важливі. Але вони не є найважливішими.

Я часто припускаюся цієї помилки. Я захоплююся розумними патернами та чистим кодом. Я починаю писати код ще до того, як повністю зрозумію, як користувач використовуватиме цю функцію. Потім я усвідомлюю, що мій код не відповідає бізнес-цілі.

Візьмемо для прикладу додаток-календар.

Користувач натискає на 1 березня, щоб позначити свято. Але замість цього додаток позначає 28 лютого. Це стається через часові пояси.

Розробник використав об'єкт Date. Об'єкт Date представляє конкретний момент у часі.

У Токіо опівночі 1 березня — це все ще 28 лютого в Лондоні. Якщо ваш код використовує методи UTC для збереження дати, день зміщується.

Баг існує тому, що технічна реалізація суперечить бізнес-логіці.

Користувач мислить днями. Користувач не мислить зміщеннями UTC або мілісекундними мітками часу. Він думає: «Я хочу 14 березня».

Якщо ви хочете, щоб ваш код був надійним, ви повинні правильно моделювати домен.

У паперовому календарі дата — це просто рік, місяць і день. У неї немає часового поясу.

Ви можете виправити баг, дотримуючись узгодженості з UTC або місцевим часом. Але це лише тимчасове рішення. Кращий спосіб — використовувати структури даних, які не можуть помилитися.

Замість об'єкта Date використовуйте власний об'єкт:

• Рік: 2026 • Місяць: Березень • День: 1

Це виключає час і часові пояси з рівняння. Це робить баг неможливим.

Так, це потребує більше роботи. Вам доведеться писати утиліти для порівняння дат або пошуку кінця місяця. У вас є дедлайни та спринти, про які варто турбуватися.

Але правильне моделювання домену вбереже вас від розгніваних тікетів у підтримку та багатогодинного налагодження пізніше.

Як каже Ерік Еванс у Domain-Driven Design:

«Для ефективної комунікації код має базуватися на тій самій мові, що використовується для написання вимог».

Перестаньте думати лише як програміст. Почніть думати про бізнес-правила.

Джерело: https://dev.to/bartoszosn/what-defines-a-day-when-technical-implementation-affects-business-behaviour-4j2b