Реализация пакета с использованием DDD - PullRequest
0 голосов
/ 19 июня 2020

У меня нет проблем с реализацией более простых пакетов с DDD, но как я могу go реализовать пакет RevenueCat ( управляет подписками с покупками в приложении ) для флаттера с помощью DDD. У меня проблема в том, что они требуют, чтобы их собственные классы (пакеты) передавались через функции пакетов. классы, и это не загрязняет никакую другую часть моего кода, я хотел бы добиться этого и здесь.

Например (выдержка из ссылки на репозиторий пакетов github, которая находится в конце вопроса)

class UpsellScreen extends StatelessWidget {
  final Offerings offerings;

  UpsellScreen({Key key, @required this.offerings}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    if (offerings != null) {
      final offering = offerings.current;
      if (offering != null) {
        final monthly = offering.monthly;
        final yearly = offering.annual;
        if (monthly != null && yearly != null) {
          return Scaffold(
              appBar: AppBar(title: Text("Upsell Screen")),
              body: Center(
                  child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  PurchaseButton(package: monthly),
                  PurchaseButton(package: yearly)
                ],
              )));
        }
      }
    }
    return Scaffold(
        appBar: AppBar(title: Text("Upsell Screen")),
        body: Center(
          child: Text("Loading..."),
        ));
  }
}

Существует пример полной реализации, которой довольно просто следовать, и это всего лишь один файл: https://github.com/RevenueCat/purchases-flutter/blob/master/example/lib/main.dart

As I ' m новичок в DDD, я не уверен, как именно реализовать такой пакет, и хотел бы придерживаться DDD в качестве своего дизайнерского решения, так как мне очень нравится рабочий процесс.

1 Ответ

0 голосов
/ 04 июля 2020

Я не особо трепещу. Но, как я вижу, вы должны объявить домен, в котором работает это представление. Назовем его Upsell, он будет нашим Агрегатом Root, без него другие объекты не имеют смысла или имеют другое значение. Затем я вижу, что Upsell действует на Oferrings наших сущностей, у них есть свои личности. Я предполагаю, что цель Oferrings - продать несколько Packages (следующих объектов). На этом этапе мы создали нашу модель домена. Поскольку здесь нет сложной логики c, я не думаю, что в этом есть необходимость. Вы должны добавить свой Агрегат Root (Upsell). Upsell класс должен вернуть вам пакеты для продажи. И я перейду к вашей проблеме, ваши объекты домена с именем Package не должны знать об этой структуре или о том, что вы используете. Для этого вам нужно вернуть некоторый dto. И какой-то сервис или dto должны знать, какой проход следует передать этому фреймворку.

...