Дублирующая логика c в бэкэнде и во внешнем интерфейсе с помощью доменного дизайна - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть класс с некоторым расчетным логином в бэкэнде:

public class MyDomainClass{
    private Double amount;
    private Double total;
    public Double getPercentage(){
        /*business logic*/
    }
}

Мой интерфейс находится в angular 2+, и я хочу показать эту информацию двумя способами.

В таблица со списком, предоставленным сервером:

enter image description here

И в форме издания, с процентным расчетом на основе ввода пользователя:

enter image description here

Чтобы выполнить этот расчет в форме, мне также нужно продублировать логи c в классе внешнего интерфейса? Я боюсь дублировать бизнес-логику c и потерять контроль над кодом с более сложными проблемами из-за этой же идеи (некоторые логи c в бэкэнде для отчетов и списков и те же логи c в формах внешнего интерфейса).

Как мне этого избежать?

PS: я использую Jax-rs в бэкэнде.

1 Ответ

3 голосов
/ 26 февраля 2020

Вы должны быть прагматичными c об этих вещах. Внешние интерфейсы должны гарантировать, что пользовательский интерфейс является приемлемым, по крайней мере, и иногда может быть дублирование функциональности, чтобы поддерживать UX гладким и разумным.

Другим примером могут быть проверки. Предварительная проверка необходима, даже если ваш домен должен выполнить те же проверки. Домен является источником правды, и все инварианты имеют , которые должны быть реализованы там. Дублирование определенных битов функциональности во внешнем интерфейсе допустимо, если это улучшает взаимодействие с пользователем.

Простые вычисления, которые вы использовали в качестве примера, - это то, чего я бы даже не стал беспокоюсь о. То же самое с добавлением затрат на отображение итогов и тому подобное. Ваш домен, возможно, делает то же самое, но намерения другие.

Если необходимо выполнить «тяжелую работу», тогда лучше позвоните в ваш web-api и сделайте так, чтобы ваш бэкэнд обработал это.

...