(Cross-post programmers.stackexchange) 我想第一次使用SOLID原則。我正在重新考慮一個存儲文件信息並使文件操作可用的File類。 然後,該類將繼承到特定的文件類型,以爲該類型提供可用的方法。我的第一次SOLID重新分解
我已經開始使用SRP,並嘗試使用抽象類FileWriter
和FileReader
來讀取和寫入不同的資源。一些包括:
- 文件系統
- 流
- 數據庫
- 其他未定義的服務(
SOAP
,REST
??)。
我很高興地說文件數據是由字節數組處理的,但我不確定如何處理資源的文件路徑/ uid。
這是我有...
public abstract class EFileReader
{
event EventHandler<IEFileEventArgs> ReadThreadedComplete;
public abstract byte[] Read(object source);
public abstract async Task<byte[]> ReadAsync(object source);
public abstract void ReadThreaded(object source);
protected virtual void OnFileRead(IEFileEventArgs e)
{
EventHandler<IEFileEventArgs> handler = this.ReadThreadedComplete;
if (handler != null)
{
handler(this, e);
}
}
}
我能投的對象爲在實施所需的類型。 或者它可能是一種通用類型,它在實現中以某種方式指定。
public abstract class EFileReader<T>
{
event EventHandler<IEFileEventArgs> ReadThreadedComplete;
public abstract byte[] Read(T source);
public abstract async Task<byte[]> ReadAsync(T source);
public abstract void ReadThreaded(T source);
protected virtual void OnFileRead(IEFileEventArgs e)
{
EventHandler<IEFileEventArgs> handler = this.ReadThreadedComplete;
if (handler != null)
{
handler(this, e);
}
}
}
我可以在實現中定義或約束T
。
......或者也許有一些我可以編寫的源代碼抽象以適應各種可能的用例。 我想我可以讓一個抽象的FileResource
類公開一個流。
解決此問題的最佳方法是什麼?
我會看看我在SOLID。你可能有一個通用的接口,但是有些東西比如說一個文件路徑與說db連接非常不同。 – Kirby 2014-11-04 00:15:53
謝謝@Kirby,那是我看到的問題。不同的資源不一定共享任何共同點。我能想到的一個例子可能是使用文件數據的多部分表單提交。有了@ NSFW的建議,多部分的例子可以用'FileStorage' implmentation覆蓋,但它不需要'FileIdentifier'。 – Ablue 2014-11-04 01:29:48