博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每个类都应将所有能力以最小粒度提供给外部可配置,每个业务所需要的功能是这些能力的组合...
阅读量:7036 次
发布时间:2019-06-28

本文共 1636 字,大约阅读时间需要 5 分钟。

比如说,我有一个界面,查询地理位置,是比较通用的,各个业务,场景都有可能需要用上。但是对于不同的场景,title的文字可能不一样,有些业务希望进来后展示“选择位置”,有些业务进来后希望能展示为“发送位置”,还有查询地理位置后,备选的条目数量,以及查询地理位置的范围都有可能根据不同业务而不一样。

最开始我的做法是这样的。

class QueryLocationPage {        public static final int TYPE_FOR_LOCATION = 1;    // 为了定位需求    public static final int TYPE_FOR_SEND_CONV = 2;   // 为了发送会话        // 文字显示    private String mTitle = "选择位置";        // 查询范围    private int mSearchRange = 100;        // 结果最多显示多少个    private int mMaxResult = 30;        // 初始化的时候根据业务的type进行内部行为的配置    private void init(int type) {        switch (type) {            case TYPE_FOR_LOCATION :                mTitle = "选择位置";                mSearchRange = 1000;                mMaxResult = 100;            break;            case TYPE_FOR_SEND_CONV :                mTitle = "发送到会话";                mSearchRange = 100;                mMaxResult = 30;            break;        }    }}

上述这样的做法实际上是不好的,为什么我一个纯粹的功能需要知道哪个业务哪个业务呢。其实应该是将这些变成配置。

static class Param {    public String title = "选择位置";    public int searchRange = 100;    public int maxResult = 30;        public Param title(String title) {        this.title = title;        return this;    }        public Param searchRange(int sr) {        this.searchRange = sr;        return this;    }        public Param maxResult(int mr) {        this.maxResult = mr;        return this;    }}public static final Param SenceForLocation = new Param()    .title("选择位置")    .searchRange(1000)    .maxResult(100);    public static final Param SenceForSendConv = new Param()    .title("发送到会话")    .searchRange(100)    .maxResult(30);    // 以后扩展的时候,只需要找一个相似的sence(其实是一个Param),复制一份,改一改你需要的参数,就可以了

转载地址:http://wyfal.baihongyu.com/

你可能感兴趣的文章
马云:阿里巴巴必须成为国家和世界创新的发动机
查看>>
数据库-删除数据
查看>>
753个大奖邀请各位新老博主入驻云栖,请技术人员广而告之
查看>>
apache域名重定向rewrite
查看>>
LNMP架构介绍,php安装
查看>>
Spring Boot教程(三十一)创建含有多module的springboot工程
查看>>
以太坊创始人V神介绍99%容错的共识机制
查看>>
maven打包成可运行jar包遇见的坑
查看>>
用navicat连接mysql8
查看>>
ssm框架整合
查看>>
《活着》读后感4500字
查看>>
JDK8新特性
查看>>
Nginx访问日志、日志切割、静态文件不记录日志和过期时间
查看>>
Zookeeper的投票机制及分布式事务锁原理
查看>>
学了这么久Python,大家知道它的起源吗?
查看>>
Java通过几种经典的算法来实现数组排序
查看>>
PHP ++true true++ 布尔值的先增后增问题
查看>>
七牛qshell工具 批量删除操作
查看>>
关于composer常用到的命令
查看>>
shell基础2
查看>>