Domain driven design 在域驱动设计应用程序中拉入刷新
我需要在iOS应用程序中实现pull-to-refresh,我遇到了这个问题,我不知道如何用DDD的最佳实践来解决这个问题 表示层有一个事件来刷新列表,这需要更新结果,丢弃缓存并从后端获取元素 在域层,我的用例与存储库对话,但是,由于缓存是一个实现细节,存储库接口不公开“cleanCache”方法,因此没有从用例刷新缓存的干净方法。 这或多或少是我的文件结构 领域Domain driven design 在域驱动设计应用程序中拉入刷新,domain-driven-design,pull-to-refresh,clean-architecture,cache-invalidation,Domain Driven Design,Pull To Refresh,Clean Architecture,Cache Invalidation,我需要在iOS应用程序中实现pull-to-refresh,我遇到了这个问题,我不知道如何用DDD的最佳实践来解决这个问题 表示层有一个事件来刷新列表,这需要更新结果,丢弃缓存并从后端获取元素 在域层,我的用例与存储库对话,但是,由于缓存是一个实现细节,存储库接口不公开“cleanCache”方法,因此没有从用例刷新缓存的干净方法。 这或多或少是我的文件结构 领域 GetAllTodosUseCase TodosRepository(接口) 基础设施 InMemoryTodosReposi
- GetAllTodosUseCase
- TodosRepository(接口)
- InMemoryTodosRepository(缓存)
- RemoteTodosRepository(api)
- InMemoryWithRemoteTodosRepository(由缓存和api组成)
- 工厂
- UI(与交互接口对话)
或者使用相同的方法创建另一个存储库接口,并将此存储库接口显式绑定到应使用缓存的具体用例。UI调用执行该用例的控制器。控制器负责识别用户交互并将其转换为适当的用例调用。因此,控制器必须识别刷新的拉动,只需创建一个新用例,并将其传递给“未缓存”存储库 控制器代码应该包含如下内容
TodosRepository repository;
if(isPullToRefresh()){
repository = getRemoteTodosRepository();
} else {
repository = getInMemoryTodosRepository();
}
GetAllTodosUseCase usecase = new GetAllTodosUseCase(repository);
List<???> todos = usecase.getTodos();
todos存储库;
if(isPullToRefresh()){
repository=getRemoteTodosRepository();
}否则{
repository=getInMemoryTosRepository();
}
GetAllToDouseCase usecase=新的GetAllToDouseCase(存储库);
List todos=usecase.getTodos();
Hm。。我认为这里有两个用例可能是正确的。。因为它们实际上是两个不同的用例,一个是获取TODO,另一个是刷新该用例中的TODO,它们可能都调用相同的存储库方法,唯一的区别是应用层决定在这些不同的用例上注入哪个存储库。我认为在用例中包含这些if用例和表示层没有多大意义。我认为有两个用例,一个用于获取全部,另一个用于刷新,这样会更有意义