2013-06-23 73 views
0

我有以下类在我的应用程序:如何使用嵌套复合对象?

  • User
  • Log
  • LogRecord

每个用户都拥有的日志列表,以及每个日志由多个日志记录。现在,由于日志记录应该在它所属的日志被删除时被删除,所以每个日志都是一个组合。当用户被删除时,用户拥有的日志也应该被删除。所以它也是一个复合材料。

这是否意味着用户需要添加一个方法来添加一个LogRecord对象?或者我可以从用户那里获得一个Log对象,然后添加/删除等日志记录,然后将日志传回给用户?

我的意思是,这是否意味着我不被允许在用户环境之外讨论Log和LogRecords?我对构图的定义以及如何完成这个问题感到非常困惑。

+0

当你说“复合”时,你是否在考虑如何UML关系“组合”? – clearwater

+0

从编程的角度来看,我会遵循OOD原则并将事物保持在本地,因此让Log类专门管理LogRecords。由于有多个日志,你想如何挑选特定的日志?引入封装日志管理的LogManager(因为有一天你可能想要合并或拆分日志)可能会更清洁(但也更多的工作)。你做什么应该取决于你的目标当然。 – clearwater

回答

1

我的意思是,这是否意味着我不被允许谈论Log和 LogRecords在用户环境之外?

如果要为真实乐曲建模,则在实例化User对象后(请参阅Implementation difference between Aggregation and Composition in Java),将无法访问Log和LogRecords。

但是,我认为你会想在这里模拟不同的东西。在实例化User对象后,您会希望创建LogRecord对象和潜在的Log对象。那么你将不得不将它作为一个聚合模型。

+0

嗯,所以作为父母同时创建时,构图只是正确的术语?否则,我不确定我是否理解,因为你可以在用户接受日志等参数的方法...但这是非常不切实际的,但这是我问的原因。 – LuckyLuke

+0

是的,我会理解它。没有父母,零件不能存在,所以它们必须同时创建。但是没有黑白的编程......很少有一种用例是你完全按照我的经验使用复合或聚合。 – Tom