java - 如何在应用程序中正确处理对文件的引用?

标签 java design-patterns file

我一直想知道如何处理应用程序中的文件。假设我们有一个对象,其中包含有关文件的多个数据,例如 UUID 以及对磁盘上文件的引用。

即使此对象是不可变的,也可能会出现副作用,例如文件将被应用程序的一部分删除,但其他应用程序并不知道,从而导致该对象无法使用。

对于这种情况,我可以使用方便的模式吗?或者每次使用该对象时是否都必须仔细检查文件引用实际上是否指向现有文件?这可能是唯一的解决方案,因为可以从应用程序外部删除文件,但可能会使应用程序处于难以处理的情况。

问题反过来也存在:谁负责删除文件?由于该对象可能是一个普通的值对象,它可能会被系统的其他部分引用,因此代码的任何部分都无法删除该文件以进行清理,以避免副作用...

但是可能有一种模式或策略可以用来简化这种情况下的处理。

最佳答案

您似乎有两种情况需要处理:

1).您正在使用的资源可能会被外部删除、过时和不可用。任何外部资源(例如数据库、远程服务器和文件)几乎都是这种情况。很明显,您需要异常处理,并且您已经涵盖了该内容...但是还有更多内容,请参阅下一个案例...

2).您的应用程序的多个部分想要使用相同的资源,我们希望协调它们的使用,防止它们相互干扰。

对此有两种可能性:资源本身具有某种中介(例如文件锁),并且您可以利用它。或者你需要对其进行监管,这就是代理发挥作用的地方(正如让-卢所说)。现在我们可能无法强制使用代理,如果有人编写代码绕过代理并直接访问文件,那么我们就没有保护 - 这就像某些外力破坏您的资源一样。假设我们进行合作,我们可以在代理中投入大量的聪明才智:

a).统计用户数量,从而警方删除 b).统计用户并在最后一个离开时自动删除。 C)。如果创建代理的成本很高,则池化代理。 d).如果我们遇到异常,请删除或标记所有现已过时的代理 e).发现两个不同的文件名引用同一个文件并联合检查。

关于java - 如何在应用程序中正确处理对文件的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1439431/

相关文章:

design-patterns - 命令设计模式 - Invoker 是可选的吗?

python - MySql 无法在同一目录中找到文件?

Java查找不那么具体的字符串

java - 何时为捕获的异常记录堆栈跟踪

Java 策略模式——我可以在 Context 类中委托(delegate)策略实例化吗?

java - 我有一个Jtable,其中的一列中有一个按钮,当我按下按钮时,我想访问第一列中的值

java - super 只能高一级吗?

java - 如何在 Java 中建模 Can-Be-A 关系?

php - $_FILE 上传大文件给出错误 1,即使 upload_max_size 大于文件大小

python - 如何对文件中的所有其他数字求和?