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


    背景:

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

    话说,这个问题,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住一切,自由发挥。

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

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

  • 相关阅读:
    C# for VS foreach 性能对比
    C# D3D中2D的使用,做小游戏。。。。半年前写的东西了,拿出来分享,现在看来代码写的乱七八糟的,将就一下吧。。。
    传奇3(G) 国际服 地图 显示 C#代码实现(地表草皮显示基本没有问题,但地面对象显示混乱)
    IE6和Opera position:absolute; 子元素浮动 width:100%;显示不正确问题。。。
    .NET Framework 4 文件IO读写的增强 激动人心的强大 或许正是你所期待的 基类库中的新增内容 转自msdn杂志
    VirtualBox 系统盘 虚拟磁盘 变大?
    假如你是ASP.NET 中手,个团队邀请你加入他们,没有工资(至少要等到项目卖出去,交付)[问题点数:100分] 创业号召贴,发帖保存
    对于C#的一些奢望(对微软的一种幻想,对ASP.NET,WEB,计算机,.NET,以及一些现状的抱怨)
    实例化 泛型 对象
    基于权值的微博用户采样算法研究
  • 原文地址:https://www.cnblogs.com/cyq1162/p/6188947.html
Copyright © 2020-2023  润新知