【轮子狂魔】序言:有没有那么一种系统架构,它是无所不能的

 有没有那么一种系统架构,它是无所不能的?

某时髦靓女上网搜索理想男友:要帅、有车。结果是:象棋。女不甘心,再搜:有房、有钱。结果是:银行。女还不甘心,再搜:有爱心、体贴人。结果是:奥特曼。女十分生气,于是将上述全部条件输入,良久,计算机十分艰难而又缓慢地打出一行字:“奥特曼在银行下象棋。”

那么,反观系统架构呢?

我想要的系统架构:能做Winform、Web、WPF、WinCE、Server、大型系统、中型系统、小项目、小工具。

此时计算机会想跟你说2个字:泥煤。

标题党,你到底要干嘛?

与大家一起讨论下系统架构。

独乐乐不如众乐乐,我有我的想法,你有你的想法,思想碰撞在一起才会有火花,否则它就是一个火种,并不绚丽。

那么,问题来了,基于什么样的系统?

正好最近刚做了一个微信对接的小项目,做的稍微复杂了点,是为了下一个比较大的项目做准备。

-> 把跟微信的每个接口对接看作为一条指令(Command)。而触发这条Command执行的是事件(Event),通过处理器(Handler)将Command与Event关联起来。

-> 为了彻底的解耦业务事件层(Business Event)和指令层(Command),我把引用关系给干掉了。那么没有引用关系的话,我又如何让Event触发Command(Handler)呢?

-> 增加一个调度者(中介者),建立一个关系网,将Event和Command关联起来。

-> 由于微信对接时,除了获取AccessToken等个别特殊接口外,其余都要填充AccessToken,而AccessToken又是有使用时间限制的,超时了要更换,使用次数也有限制,不能每次更换。

那么问题又来了,能不能别烦躁的次次赋值啊?

亲爱的,XX大人,在调度者中增加一个预先处理就可以了,为符合特定规则的处理器(Handler)预先调用其他的处理器。

能不能概括一下,到底包含了哪些功能?

DataAnnotation:乍一看数据注解好像是没什么关系。其实是用它来关联Event和Handler,间接的通过Event触发Command,而这个配置是在方法上面,以Attribute的方式支持(类似MEF)。
IoC:其实只算是个非常简陋的实例化对象而已,扩展生命周期也成,只是这并不是重点。
惯例优先原则:这个并不是系统架构中明显体现出来的,而是借鉴了伟大的ASP.NET MVC的设计思路,说的明白点儿就是口头约束。

不是说强制约束做不了,而是强制约束需要代价,比如编译级错误?运行时错误?为了节约成本,我选择了运行时,而且是很简单的约束。
反射缓存:调度者的实现其实就是反射,而反射是需要消耗性能的,这里我只是简单的优化了一下而已,毕竟这不是重点,只需要把反射关系进行缓存,避免每次都扫描一次就好了。
AOP:这个高大上的词,被我在这里盗用了,在调用Command的前、中、后对各个环节进行拦截,如日志输出,调用顺序监控,数据流转,执行时间等。当然目前还没做到这么复杂,只是简单的完成了调用预先处理器而已。

上一段代码瞧一瞧?

别急,今天只是展开思路,作为一个“序言”。

接下来的文章会慢慢把这些外衣统统“脱掉”,呦呦呦,外套脱掉脱掉,外套脱掉。

PS:这一个系列是以服务端架构为主,不会引用任何第三方的类库、组件等。

最后:各位给点个推荐?让我更有动力的写下去,可否? ^_^

时间: 2024-10-24 04:05:45

【轮子狂魔】序言:有没有那么一种系统架构,它是无所不能的的相关文章

【轮子狂魔】奉上微信公众平台系统的源码

这玩意有什么用? 1.业务系统不必关心与微信对接的必要信息,包括Token.AppID.AppSecret. 2.业务系统不必理会与微信对接的约束,如验证.请求方式等. 3.以自己熟悉的方式去操作微信接口,如Web Service.RESTful等(源码以Web Service的形式公布,如果你熟悉WCF可改其他方式). 4.非侵入性的,与业务系统架构不冲突. 目前源码完成度是多少? 先说下微信公众平台网址:https://mp.weixin.qq.com   至于如何申请开发号请自行百度吧 系

