2012-10-10 102 views
0

下面是我们生产的这种网站常见的一项任务,但我不确定设计这些课程的最佳方式。对于敏捷开发我相当陌生,我想确保我避免惹起不良习惯。对象关联:哪个对象应该引用其他对象?

我正在一个网站上为每个国家都包含一个页面。 CMS允许用户更改每个国家/地区页面的内容(标题,副本等)。我们被问到是否可以由CMS管理时间表(可下载的PDF)。

假设我有一个国家类和时间表类什么是最好的(从灵动视角)?

  1. 创建全国一流的性能:

public List<Timetable> Timetables

  1. 创建时间表类的属性:

public Country AssignedCountry

当然,虽然,有什么最好的是由信息的使用方式决定的。如前所述,每个国家都会显示该国的时间表。但是,还有一个时间表页面,列出所有时间表,并且最好显示他们的国家。

使用选项1意味着国家页面可以很容易地列出它的时间表,但时间表页面上的每个时间表都没有提及其分配的国家。

选项2是指时间表页面更容易,因为我可以列出所有时间表,并显示相关的国家。然而,国家页面更尴尬,因为每个国家都不知道它的时间表,所以需要其他一些方法来获得相关的时间表。

选项3? 由于时间表不是一个国家的财产,同样,国家不是PDF文件的属性,我想我可能会更好地创建一个静态工具类(工厂?),其中包含我可以调用的方法给我我需要的信息 - 按时间表按国家或国家列出时间表。数据库中的国家/时间表关系是多对多的,所以这似乎是更合乎逻辑的解决方案。

我们的客户通常希望向CMS添加更多功能,通常决定事情的相关性并不是问题,但这种事情会让我感到困扰。

我是不是过于复杂?有一个简单的,经验法则或我失踪的技术?

+1

选项3与存储库类... –

+1

恕我直言:敏捷!= YAGNI –

+1

为什么你一直在你的问题中重复“敏捷”?对象设计与敏捷开发方法无关。 –

回答

0

它归结为几个简单的问题...

  • 确实每个时间表只适用于一个国家?
  • 每个时间表是否必须与一个国家相关联,还是可以自由浮动?

如果每个时间表必须与一个国家相关联,我会试图将国家id放入时间表对象中,并从sql中选择一个连接进行显示。如果答案不同,你应该考虑这些对象的完整用例,并且应该为你定义你的答案。

+0

我想时间表将分配给多个国家(德国到法国可能会显示在法国和德国页面上)。 – Jag

+0

我也希望客户想要管理没有分配并因此可自由浮动的时间表。 (顺便说一下,我必须通过客户经理来获取客户的信息,他们不知道他们想要什么,因此需要保持它的灵活性,可扩展性和强大性)。 – Jag

+0

然后它听起来像选项2是您的默认开始位置。选项2不起作用,因为您只能选择分配一个国家。然而,你不应该排除denormalising到第三个“CountryTimetable”表来处理关联。这会以更复杂的dtaa读/写逻辑为代价,给你更多的灵活性。 – ZombieSheep

0

我同意选项1和选项2不适合您。 也许最好的选择是使用数据库并用第三课阅读你需要的东西。

当然,您也可以一起使用选项1和2。

在国家你知道要显示什么时间表,在时间表你知道什么国家可以证明这一点。

你也可以强制使用这两个选项中的一个,但是这样做至少需要列表中的国家列表,当你有一个时间表,你可以循环所有的国家询问“isValidTimetable”,然后你有所有能够显示时间表的国家。

但是,这一切取决于你有多少物体,你不告诉我们的东西。

+0

结合选项1和2看起来合乎逻辑。如果一个多对多的表可以通过时间表查询国家或国家的时间表,那么让一些静态对象也做同样的事情会很酷。这意味着国家和时间表课程是分开的,但需要额外的代码来处理两者之间的关系(如果“更好”向前发展,我不会有任何疑问)。 – Jag

+0

都可以做。我们不知道我们在谈论多少物体。 – Gianmarco

+0

在这种特殊情况下只有两个:Country class和Timetable class。很显然,尽管我可以添加更多,但如果需要的话,我不想预先考虑将来可能需要的东西(YAGNI :)),但需要保持足够的模块以在将来有必要扩展。 – Jag