【发布时间】:2019-05-07 15:10:49
【问题描述】:
我们有一个使用 MVVM 模式和 DDD 的 WPF 桌面应用程序(好吧,假设至少我的模型类存储由取自现实世界的实体命名的数据)。 APP 通过 REST API 使用多个微服务。它工作得很好。直到我们认为是时候使用一些外观作为后端部分来联合所有这些微服务并仅获取特定屏幕所需的数据。
但是。问题是,如何让他们生活在一起。
- 一方面,我们从graphql 动态返回数据。它
意味着,例如,如果我们在一个屏幕上有人员列表, 我们将要求此人的 ID、姓名、姓氏和角色。在
用于下拉人员的不同屏幕我们将请求相同的数据 但没有角色。 - 另一方面,我们有一个 Person 类,它具有一组静态字段 Name、Surname、Role 和 Id,这是人在“现实生活”中所拥有的
如果我们将相同的 Person 类与 graphql 一起使用,将数据从 JSON 转换 到模型 Person,两个屏幕都可以正常工作,但在后台一个不需要角色的屏幕会'不要从 graphQL 请求它。我们会遇到这样一种情况,模型类 Person 将具有字段 Role 但它只是空的(我相信这是一种气味。至少我不觉得维护这样的代码很容易. 开发者需要在屏幕上添加一些信息,打开模型,看到角色在那里,将字段绑定到屏幕上去喝咖啡。然后哎呀,有字段但没有分配数据 )。
我想到的两种变体是:
- 不使用模型和 DDD 并将数据直接映射到 ViewModel (个人感觉就像毁了我们之前的一切)。
- 或者我们将动态数据映射到我们现有的模型和不同屏幕的不同字段(例如同一类 Person)将是 空的(因为没有请求)。
也许有人已经使用过这样的组合。你如何使用它,有什么优缺点?
【问题讨论】:
-
您仍然可以将 DDD 值对象用于查询参数和响应字段。它适用于查询验证和构建/解析数据库查询。不过,DDD 实体更多的是关于突变而不是查询。查询(不仅仅是 GraphQL)更加多样化,虽然它们应该使用通用语言,但它仍然只是其中的一部分。
标签: wpf mvvm graphql domain-driven-design desktop-application