0

使用 DDD 实现更简单的包我没有问题,但是如何使用 DDD 来实现用于颤振的 RevenueCat(管理应用内购买订阅)包。我遇到的问题是它需要通过包函数传递他们自己的自定义类(包)。

到目前为止,我已经对其进行了抽象,以便我的其他包唯一存在的地方是它们的存储库/外观类,并且它不会污染我的代码的任何其他部分,我也想在这里实现这一点。

例如(摘自包 github repo 链接,位于问题的末尾)

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

由于我是 DDD 新手,我不确定实现这种包的确切方法,并希望坚持使用 DDD 作为我的设计选择,因为我真的很喜欢这个工作流程。

4

1 回答 1

0

我不太喜欢颤振。但正如我在那里看到的那样,您应该声明该视图正在运行的域。让我们命名它Upsell,它将是我们的聚合根,没有它其他对象没有意义或有其他含义。然后我可以看到它UpsellOferrings我们的实体上运行,它们有自己的身份。我猜Oferrings 的目的是出售一些Packages(下一个实体)。至此,我们已经创建了域模型。因为没有复杂的逻辑,我认为不需要任何服务。你应该添加你的聚合根(Upsell)。Upsell类应该返回你的包裹出售。我将解决您的问题,您的域实体命名Package不应该知道那些框架或你正在使用的任何东西。为此,您应该返回一些 dto。并且某些服务或 dto 应该知道应该将什么传递传递给该框架。

于 2020-07-03T21:11:09.210 回答