8
暴露异步功能的接口是泄漏抽象吗?
我正在阅读《依赖注入原理,实践和模式》一书,并了解了泄漏抽象的概念,该概念在本书中有很好的描述。 这些天来,我正在使用依赖注入重构C#代码库,以便使用异步调用而不是阻塞调用。这样做时,我正在考虑一些接口,这些接口在我的代码库中表示抽象,并且需要重新设计以便可以使用异步调用。 例如,考虑以下接口,它代表应用程序用户的存储库: public interface IUserRepository { Task<IEnumerable<User>> GetAllAsync(); } 根据书中的定义,泄漏抽象是设计时考虑到特定实现的抽象,因此某些实现详细说明了抽象本身的“泄漏”。 我的问题如下:我们可以考虑以异步方式设计的接口(例如IUserRepository)作为泄漏抽象的示例吗? 当然,并非所有可能的实现都与异步有关:只有进程外实现(例如SQL实现)才需要同步,但是内存中存储库不需要异步(实际上实现接口的内存中版本可能更多)如果接口公开异步方法很困难,例如,您可能必须在方法实现中返回类似Task.CompletedTask或Task.FromResult(users)之类的东西。 您如何看待?