程序设计

用 Java 实现生成 Markdown 文本的工具

刘启春

公司的 IM 每天有许多机器人推送的消息,我也在使用,这个功能是好的,但是当我们想去发送一些格式优美的消息时,却要费许多功夫,主要来源于字符串拼接,如果要拼接出 Markdown 格式的那就更费力了,另外由拼接带来的是混乱的代码,为了解决这个痛点,我写了一个 Java 代码生成 Markdown 文本的工具,还给它起了一个酷酷的名字 MdKiller。

MdKiller —— Markdown 杀手。

MdKiller 可以格式化生成 Markdown 文本的工具,支持常用 Markdown 格式生成,例如引用块、代码块、有无序列表、表格等,内容上支持字体样式(style)和内容的嵌套,适用于 IM 消息 Markdown 排版。

业务思考|项目国际化处理

刘启春

最近在做国际化相关的工作,需求是在「English」状态用户的名称和部门的名称显示英文字段,实体中有 name 和 englishName,当用户选择英语时 name 需要被填充 englishName,这种情况不像系统字段的国际化,系统字段的各个语言是固定的,而用户的英文名称是变动的。为了处理用户的不同语言选择需要写很多 if 或者 switch,因此当 VO、DOT、Model 对象多了就会出现很多形式相似的代码,像下面这样。

业务系统会有多处与下面雷同的代码,因为不同的 VO、DTO 需要不同的处理。

    public void i18nHandler(UserVO vo, User user){
        LanguageEnum language = currentLanguage();
        switch (language){
            case EN:
                String englishName = user.getEnglishName();
                if(StringUtils.isNotEmpty(englishName)){
                    vo.setName(englishName);
                }
                break;
            case JP:
                String jpName = user.getJpName();
                if(StringUtils.isNotEmpty(jpName)){
                    vo.setName(jpName);
                }
            case ZH:
            default:
                // 缺省默认中文
        }
    }

业务思考|数据权限问题

刘启春

在权限管理中一般分为两类:操作权限、数据权限。

操作权限:是用户是否能使用某个功能的接口权限。 数据权限:是用户是否能操作某个范围的数据,例如:订单记录修改接口,“用户”只能修改所属的(用户 A 不能修改用户 B 的订单记录),“admin”可修改所有的。

RESTful API 设计规范介绍

刘启春

RESTful 是目前流行的 API 设计规范,遵守这套规范设计出的 API 可以较好的适用不同类型的客户端,例如:PC/Mobile/Pad…

RESTful 表现层状态转换(英语:Representational State Transfer,缩写:REST)是 Roy Thomas Fielding 博士于 2000 年在他的博士论文[1]中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。

思考|使我校教职工账户实现 CAS

刘启春

业务系统的增多导致用户信息、用户登录不便于统一管理, 基于此我们开始对单点登录 SSO 和统一身份认证服务 CAS 进行探索. 当前我们的科研管理系统已经开发的差不多了,由于每次开发学校的项目都需要导入教师信息,多个系统就造成了用户数据难统一管理,多个系统之间的用户账号密码难管理,于是这几天我们在科研系统开发基础上提出了第二方案,使用统一身份认证服务 CAS 对我校教师账户信息进行管理。

设计模式|解释器模式

刘启春

解释器属于一种行为模式, 它与命令模式非常相似.

GOF 解释器模式: 给定一个语言, 定义它的文法的一种表示, 并定义一个解释器, 这个解释器是用该表示来解释语言中的句子.

能对对相同的信息给出判断不同的判断.

设计模式|责任链模式

刘启春
责任链模式: 使多个对象都有机会处理请求, 从而避免请求的发送者和接受者之间的耦合关系. 将这个对象连成一条链, 并沿着这条链传递该请求, 直到有一个对象处理它为止.

设计模式|访问者模式

刘启春

访问者模式: 表示一个作用于某对象结构中的各个元素的操作. 它使你可以在不改变各元素的类的前提下定义这些元素的新操作.

访问者模式适用于数据结构比较稳定的系统, 要增加新的 Element 实现类, 则访问的接口或者实现类需要响应的修改.

设计模式|命令模式

刘启春
命令模式: 将一个请求封装成一个对象, 从而使用户可以用不同的请求对客户进行参数化; 对请求排队或记录请求日志, 并支持可撤销操作. 对于传令官的改进, 可以增加个列表, 使命令可以撤销, 或者分批执行. 命令模式可以轻松将命令的发送者和接收者解耦…