0

我正在开发一个用于搜索机票的客户端应用程序。我从服务器获得了带有搜索结果的 JSON,我应该将此结果表达给客户端。

假设我有一个Fare,AirlineCompanyAviaTicketSearchResult对象。AviaTicketSearchResult应包含AirlineCompany对象列表。每个都AirlineCompany应该包含Fares。我猜这是一个聚合根AviaTicketSearchResultAirlineCompany因为我有级联删除的规则,当我删除AirlineCompany它时删除所有航空公司公司的票价与AviaTicketSearchResult.

Fare1) 可以在聚合根 ( AirlineCompany)中包含 s 列表吗?

另一个问题是我应该对Fares inside有过滤能力AirlineCompany。每个票价都有一个行程,每个行程都有一个变体列表 ( ItineraryVariant)(不同的航段、旅行等)。当我接受过滤器时,我应该更新我的AirlineCompany并删除不必要Fare的 s 或删除不必要的ItineraryVariant内部混凝土Fare

2)如何应用过滤能力?

我假设我应该将 Fare 表示为 VO 并在每次应用过滤器时从原始数据 (json) 重新创建 Fare 对象,然后在使用过滤后的 AirlineCompany 更新 AviaTicketSearchResult 之后将其添加到 AirlineCompany。

4

2 回答 2

4

我认为领域驱动设计在这里并不合适。据我所知,您只是在谈论一些用于 UI 的 DTO 以及一些过滤它们的方法。

当您试图掌握(和建模)复杂行为时,领域驱动设计会派上用场。视图模型或 DTO 应该尽可能简单。大多数时候,不需要复杂且耗时的建模工作。

或者,正如 Eric Evans 所说:

专注于核心领域

于 2012-12-20T11:33:59.260 回答
1

1) 是否可以在聚合根 (AirlineCompany) 中包含票价列表?

是的,特别是如果 AirlineCompany 确实是您的聚合根,可能就是这种情况。从您的问题中,我认为您可能会从更多地了解问题域中受益。AirlineCompany 真的应该是聚合根还是只是客户的名称?也许 Fare 真的应该是聚合根,而 AirlineCompany 应该只是 Fare 上的字符串属性。注意不要过度建模并专注于问题域。如果您的客户是购买机票的人,我怀疑他们是否像关注票价和行程一样关注 AirlineCompany。在对问题域进行建模时,应该暂时忘记 JSON 和 VO 之类的东西。

2)如何应用过滤能力?

根据过滤器参数过滤结果应该是您的存储库或域服务的责任。这取决于您的实施。但是,通常,如果客户端正在与服务器通信,则服务器将运行存储库应用程序代码,根据您的实现,该代码可以将其传递到 db 服务器,从而使您获得最佳性能,这样您就不会通过周围的无关数据。

于 2012-12-20T15:51:06.593 回答