最近我在学习面向对象编程中的组合。在许多关于它的文章中,有一个 FileStore 类(或者你怎么称呼它)的例子,它实现了如下接口:
interface IStore
{
void Save(int id, string data);
string Read(int id);
}
FileStore 类实现了这个接口,一切都很好。它可以保存和读取文件。现在,教程文章经常说 FileStore 可以很容易地交换为,例如 SqlStore,因为它可以实现相同的接口。这样,客户端类可以存储到 SQL 而不是文件系统,只需注入 SqlStore 而不是 FileStore。听起来不错,但当我真正想到它时,我真的不知道如何实现它。数据库操作很适合异步完成。为了使用这个事实,我需要在 Read(int id) 方法中返回一个 Task 而不仅仅是字符串。Save(int id, string data) 也可以返回一个任务。考虑到这一点,我不能真正将 IStore 用于我的 SqlStore 类。
我看到的一种解决方案是使 IStore 像这样:
interface IStore
{
Task Save(int id, string data);
Task<string> Read(int id);
}
然后,我的 FileStore 类需要稍作更改,它将使用 Task.FromResult(...)。
这个解决方案对我来说似乎不方便,因为 FileStore 必须假装一些异步特性。
你会提出什么解决方案?我很好奇,因为在教程中一切听起来都很简单可行,但是当涉及到实际编程时,事情就变得复杂了。