在Clean Architecture里面,Uncle Bob说我们要把相同原因、相同时间变化的模块放一起,不同原因不同时间变化的分开。除了传统的UI、逻辑、数据库这样的纵向划分以外,还有以用例为单位的横向划分。不同的用例,用该拥有自己的UI、逻辑、数据库等操作单元。那么用例的粒度究竟应该怎么划分合适呢?
一种是以功能为粒度。如一个在线考试功能,用户考试分为产生题目、显示当前题目、提交当前题目答案、查看考试结果等4个功能。可以分为4个用例。这样分的话用例似乎过于细了,而且一般有变化的话,这几个应该是同时变化的可能性挺大的。而且在这几个用例中,有一些类似的操作。
一种是以用户价值为粒度,如上所说,4个小的用例加一起,才构成一个完整用例:在线出题考试。把这四个作为一个用例,功能上比较内聚,不会说一个功能分散到多个地方。我个人比较倾向于这种划分。