记一次和阿里某总监对话引发的思考:说说你框架的设计思路和优点亮点!

背景:

前不久和阿里的一个技术总监风动聊的时候,他问了这样一个问题:说说你框架的设计思路和优点?

话说,这个问题,5年前开始就一直经常出现在眼前,可我从没认真为它找出过答案!

于是,夜深深,我躺在床上,用笔记本,一边思考,一边打字,试着找寻!

这些年来,我的框架或作品,都快凑满十二个了,每个单独都可以说上好几天。

但如果时间只有半小时,我要怎么介绍呢?介绍哪些呢?

出现在脑海里的框架有三个:CYQ.Data、ASP.NET Aries、Taurus.MVC。

大概是因为近期的精力都在这上面吧的吧(如当年我精力花在Qblog一样吧)。

说说你框架的设计思路?

框架的设计思路?哪个框架?我自己挑一个?

如果要讲Aries或Taurus,就必须讲CYQ.Data,因为它们都是基于CYQ.Data的存在而存在的。

所以问题就变成回答:说说你CYQ.Data框架的设计思路?

我感觉很难回答这个问题,内心也能感受到一丝抗拒这个问题的想法?

框架是漫长的岁月演进重构而来的,最早期的思路是这样的:

构造一个简单的MDataTable体系,传进一个表名,根据数据库链接拿到表结构,再根据行的列构造出SQL语句执行,把数据读到MDataTable返回。

以上一句概括了最早期的思路,但没有设计,简单并不亮。

如果要说说最新版本的设计思路,我想不到该怎么表达,因为重构的次数太多了,几百上千次了,太多细节,每个细节都独立带有它自己的设计思维。

就像腾迅最早也只是QQ发个消息,现在发展到生态圈,你说人家是怎么设计现在的帝国的?

也许,只是做着做着,就这样子了〜〜〜才是答案吧。

好吧,设计思路回答不上来,那就讲讲框架有什么亮点吧?

我了个去,又是这个问题,一个在我内心深深留下伤痕的问题。

我曾经用尽洪荒之力写过一篇文章,来介绍框架的优势,可是我现在记不起来了!

只能忘掉文章,重新思索了:

1:框架支持多数据库。(旁白:支持多数据库的框架到处有吧)

2:嗯,重点框架能把数据从一种数据库转向任意一种数据库(旁白:项目里需要混合数据库的场景太少,这功能没啥感觉)

再想想:

1:框架的缓存集成了Memcache、Redis(旁白:集成不是很简单的事情么?)

2:嗯,但客户端没有引用第三方,都是自己写的,Json解析都是自己写的(旁白:只能说技术好,但功能不算亮点)

再想想:

1:框架实现了自动缓存。(旁白:缓存有啥特别,Hibernate也有二级缓存,说说你它有啥区别?)

2:嗯,Hibernate的二级缓存没法自动失效,因为它的失效策略没法处理自定义的sql语句(旁白:你是怎么控制的?)

3:嗯,我是通过分析执行的SQL语句,得到语句所关联的表,通过表这个维度来控制的(旁白:那不会产生很多缓存无效问题?表的修改无处不在,能控制到行么?)

4:不能,但可以控制列,嗯,所以我还设计了,可以指定忽略哪些字段的更新不触发缓存失效,也可以指定哪些表不需要缓存(旁白:如果不在SQL层面,在应用层面如何控制缓存失效?)

5:在业务代码控制吧?或者通过AOP统一控制?(旁白:不是我想要的答案)

6:也可以通过数据库来触发缓存失效,MSSQL就有提供缓存依赖(旁白:具体怎么实现呢?)

7:微软的直接调就好了,具体原理是通过触发器把修改的数据写入指定的表,再通过定时器扫表。(旁白:也不是我想要的答案,还有其它答案么?)

8:没有了,你说说(旁白:以前好像讲过,现在想不起来了,说说你那个Aries框架的亮点吧)

半小时已经差不多了,亮点依旧没有被感觉出来〜〜〜

Aries的亮点?我还没恢复洪荒之力再给它写一篇框架的优势篇呢,该怎么介绍?

1:嗯,框架就是传一个表名,就可以自动生成增删改查导入导出,还自定义了一套简单的前端语法,结合后端很容易开发(旁白:不知道你说什么,还是闲聊一下其它的吧.....)

 

-------------------重新思考,若只有半小时,该怎么介绍框架-----------------

 

介绍:CYQ.Data的亮点

思考了1天,发现亮点功能太多:元数据缓存、AOP、UI交互、调试、模板引擎、Json工具、DB工具、分布式缓存、批量、内存表、文本数据库、防SQL注入、多数据库转换等。

如果一个一个介绍及聊其技术细节,十年的成果,讲三天三夜也没完!

可如果时间有限,只能讲三个,那我必须对其进行抽象总结。

经过反复的思考,忽略人有我优,只选人无我有的角度,总结了三个核心:

1:自动缓存:抗并发。

对于中小型项目,自动解决抗并发问题,提升网站性能、简化代码,精简架构!

对于大型的高并发大数据量的复杂业务,缓存还是要进一步细化控制命中率。

2:水平扩展:零编码。

A:单种类数据库扩展到多种类数据库。

B:单机缓存扩展到分布式缓存。

C:单数据库扩展到集群数据库(读写分离)。

通通只要简单追加配置即可。

3:数据结构:*转。

A:Json、Xml、实体类:可互转。

B:泛型、字典、集合,与A类:可互转。

C:数据库表与A类、B类:可互转。

 

感觉这样抽象总结后,应该半小时就可以介绍完重点了,哈〜〜

至于星座十二宫框架:ASP.NET Aries(白羊)、Taurus.MVC(金牛)、还有在重写中的第三星座Gemini.Workflow(双子)。

该怎么抽象其介绍,需要多几个夜晚待我仔细想想〜〜〜

总结:

通过本次思考,意识到两个问题:

1:曾以为好的作品,不需要去告诉用户怎么好,用了自然知道好在哪里。

首先天真的假设了用户首先会用,其次假设了用户会口口相传。

2:曾经以为经验丰富就可以Hold住一切,*发挥。

对于经常出现的问题或场景,与其每次都随机产生答案,不如深度的思考总结出一种较优的固定答案。

最后,不知道用过框架的小伙伴们是什么感觉?


本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/p/6188947.html

上一篇:Windows 正不可避免地变成某种订阅系统


下一篇:锐捷网络是如何做到企业级WLAN市场占有率第一的?