设计一个小框架考虑的东西真不少,每一样都不easy:

1、既要解决当前技术的不足;

2、又要方便他人使用(基本的目的)。

3、同一时候又要设计得优雅。easy扩展。

sophia一開始设计用来支持智能回复(文本能够带參数的回复)。后来又支持菜单。并统一了菜单和文本命令的处理逻辑。

再后来看到微信client的交互元素太少,又支持html页面操作和微信client的会话(即页面操作能够知道是哪个微信号操作的)

对于怎样维系两个不同类型消息(命令)之间的关系?对sophia来说有点吃力。

即,前面是一个文本(命令)。后面是一个其它类型的消息。

比方,某街道办让我们开发一个居民登记公众平台,主要流程例如以下:

1、订阅者输入:登记

2、公众平台提示:请输入姓名:

3、订阅者输入:张三

4、公众平台提示:输入身份证号码:

5、订阅者输入:xxxxxxxxxxxxxxxxxx

6、公众平台提示:请上传免冠相片:

7、订阅者上传相片。

8、公众平台提示:登记成功。

订阅者经过多次文本输入和图片上传后,公众号怎样保证前面的文本信息和最后的图片是同一个人的?

假设看了sophia的源码和设计后(參阅我前面的文章)会发现sophia无法做到?由于我一開始就把sophia设计为处理文本消息的框架。

如今,假设要解决问题,那么:

1、首先把全部的消息(文本、视频、语音、图片、地理位置等,或者说每种交互)都觉得是一种命令。让框架都有机会处理;

2、其次要改动会话管理逻辑。

插播:

消息的多样性:指同一种类型的消息。能够依据内容来解析出不同的命令,比方文本消息具有这个特性。

像图片无法解析出不同的内容,所以没有多样性(用图像识别、语音识别技术除外)。

这个概念会影响我们的设计。

1、因为文本消息具有多样性,其相应的命令类就能够有不同的子类型。而非文本消息,仅仅能有一个命令类,合适吗?

2、假设把非文本消息作为文本消息的特殊类型,又怎样?

初步考虑扩展将文本命令类添加一个标记(支持后继是非文本消息继续处理),假设公众平台收到非文本命令时候要检查一下session中是否存在文本命令对象是否支持后继非文本消息处理,然后调用此对象继续处理。

你有更好的方案吗?欢迎讨论。

微信公众平台应用开发框架sophia设计不足(1)的更多相关文章

  1. 微信公众平台快速开发框架 For Core 2.0 beta –JCSoft.WX.Core 5.2.0 beta发布

    写在前面 最近比较忙,都没有好好维护博客,今天拿个半成品来交代吧. 记不清上次关于微信公众号快速开发框架(简称JCWX)的更新是什么时候了,自从更新到支持.Net Framework 4.0以后基本上 ...

  2. [C#]asp.net开发微信公众平台----目录汇总-持续更新

    1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...

  3. asp.net开发微信公众平台----目录汇总-持续更新

    1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...

  4. 微信公众平台开发框架 Bee.WeiXin

    我们来看一下如何通过Bee.WeiXin开发微信公众平台.关于微信公众平台的一般性介绍, 这里不做展开. 园里找一找就可以了. 本文主要是介绍Bee.WeXin, 代码已发布到https://beew ...

  5. [c#]asp.net开发微信公众平台(1)数据库设计

    开发微信公众平台之前,先去微信官方了解下大概的情况 这里:http://mp.weixin.qq.com/wiki/index.php :看了之后心里大致有数了,开始设计数据库,尽可能的考虑,未考虑到 ...

  6. 微信公众号开发C#系列-2、微信公众平台接入指南

    概述 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微信服务器将接收到的消息post到用户接入时填写的url中,在url处理程序中,首先 ...

  7. *** wechat-php-sdk 微信公众平台php开发包

    wechat-php-sdk 微信公众平台php开发包,细化各项接口操作,支持链式调用,欢迎Fork此项目weixin developer SDK. 项目地址:https://github.com/d ...

  8. 【原创】【2015最新】微信公众平台开发手把手入门之一:缘起微信公众号(PHP,MYSQL, BAE)

    最近因为业务的需要,老板布置做了两个月简单的的微信公众平台开发,从网上搜了一些资料,实话说资料不多. 在参考学习的过程中也遇到了不少难缠的小问题,虽然不难逾越,但是确实浪费了时间. 我发现网上仅有不多 ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

    紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAu ...

随机推荐

  1. KeyValuePair用法(转)

    转载自:http://blog.sina.com.cn/s/blog_9741eba801016w61.html C# KeyValuePair<TKey,TValue>的用法.结构体,定 ...

  2. VC6.0 导入资源崩溃

    等我以后挣钱了一定买正版! 最近学习Win32编程,为了锻炼自己,在网上下载了一个VC6.0作为开发工具,应该是兼容性的问题吧,VC6 经常闹毛病. 今天导入资源的时候VC6出现崩溃的现象. 马上寻求 ...

  3. 一步一步重写 CodeIgniter 框架 (1) —— url 如何映射到具体的方法

    CodeIgniter 框架最显著的特征就是 MVC 模式,它的做法就是提取 url 中的'分段', 映射到某个类的某个方法,从而由该方法来输出最终显示的页面内容.那么我们第一课中就是实现一个这样的原 ...

  4. PB数据管道

    数据管道提供了一种不同数据库之间传递数据和(或)表结构的方法. 数据管道对象 要完毕数据管道的功能须要提供例如以下内容: 须要数据源和目标数据库,并可以和这两个数据库正常联接 须要源数据库中的哪些表: ...

  5. BZOJ 2705: [SDOI2012]Longge的问题( 数论 )

    T了一版....是因为我找质因数的姿势不对... 考虑n的每个因数对答案的贡献. 答案就是 ∑ d * phi(n / d) (d | n) 直接枚举n的因数然后求phi就行了. 但是我们可以做的更好 ...

  6. javascript笔记整理(对象遍历封装继承)

    一.javascript对象遍历 1.javascript属性访问 对象.属性名 对象['属性名'] var obj={name:'chen',red:function(){ alert(1);ret ...

  7. 基于visual Studio2013解决面试题之1201链表去重

     题目

  8. Swift - 判端网络连接状态,连接类型(3G还是Wifi)

    IJReachability是一个使用Swift写的第三方网络检测类.可以测试网络是否连接,并支持3G和Wifi的检测. 使用样例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  9. AVL树的插入删除查找算法实现和分析-1

    至于什么是AVL树和AVL树的一些概念问题在这里就不多说了,下面是我写的代码,里面的注释非常详细地说明了实现的思想和方法. 因为在操作时真正需要的是子树高度的差,所以这里采用-1,0,1来表示左子树和 ...

  10. BaseActivity--上门啦

    package com.fwpt.activity; import com.fwpt.entity.RyUserInfo; import com.fwpt.entity.SmlaUserinfo; i ...