我正在开发一个搜索机票的客户端应用程序。我从服务器获得了带有搜索结果的JSON,我应该将此结果表示给客户端。
假设我有一个Fare
,AirlineCompany
和AviaTicketSearchResult
个对象。 AviaTicketSearchResult
应包含AirlineCompany
个对象的列表。每个AirlineCompany
都应包含Fare
个。我猜AviaTicketSearchResult
和AirlineCompany
是聚合根,因为我有级联删除规则,当我删除AirlineCompany
时删除所有航空公司的票价与{{1}相同是有意义的}}
1)在聚合根(AviaTicketSearchResult
)中包含Fare
列表是否可以?
另一个问题是我应该在AirlineCompany
内为Fare
设置过滤功能。每个票价都有一个行程,每个行程都有一个变种列表(AirlineCompany
)(不同的腿,旅行等)。当我接受过滤器时,我应该更新ItineraryVariant
并删除不必要的AirlineCompany
或删除不必要的Fare
内部具体ItineraryVariant
。
2)如何应用过滤能力?
我假设我应该将Fare表示为VO并在每次应用过滤器时从原始数据(json)重新创建Fare对象,然后在使用过滤后的AirlineCompany更新AviaTicketSearchResult之后将其添加到AirlineCompany。
答案 0 :(得分:4)
我认为Domain-Driven Design不适合这里。据我所知,你只是在谈论用户界面的几个DTO以及一些过滤它们的方法。
当您尝试掌握(和模型化)复杂行为时,域驱动设计会派上用场。视图模型或DTO应尽可能简单。大多数情况下,不需要复杂且耗时的建模工作。
或者,正如Eric Evans所说:
专注于核心领域
答案 1 :(得分:1)
1)在聚合根目录中包含票价列表是否可以 (AirlineCompany)?
是的,特别是如果AirlineCompany真的是你的聚合根,可能就是这种情况。从您的问题来看,我认为您可以从了解有关问题域的更多信息中获益。 AirlineCompany真的应该是聚合根,还是只是客户的名字?也许Fare应该是聚合根,而AirlineCompany应该只是Fare上的字符串属性。注意不要过度建模并专注于问题域。如果您的客户是购买门票的人,我怀疑他们是关注AirlineCompany,因为他们是票价和行程。在对问题域进行建模时,应暂时忘记JSON和VO之类的内容。
2)如何应用过滤能力?
您的存储库或域服务应负责根据过滤器参数过滤结果。实现这一点取决于您。但是,通常,如果客户端正在与服务器通信,则服务器将运行存储库应用程序代码,该代码根据您的实现可以将其传递到数据库服务器,从而允许您实现最佳性能,以便您不会通过周围的无关数据。