2

我正在尝试为乘飞机旅行的乘客开发数据/对象模型。
用一句话来说:

we have customers who make reservations to take trips.

我很难确定是否应该有两个对象/模型:客户和旅行或三个:客户、预订和旅行。

我相信我的困惑源于这样一个事实,即随着时间的推移,预订会变成旅行。这个事实使我认为最好只有两个模型:客户和旅行。在这种情况下,Trip 将属于客户,并具有以下示例属性:customer_id、reservation_number、destination、travel_date 等。

我对这种方法的问题是预订更改并被取消,我有点不愿意在旅行日期、目的地或取消方面进行大量更改来混淆 Trip 模型。

更新:关于旅行(航班)的更多信息条件。航空公司可以取消旅行/航班,客户可以在旅行/航班时间之前取消天气和预订。

也许我缺少的是将预订转换为旅行(机票?)的第四个模型。

所以我的问题。

  1. 问题是我用首选的设计模式描述了特定类别的数据模型,如果是,那么模式和解决方案是什么。

  2. 其他比我更有经验的人如何解决这个问题。

我碰巧使用 ruby​​ on rails / activerecord 进行开发,但这个问题适用于任何开发框架。

感谢您的输入。

4

4 回答 4

1

在这样的系统中,通常最好在Reservation实体和Trip实体之间有一个明确的分隔。回答这些问题可以帮助您设计系统:

  • 旅行是否可以在任何预订之前存在(例如在目录中)?
  • 一个旅行可以由多个预订共享吗?

如果你对这些问题回答“是”,你会想象这样的设计:

Trip UML 类图 http://app.genmymodel.com/engine/xaelis/trip.jpg

您可以使用此链接制作副本并调整模型。

于 2013-08-04T20:34:22.067 回答
1

问自己两个问题:

  1. 关于旅行,你需要知道什么?你能为旅行做些什么?
  2. 如上预订

预订可能更明显:谁进行了预订(与客户的关联),何时进行,是否已支付/取消/无论什么。

行程不太清楚。旅行是否有组织的活动,例如开始/结束日期?每次旅行是否有最大容量(即最大预订数量?)。每次旅行都有价格吗?多人可以预订同一个行程吗?可以取消行程吗?取消旅行与取消预订有什么不同吗?如果旅行被取消,预订会怎样?

其次,如果/当预订“转变”为旅行时,您将如何描述会发生什么。你真的只是说客户带了旅行吗?如果它转换,您是否仍然关心您捕获的所有预订信息?

直觉说旅行和预订是不同的东西。也许“过渡”实际上是客户和旅行之间的缺失关系,它记录了客户实际旅行的时间。

这将取决于是否清楚上述问题。

hth。

于 2013-08-05T13:47:51.430 回答
1

似乎一个客户 has_many trips 和一个 trip has_many customers 这是一个多对多关系。

models/customer.rb
class Customer < ActiveRecord::Base
  has_many :reservations
  has_many :trips, :through => :reservations
end

models/trip.rb
class Trip < ActiveRecord::Base
  has_many :reservations
  has_many :customers, :through => :reservations
end

models/reservation.rb
class Reservation < ActiveRecord::Base
  belongs_to :customer
  belongs_to :trip
end

预订和门票对我来说似乎是一回事,所以我认为您不需要单独的Ticket模型。

于 2013-08-04T15:42:52.943 回答
1

我强烈建议先创建一个域模型,然后一起忽略实现。当您完成域模型并准备开始开发时,持久性机制和编程环境将变得相关。

于 2013-08-04T15:51:12.090 回答