好問題,特別是你想避免循環依賴,而不是讓它工作。但是考慮一下循環依賴並不是不好的做法。在你的情況下,我合理地利用兩個班級。
因此,許多語言允許您定義類的原型。我猜你正在使用python,儘管在C++中看起來是這樣的。
class Timestamp;
現在,您可以定義Exception
類,並使用Timestamp
對象作爲成員。當然你不能使用它的方法,因爲它們還沒有定義。但是,如果Timestamp
構造函數將其實例初始化爲當前時間,則可能不需要訪問Exception
類中的成員。
class Exception
{
// ...
Timestamp timestamp;
};
稍後,您將定義整個Timestamp
類。
class Timestamp
{
Timestamp()
{
// initialize to current time
}
};
但請注意,將兩個班這種方式使他們非常依賴。沒有其他人就不能使用他們中的一個。
因此,您可能想放棄使用Timestamp
類作爲例外的想法,以存儲它們發生的時間。我猜想獲取實際的時間戳只是在大多數操作系統上佔用一些線。所以,如果你不需要整個Timestamp
類,我建議複製代碼以獲取當前時間。例如,如果你想在日誌文件中寫入異常和他們的時間,這可能是最實際的方法。
其實我不確定他是否在談論這種例外。如果他是,你的回答肯定比我的更有價值。 – danijar 2013-04-04 16:16:15
我認爲他指的是異常 - 例外 - 「但是,工作時間戳錯誤可能發生,所以引發異常。」也就是說,遇到異常行爲(例如失敗)時會引發異常。無論如何,這正是作者讓我們理解的。 – 2013-04-04 16:18:06
我覺得你的建議非常好。是的,我使用異常的方式只是...異常。它們被拋出並可能被捕獲(或者可能不被捕獲)。 所以實際上沒有Exception Logger,但是如果有一個異常被捕獲,就有一種方法來記錄它。但要做到這一點,它將轉換成一條消息,然後從調試管理器記錄。 所以異常應該知道它何時被拋出。 或者你認爲最好不要拋出異常,而是讓異常管理器拋出異常,像工廠一樣使用它? – M0rgenstern 2013-04-04 21:54:35