我有一个Event类,它保存一个事件的开始和结束时间。每个Event对象都可以有许多关联的ChildEvent对象,表示父事件的每次重复。这些类中的每一个都需要根据它们的编辑方式采取不同的操作,例如
只删除一个事件:
删除活动及所有后续活动:
仅编辑一个事件:
编辑活动及所有后续活动:
目前我通过检查条件并采取适当行动来实现这一目标,但它开始变得混乱(还有其他相关行为的条件)。我很想知道更有经验的程序员会如何处理这个问题(我正在使用ruby)。有什么想法吗?
答案 0 :(得分:3)
听起来specification pattern封装你的逻辑
的情况答案 1 :(得分:0)
为什么不直接以双向链表的形式链接事件?
一个事件将有一个previous
和一个next
位置(如果链的第一个或最后一个,则为零)。
只删除一个事件(delete
):
previous
活动的next
位置设置为此活动的previous
位置next
活动的previous
位置设置为此活动的next
位置删除活动及所有后续活动(delete-all
):
next
活动的previous
个广告位设为nil next
活动next
为零仅编辑一个事件(edit
):
previous
活动的next
个广告位设置为此活动的previous
个广告位next
活动的previous
个广告位设置为此活动的next
个广告位编辑活动和所有后续活动(edit-all
):
next
事件的previous
位置设为nil next
活动next
为零答案 2 :(得分:0)
我建议尝试不同的对象模型。而不是Events
和ChildEvents
,您可以将其视为EventType
和Event
s。
EventType # Has many Events
---------
name
# ...
Event # Belongs to EventType
-----
event_id
start_time
end_time
# ...
然后您的编辑操作将大大简化。
查找上一个活动...
Event.find(:first, :conditions => [
'event_type_id = ? AND start_time > ?',
event.type.id,
event.start_time],
:order => 'ASC'
)
删除事件以及该类型的所有后续事件......
events_to_delete = Event.find(:all,
:conditions => [
'event_type_id = ? AND start_time >= ?',
event.event_type.id,
event.start_time
])
Event.destroy( all_events_to_delete.map { |event| event.id } )