项目开发-微信公众号被动响应消息处理

过去参与的一个微信公众号开发的项目,其中处理被动响应消息的类相对臃肿,原因是该项目需要处理的消息类型较多,通过switch分支,分支方法都写在一个类里面。功能完成后,这个类就巨大无比了。闲来无事,就在想应该怎么重构一下呢?设计模式里面有解决大量if分支的状态模式,但是模式应用还没看明白。

想来,还是switch最直观的,为了便于维护,有必要把每个分支都抽取成一个处理类,同时做好包结构规划,虽然会形成大量短小的消息处理类,但是整体结构是清晰的。简单整理了下代码,类图如下:

原来全部代码都是写在RequestDispatcher里面的,现在则把其转化成N个短小的消息处理类,具体处理普通消息和事件消息。

/**
 * 根据消息类型转发给对应的消息处理类
 * @title RequestDispatcher
 * @author WoodWang
 * @description
 * @date   2015-5-18
 * @version 1.1.0
 */
public class RequestDispatcher {
	public ResponseMsg doDispatcher(RequestMsg request){
		//事件消息
		if ("event".equals(request.getMsgType())) {
			return dispatchEvent(request);
		}

		//普通消息
		return dispatchMessage(request);
	}

	private ResponseMsg dispatchEvent(RequestMsg request){
		ResponseMsg response = null;
		EventType eventType = EventType.getEventType(request.getMsgType());
		//根据事件类型,创建不同的处理类
		switch(eventType){
		case subscribe:
			response = new SubscribeEventHandler().onEvent(request);
			break;
		case unsubscribe:
			break;
		case SCAN:
			break;
		}
		return response;
	}

	private ResponseMsg dispatchMessage(RequestMsg request){
		ResponseMsg response = null;
		MsgType msgType = MsgType.getMsgType(request.getMsgType());
		//根据消息类型,创建不同的处理类
		switch(msgType){
		case text:
			response = new TextMsgHandler().onMsg(request);
			break;
		case image:
			response = new ImageMsgHandler().onMsg(request);
			break;
		case link:
			//TODO
		case location:
			//TODO
		case video:
			//TODO
		case voice:
			//TODO
		}
		return response;
	}
}

每个具体消息处理类,遵循单一职责原则,完成一种消息的处理,例如TextMsgHandler:

public class TextMsgHandler {
	/**
	 * 文本消息,响应格式为XML的文本信息
	 * @param msg
	 * @return
	 */
	public ResponseMsg onMsg(RequestMsg msg){
		ResponseMsg response = null;
		//TODO 解析请求消息内容,处理并返回
		return response;
	}
}

从最初的只关注功能实现,到开始关注代码结构、可读性,会考虑代码的执行效率,算不算是Coder的一个成熟表现呢?

时间: 2024-08-05 08:08:31

项目开发-微信公众号被动响应消息处理的相关文章

.net开发微信公众号(1)-启用开发者中心

开篇介绍 今天新开一个微信公众号开发经验分享的系列,主要是和大家分享在.net下开发微信公众号后台的一些经验,希望能给在.net下做微开发的小伙伴们一些参考.最近由于工作需要,开发了一个微信公众账号.我本人其实一直是做winform方向开发的,asp.net接触的也不多,现学现卖,有啥不足或不对的地方,希望大家发邮件告诉我,[email protected],一起学习,一起进步. 微信公众号其实火了很长一段时间了,应该是从2012开始火起来的.最近正好做一个这样的项目,在网上找资料的时候发现大家

PHP开发微信公众号(一)二维码的获取

要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 申请成功后,你会得到一个appID 和 appsecret,这个就相当于你的开发者账号和密码. 开发模式如下图: 1.Access_Token的获取 对于这个access_token就是一个访问标识,其实不用想得太高深,它就好比是你进图书馆需要的图书卡:

