快速业务通道

精通Grails: 使用Ajax实现多对多关系 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
这部图书之间的关系。或 许应该创建一个一级类 Contract 来更好地表示 Book 与 Author 之间的关系。

简单来讲,这意味着一个 m:m 关系实际上就是两个 1:m 关系。如果两个类有可能共享一个 m:m 关系 ,那么您应该更深入地研究一下,确定出具有两个 1:m 关系的第三个类并显式地定义它。

模拟航空公司和机场

现在回到 trip-planner 应用程序,首先回顾一下域模型,并查看有没有潜在的 m:m 关系。在 第一 篇文章 中,我创建了一个 Trip 类,如清单 1 所示:

清单 1. Trip 类

class Trip {   String name   String city   Date startDate   Date endDate }

在 第二篇文章 中,我添加了一个 Airline 类(如清单 2 所示),以演示一个简单的 1:m 关系:

清单 2. Airline 类

class Airline {   static hasMany = [trip:Trip]   String name   String frequentFlier }

精通Grails: 使用Ajax实现多对多关系(2)

时间:2011-08-02 IBM Scott Davis

这些类在当时具有其特定的用途 — 用于说明某一点的简单占位符 — 但是它们并不是一个严格的域 模型。现在对最初的类进行改进,并添加一些更加健壮的内容。

我使用以前的方法创建了 Trip 类,因为当时看起来还不错。我当时说 “我正计划到芝加哥旅行” 或 “我计划在下个月 15 号到 20 号去纽约”。city、startDate 和 endDate 这样的字段似乎是 Trip 的自然属性。但是,现在看来,Trip 可能还会涉及到更多因素。

我住在科罗拉多州丹佛市 — 美国联合航空公司的中心城市。这意味着我通常可以直接飞到最终的目 的地,但有时候需要中转多次。有时候一次旅行涉及到多个城市:“我正飞往波士顿,星期一到星期五我 要在那里教课。当我在东海岸时,我需要在华盛顿附近参加星期六的一场会议。我将在星期天下午飞回来 ”。即使我幸运地找到了到一个特定城市的直达航班,而且我不会飞到其他城市,我的旅行涉及到的航班 仍然不止一次 — 飞往目的地的航班和返回的航班。一个 Trip 可以包含多个 Flight。清单 3 定义 Trip 与 Flight 之间的关系:

清单 3. Trip 与 Flight 之间的 1:m 关系

class Trip{   static hasMany = [flights:Flight]   String name } class Flight{   static belongsTo = Trip   String flightNumber   Date departureDate   Date arrivalDate }

请记住,使用 belongsTo 字段设置关系意味着,如果删除 Trip,也会删除所有相关的 Flight。如果 我为空中交通管制员构建一个系统,我可能希望制定不同的架构决策。或者如果我尝试为同乘一个航班的 多位乘客构建一个系统(一个 Flight 可以有多个 Passengers,一个 Passenger 也可以有多个 Flights ),那么将一个航班绑定到一个特定的乘客可能是一个问题。但是我不会尝试为数百万乘客模拟全世界每 天运行的数千次航班。在我的简单例子中,一个 Flight 的所有任务就是进一步描述一个 Trip。如果对 于我来说,某个 Trip 不再重要,那么每个对应的 Flight 也是如此。

现在,我应该使用 Airline 类做什么呢?一个 Trip 可能涉及到多个不同的 Airline,而一个 Airline 又可以用于多个不同的 Trip。这两个类之间是一种明确的 m:m 关系,但是 Flight 似乎是添加 Airline 的恰当位置,如清单 4 所示。一个 Airline 可以有多个 Flight,而一个 Flight 只能有一个 Airline。

清单 4. 将 Airline 与 Flight 关联

class Airline{   static hasMany = [flights:Flight]   String name   String iata   String frequentFlier } class Flight{   static belongsTo = [trip:Trip, airline:Airline]   String flightNumber   Date departureDate   Date arrivalDa

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号