(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