Spring Boot 开发微信公众号后台

Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台. 很多小伙伴可能注意到松哥的个人网站(http://www.javaboy.org)前一阵子上线了一个公众号内回复口令解锁网站文章的功能,还有之前就有的公众号内回复口令获取超 2TB 免费视频教程的功能(免费视频教程),这两个都是松哥基于 Spring Boot 来做的,最近松哥打算通过一个系列的文章,来向小伙伴们介绍下如何通过 Spring Boot 来开发公众号后台. 1. 缘起

从零开始开发微信公众号系列篇一:微信测试号申请

从零开始开发微信公众号系列片将会讲述微信账号申请,微信各个接口的实现,同时会为每个接口提供实现的demo.同时,此系列博文也不乏引用博友的一些思想内容,如有问题,欢迎联系于我,谢谢!由于该系列博文是工作之余总结的,有时没及时更新还望博友监督,提醒以达到共勉.俗话说,磨刀不误砍柴工,要进行微信公众号开发首先你得做好以下准备工作,那现在我们先来磨刀.很多人为微信开发账号发愁,这一点不用担心,腾讯还是挺人性化的,作为开发者可以申请测试号来进行微信公众号开发,这样我们就可以不用花冤枉钱去申请微信的订阅号

用java开发微信公众号:接收和被动回复普通消息(三)

上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本消息2.图片消息3.语音消息4.视频消息5.小视频消息6.地理位置消息7.链接消息(被动回复的消息) 被动回复的普通消息包括: 1.回复文本消息2.回复图片消息3.回复语音消息4.回复视频消息5.回复音乐消息6.回复图文消息 其实接收消息和被动回复消息这两个动作是不分家的,这本来就是一个交互场景,一

vue项目使用微信公众号支付总结及遇到的坑

微信公众号支付 1. 使用jssdk调用微信支付,具体查看开发文档: 使用的vuex,在mutations中 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 wechatPay (state, data) {     state.payObject = data     console.log('微信支付开始请求')     if (wechat) {      wx.chooseWXPay({       tim

利用H5开发微信公众号

一. 首先授权配置 公众号设置 -->功能设置 设置业务域名!  这里的MP_verify_w7tdZrafqhkK9Mcj.txt文件,需要放到你项目的根目录下,例子:你的项目war包叫 test.war ,里面包含了src,WEB-INFO两个文件夹,则把MP_verify_w7tdZrafqhkK9Mcj.txt放到这两个文件夹的同级目录下;即现在test.war下有两个文件夹一个txt文件:src,WEB-INFO,MP_verify_w7tdZrafqhkK9Mcj.txt. 后面就需

使用NodeJs开发微信公众号(一)

准备工作 1.首先注册自己的微信公众号. 微信公众号现在分为订阅号,服务号,企业号,服务号和企业号不对个人开发者开放,所以我们只能选择订阅号. 但是订阅号也有认证和未认证之分,认证的订阅号支持的接口更多也更高级,下图是微信的接口权限图,只截取了一部分. 如果我们想测试这些接口怎么办?我们可以申请微信的测试账号,测试账号只能用于测试接口,不能用于真实的项目.下面就看看怎么申请测试账号吧. 1.1进入微信公众平台首页 https://mp.weixin.qq.com/ 1.2在下方的账号分类里找到订

NodeJs 开发微信公众号(一)准备工作

前言 大概是一个月前,自己用业余时间做了一个微信公众号.微信开发,尤其是对后台不熟悉的人来说显得尤其困难.首先要克服的是后台语言(nodejs)的一些不熟悉困难,其次,也是最大的一点困难是在跟微信交互过程.借助各种工具和几位朋友的帮助,总算把各种困难解决,并且在自己计划的时间内建立起来公众号.第一次个人独立完成了一个网站的开发,对于自己的知识提升不少.微信公众号现在是html5应用的一个重要平台,许许多多的同行都陆续加入到这个行列.接下来一个月打算写一些我个人在走这条路的心得,每一章结尾都会把参