横向思维和纵向思维,这是一个比较有意思的东西,特别是处理一些复杂的业务的时候。
1. 场景一:校验器
场景:B端复杂接口。根据type创建不同类型的计划。
当然实现底层逻辑无非就是CURD。
- 需要对字段进行可用性校验;
- 将字段入库;
问题?如何对这些字段进行校验?
纵向思维(模板方法模式):父类抽取共有校验校验,子类实现个性化校验;
横向思维(责任链模式):每一个字段的校验均是一个Filter,将这些Filter串联起来进行校验;
纵向思维(逻辑集中,父类需时刻升级):需要在设计入参对象的时候就需要确认父类对象与子类对象。一般来说需要随着需求的迭代而对项目框架优化升级的。
横向思维(逻辑分散,但是更加灵活):有些字段需要联动校验,所以需要将完整的对象传递到Filter中。校验逻辑分散到很多Filter中,而大量Filter组装成链会导致逻辑分散。
个人看法:要看复杂度,若业务特别复杂(需校验字段超多),开发人员很多的情况下,横向思维更加好。
2. 动态配置
一些逻辑我们需要配置到Redis等实现动态修改,但是这些逻辑又会有两个维度的思路?
纵向思维:这个计划下面有多少目标,会有很多限制条件,例如必须是白名单的才可等,返回值是List;
横向思维:这个目标是否可用,返回条件是boolean。先拿到一个全量的目标List,然后根据条件(例如某个计划,账户等)去遍历目标List返回每个目标是否可用。
个人看法:如果业务复杂或公司存在例如规则平台这种基建时,推荐横向思维。