使用 DDD 实现包



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

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

例如(摘自包 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

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

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

最新更新