2

让我们举个例子。让我们考虑一个具有检索员工功能的公司实体 - getEmployees()。一家公司可能有很多员工,因此在加载公司时不会加载员工。但是,一旦加载了员工,它们就会保存在缓存中,并在下次调用时立即检索。

现在我想在列表视图 - GUI 中显示员工列表。

我想提供一个“加载”指示,而员工是从互联网加载的。

但是,当从缓存中加载(非常快)时,显示“加载”指示器并立即删除它会很烦人。所以,当已经加载时,我根本不想显示“加载”指示器。

你将如何解决这个设计问题?你会添加一个方法getCachedEmployees()吗?也许isEmployeesCached()?也许将方法更改为getEmployees(boolean cache)?

我不喜欢上面的任何一个,因为不是封装缓存,而是强调缓存——从而使软件复杂化。

还有其他想法吗?

4

1 回答 1

2

我假设您的 GUI 和代码用于显示和管理与应用程序逻辑和数据分离的 GUI 元素。

我知道,如果 GUI 中的某些操作触发应用程序逻辑来加载员工,您只想调用 getEmployees() 方法。您的 GUI 不应控制数据是从缓存还是从 Internet 加载。但是您需要 GUI 中的逻辑来决定是否需要显示加载指示。

我能想到的最好的解决方案是你的 GUI 有类似计时器的东西——你调用 getEmployees() 方法,等待 500 毫秒,如果数据已经返回,你直接显示它们。如果到目前为止没有返回数据,您需要显示加载指示器。您需要在这里进行异步调用和回调,因此您可能希望在这里有一个单独的类来进行同步,但这可能是值得的。

我在 .NET/C# 中实现了类似的东西,如果特殊的其他条件也为真,则仅在 500 毫秒的等待时间后触发操作。使用该应用程序时,用户会发现 GUI 的反应有一点延迟,但不会影响您的整体观感。

顺便说一句,我喜欢只向您的 GUI 显示一个 getEmployees() 方法的方法。通过这种方式,您可以确保您在 GUI 和应用程序逻辑之间有严格的分离......

于 2012-08-29T14:44:54.933 回答