在Clean Architecture中结合使用案例/交互者

10

我正在开发一款基于Uncle's Bob Clean Architecture的Android应用程序,目前已经成功实现了许多我的UseCases/ Interactors

我有以下用例:

搜索房间

  • 主要成功场景

    1. 系统根据给定参数搜索房间
    2. 系统将用户加入房间
  • 扩展

    1. 未找到房间

      a) 系统根据给定参数创建新房间

      b) 系统将用户加入房间

那么,我应该创建一个单一的互动器(SearchOrCreateRoomAndJoin),还是创建三个互动器(SearchRoom、CreateRoom和JoinRoom),并根据我的用例描述进行组合?

例如:

 Room room = searchRoom.execute(roomOptions)

 if(room != null){
 
     joinRoom.execute(room)

 }else{

     Room room = createRoom.execute(roomOptions)
     
     joinRoom.execute(room)
}

7
我越研究这个话题,就越认为软件是一门艺术而非精确科学...你找到答案了吗? - Rodrigo Ruiz
@regmoraes 你的第二个方案是最好的。原因是:1.未来可能会有一些额外的限制,比如国家、语言或用户类型,这时它会很有帮助;2.同时,SearchRoom、CreateRoom和JoinRoom也可以在其他屏幕上使用(可重用性)。参考:链接 原始时间轴用例幻灯片。 - Rajesh
2
嘿,需要一些澄清。根据Clean Architecture,只有Presenter可以执行Interactor,还是一个Interactor可以执行另一个Interactor? - Chris Rohit Brendan
2个回答

8

我认为,你应该开发三个交互器以遵守单一职责原则。这样做可以提高代码的可维护性和重用性,因为你可以在其他场景中单独使用这些交互器。


耶!编写这三个交互器是一个不错的开始,但在使用分层架构时应避免“水平依赖”!如果此代码位于“表示层”,那么这很好,但取决于多个用例并不好!我们可以滥用“命令”和“事件”的好处,并将这些用例彼此解耦(以及与演示者解耦)!我们的“入口点”用例只需调度“命令”!“命令处理程序”将调用所需的用例,而不会耦合您的应用程序服务。 - gbrennon

0

将使用案例命名为JoinRoom(这里只需要一个使用案例)

class JoinRoomUseCase( searchRepository : searchRoomRepository,
 createRoomRepository : CreateRoomRepository,
 joinRoomRepository : JoinRoomRepository){

            fun execute(param:Param){
                      if(searchRepository.findRoom){
                          joinRoomRepository.join()
                      }else{
                          val room = createRoomRepository.create()
                          room.join()
                      }
            }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接