我一直想知道如何处理应用程序中的文件。假设我们有一个Object,其中包含有关像UUID这样的文件的几个数据以及对磁盘上文件的引用。
即使此Object是不可变的,也可能存在副作用,例如文件将被应用程序的一部分删除但另一个不知道它,使Object无法使用。
我可以使用这种情况下方便的模式吗?或者每次使用File引用实际指向现有文件的Object时,是否必须仔细检查?这可能是唯一的解决方案,因为文件可以从应用程序外部删除,但可能会使应用程序处于难以处理的状态。
另一方面存在问题:谁负责删除文件?由于Object可能是一个普通的值对象,它可能被系统的其他部分引用,代码的任何部分都不能删除文件以进行清理,以避免副作用......
但可能存在一种模式或政策可用于在这种情况下简化处理。
答案 0 :(得分:1)
您似乎有两种情况需要处理:
1)。您使用的资源受外部删除,陈旧和不可用的影响。任何外部资源都是如此,例如数据库,远程服务器和文件。所以很明显你需要处理异常处理,而且你已经有了这个问题......但是还有更多内容,请看下一个案例......
2)。您的应用程序的几个部分想要使用相同的资源,我们希望调解它们的使用,防止它们相互干扰。
为此,有两种可能性:resoruce本身具有某种中介(例如文件锁)并且您可以利用它。或者你需要对它进行监管,而这正是Jean-Lou所说的,代理人可以参与其中。现在我们可能无法强制使用代理,如果有人编写代码绕过代理并直接转到文件,那么我们就没有保护 - 这就像一些外力破坏一样你的资源。假设我们有合作,我们可以在代理中加入大量的聪明才智:
A)。统计用户,因此警方删除 B)。计算用户并在最后一个离开时自动删除。 C)。如果创建昂贵的代理,请汇集代理。 d)。如果我们得到一个例外,删除或标记所有现在陈旧的代理 E)。发现两个不同的文件名引用同一个文件并联合起警。
答案 1 :(得分:0)
这就是为什么许多语言都有例外。
如果在您的程序之外使真正的操作系统级文件无效,则您的File
对象将无效并将引发异常。
这是标准方法:例外。
答案 2 :(得分:0)
1)在这种情况下,您可能需要考虑使用一些状态信息来处理句柄。
2)可能更合适的是使用异常处理。
答案 3 :(得分:0)
在对文件执行任何操作之前,应始终仔细检查文件是否存在。无论您的应用程序有多好,总会有人在那里做一些您不会期望的事情,特别是在您的应用程序之外工作时。一行简单的代码可以是工作应用程序和失败的应用程序之间的区别。
检查文件是否存在,添加例外。最佳方式。