很抱歉这个古怪的标题,我需要仔细解释,以澄清我的意思。
假设我有一个数据库(用作普通集合),其作用是保存一组对象并按需返回它们。例如,我有一个FooDatabase,其中包含Foo类型的对象。这些Foo对象是在FooDatabase的协调下从文件加载的。
现在,必须将其他信息存储在Foo对象中。此附加信息在文件中不可用,但它与每个Foo相关。从技术上讲,如果这些信息在每个Foo的责任范围内都是自我详细的,那么就没有真正的问题:每个Foo都会计算信息并将其存储在自身上。
不幸的是,我的情况更复杂:这些信息不仅取决于主题上的Foo,还取决于存储在数据库中的其他一些Foo对象。我有两种可能来解决这个问题:
您是否已经遇到过这个问题,这种情况的商定设计是什么?
答案 0 :(得分:0)
你所谓的数据库我看到的类似于Repository Pattern的东西将为操作提供一个接口,用于从底层数据存储查询给定的Foo。 Foo对象只是保存数据并提供检索数据的方法。根据我的经验,根据您需要相关Foo对象的频率,您有两个选项可供应用。
选项1:构建器
如果您需要它们,大部分时间都会使用Builder Pattern来处理这种情况。您有一个FooBuilder,它使用数据库提供的操作来查询数据库并在Foo对象上填充所需的数据。只要你需要一个特定的Foo,你就可以调用Builder,它可以生成一个完全填充的Foo供你使用。
选项2:延迟加载
如果您不经常需要相关的Foo数据,则可以实施延迟加载解决方案。这可以使用State Pattern完成。为了实现这一点,你在FooBuilder上有一个方法BuildUnfilledFoo,它只加载初始Foo并提供UnfilledState。 UnfilledState通过首先通过获取所需的其他Foos来替换自身,然后调用FilledState来执行操作,从而实现需要附加数据的方法。
以下是我对您提出的其他选项的看法:
将数据库本身传递给Foo对象
将计算此信息的责任委派给数据库