2009-09-17 56 views
1

我一直想知道如何處理應用程序中的文件。假設我們有一個對象,其中包含有關文件的多個數據,如UUID和對磁盤上文件的引用。如何在應用程序中正確處理對文件的引用?

即使此對象是不可變的,也可能有副作用,例如文件將被應用程序的一部分刪除,但其他人不知道它,導致對象無法使用。

是否有一個方便的模式,我可以用於這種情況?或者每次使用文件引用實際指向現有文件的對象時,都必須仔細檢查?這可能是唯一的解決方案,因爲文件可以從應用程序外部刪除,但可能會使應用程序處於難以處理的狀態。

問題存在另一種方式:誰負責刪除文件?由於對象可能是一個普通的值對象,它可能會被系統的其他部分引用,代碼中的任何部分都不能刪除文件以進行清理,以避免副作用...

但是可能存在模式或政策可以用來緩解這種情況下的處理。

回答

1

您似乎有兩種情況處理:

1)。您使用的資源受到外部移除,陳舊性和不可用性的影響。對於任何外部資源(例如數據庫,遠程服務器和文件)來說都是如此。所以顯然你需要異常處理,並且你已經包含了......但是還有一點,請參閱下一個案例...

2)。您應用程序的多個部分想要使用相同的資源,我們希望調解它們的用法,防止它們互相干擾。

爲此,有兩種可能性:resoruce本身具有某種中介(例如文件鎖),並利用該中介。或者,你需要警察,這是(代表讓 - 婁說)代理進場的地方。現在我們可能不能使用代理,如果有人寫代碼繞過代理並直接進入文件,那麼我們沒有任何保護措施 - 這就像一些外部力量破壞您的資源一樣。假設我們有合作關係,我們可以在代理中投入大量的聰明才智:

a)。計數用戶,因此警方刪除 b)。對用戶進行計數,並在最後一個離開時自動刪除。 c)。如果創建代價昂貴,請將代理池集中起來。 d)。如果我們發現異常,請刪除或標記所有現在不存在的代理 e)。發現兩個不同的文件名是指共同的文件和警察。

0

這就是爲什麼許多語言都有例外。

如果真正的操作系統級別的文件在程序外部無效,那麼您的File對象將不起作用並引發異常。

這是標準方法:例外。

+0

我知道如何處理這些情況,我正在尋找更多的設計方法來分配系統內的文件引用。很難解釋什麼時候英語不是你的母語。 : - / – Malax 2009-09-17 15:05:58

0

1)在這種情況下,您可能需要考慮使用某個狀態信息的句柄代理。

2)可能更合適的是使用異常處理。

0

在做任何事情之前,您應該經常仔細檢查文件是否存在。無論你的應用程序有多好,總會有人在那裏做一些你不會期望的事情,特別是當你在應用程序之外工作時。簡單的代碼行可以是工作應用程序和失敗應用程序之間的區別。

檢查文件是否存在,添加例外。最好的方式去。

相關問題