【轮子狂魔】抛弃IIS,打造个性的Web Server - WebAPI/Lua/MVC(附带源码)

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 引言 此篇是<[轮子狂魔]抛弃IIS,向天借个HttpListener - 基础篇(附带源码)>的续篇,也可以说是提高篇,如果你对HttpListener不甚了解的话,建议先看下基础篇. 这次玩的东西有点多了,大致分为如下几个方向: 1.支持

【轮子狂魔】手把手教你自造Redis Client

为什么做Redis Client? Redis Client顾名思义,redis的客户端,主要是封装了一些对于Redis的操作. 而目前用的比较广泛的 ServiceStack.Redis 不学好,居然开始收费了. 作为轮子狂魔,是可忍孰不可忍啊.于是我决定自己造轮子了. Redis通信协议 先给个Redis官方的通信协议地址:http://redisdoc.com/topic/protocol.html 关键是我截图的部分,我们可以得到以下几个信息: 1.tcp协议 2.默认端口6379 3.

【轮子狂魔】打造简易无配置的IoC

如何指定Business Event和Command之间的关系? 既然是基于惯例优先原则,那么我们首先需要定义一个惯例: 1.调度事件和调度处理器之间是一对多关系(多对多的话,相信你看完了以后应该会知道怎么改的). 2.所有业务事件(Event)要以调度事件为基类,业务指令(Command)的调度处理器特性需要指定可处理的调度事件. 1 /// <summary> 2 /// 调度事件 3 /// </summary> 4 [AttributeUsage(AttributeTarg

Microsoft SQLServer有四种系统数据库

Microsoft SQLServer有四种系统数据库: 1.master数据库 master数据库记录SQLServer系统的所有系统级别信息.它记录所有的登录帐户和系统配置设置.master数据库是这样一个数据库,它记录所有其它的数据库,其中包括数据库文件的位置.master数据库记录SQLServer的初始化信息,它始终有一个可用的最新master数据库备份. 2.tempdb数据库tempdb数据库保存所有的临时表和临时存储过程.它还满足任何其它的临时存储要求,例如存储SQLServer

iOS中的两种主要架构及其优缺点

凡是程序的开发者,应该对程序的架构都不陌生.一个程序的架构的好坏对这个程序有着非常重要的作用.今天我们来看一下iOS开发中用要的两种主流的程序架构.这个过程中我们主要以例子的形式展开. 我们来看第一种架构:如下图所示: 这种程序的架构主要原理是创建了一个导航控制器来控制页面之间的切换.这种架构一般把主界面作为导航控制器的根视图控制器.在上图所求的程序架构中,主界面管理了四个界面:微信界面,发现界面,联系人界面,关于我界面.如果程序是第一次运行的时候,进入用户指引界面,然后进入登录界面,输入账户名

三种Dataase Mapping的系统架构

ORM - O/R M - Object/Relational Mapping: A technique/idea used to map objects and thier individual relations to an relational database(mysql, postgresql, mssql, oracle, db2, pretty much any major db today) DAO - Data Access Object: An object used as

4种系统间交互方法比较

转载自:http://blog.csdn.net/zuocheng_liu/article/details/9035015 4种系统间交互方法比较 指相对独立子系统间的交互 指标\方式 API 数据文件 共享数据库 (web系统)根域名cookie 实效性 高 低 最高 实时 时间效率 高 低 最高 低 实时空间效率 低 高 低 - 实时占用带宽 低 低 低 低 系统设计正交性 高 高 低 低 系统设计耦合度 低 低 高 高 实现方式 同步/异步 异步 异步 异步 协议 http request

MVVM 一种新型架构框架

MVVM是Model-View-ViewModel的简写.微软的WPF带来了新的技术体验,如Silverlight.音频.视频.3D.动画……,这导致了软件UI层更加细节化.可定制化.同时,在技术层面,WPF也带来了 诸如Binding.Dependency Property.Routed Events.Command.DataTemplate.ControlTemplate等新特性.MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presente