4

我需要在 iOS 应用程序中实现拉取刷新,我遇到了这个问题,我不知道如何使用 DDD 的最佳实践来解决这个问题。

表示层有一个刷新列表的事件,这需要更新结果丢弃缓存并从后端获取元素。

在域层中,我的用例与存储库通信,但是,由于缓存是一个实现细节,存储库接口没有公开“cleanCache”方法,因此没有干净的方法可以从用例刷新缓存。这或多或少是我拥有的文件结构

领域

  • 获取所有待办事项用例
  • TodosRepository(接口)

基础设施

  • InMemoryTodosRepository(缓存)
  • RemoteTodosRepository (api)
  • InMemoryWithRemoteTodosRepository(组合缓存和 api)

应用

  • 工厂

介绍

  • UI(与交互界面对话)
4

2 回答 2

1

由于它似乎是特定于用例的,何时可以使用缓存以及何时需要获取远程资源,所以使用哪个存储库最适合应用程序层的决定。

例如,您可以使用一个工厂,它在运行时为应用程序用例提供具体的存储库实现,但仅在编译时仍依赖于存储库接口。

或者您使用相同的方法创建另一个存储库接口,并将此存储库接口显式绑定到应该使用缓存的具体用例。

于 2020-12-04T09:04:38.673 回答
0

UI 调用执行用例的控制器。控制器负责识别用户交互并将其转换为对用例的适当调用。因此,控制器必须识别拉动刷新并创建一个新用例并将其传递给“未缓存”存储库。

您的控制器代码应该包含类似这样的内容

 TodosRepository repository;

 if(isPullToRefresh()){
    repository = getRemoteTodosRepository(); 
 } else {
    repository = getInMemoryTodosRepository();
 }

 GetAllTodosUseCase usecase = new GetAllTodosUseCase(repository);
 
 List<???> todos = usecase.getTodos();
于 2020-12-05T05:05:44.953 回答