2016年11月,接受了一个工作,是对“悟空CRM”进行一些修补。这是一个不错的 CRM,开源,并提供一个 SaaS 的服务。正好微软的 .NET Core 和 ASP.NET Core 也发布了。于是就有了这个想法:使用 ASP.NET Core 来开发一个 CRM。当然这里面的私心是:朝后坦白讲,悟空CRM 的代码真的是不怎么样。大量的代码堆在 Controller 里,多个功能在一个 EndPoint 里混合。权限管理也有些乱来。View 里充满了“临时解决方案”。所以我真的是一边改,一边难受。由于11月我还在做一个 Xarmin 的小程序,所以对 CoreCRM 的开发就定在12月开始了。
因为修改悟空CRM,本来以为对业务的逻辑已经比较熟悉,先开始的时候照着悟空CRM的UI直接开始撸就可以了。在尝试了几个页面之后发现这样比自己直接写还麻烦。而在这中间,我的老毛病有犯了:在几种技术方案之间不停地权衡和尝试。这样,时间就一天天的浪费掉了。技术方案的选择经历了:VueJS + jQuery,React.NET,aspnetcore-spa (ReactJS + Redux),最后又回到 VueJS + jQuery。CSS 框架使用的是 Bootstrap 3.3.6,这个是一直没有变(虽然我也曾经想过使用4.0的alpha版,不过最后还是忍住了)。图标使用了font-awesome 4.7.0,也是没有改。一直折腾了一个月(这中间还有因为对 ASP.NET Core 不够熟悉而付出的学习成本),整个12月将要过完的时候,我才只完成了 Layout 和 Login。(其实原来的首页、结构架构也完成了,但只有UI的部分)。
关于技术选择
为什么要选择 ASP.NET Core?
我的一个基本判断是:带有类型检查的语言应该是未来的趋势。虽然从历史角度看,动态类型和静态类型总是交替上台表演的。不过,随着程度规模的不断变大(想当年一个 DOS 程序就几十,几百K,求伯君可以使用彙編擼一個 WPS 出來,而現在一個手機 App 也是几十MB),动态语言的一些不方便的方面是突显出来了。特别是多人协作开发的时候,因为没有类型的静态类型检查,很多错误都只能在运行的时候才能发现。其实这个问题如果配合上足够的单元测试,也是可以减轻一些的,然而到了2016年,还是有很多人把测试当成负担。结果就是大量的 bug 和安全漏洞,以及改了补了一个洞,又开了三个洞。
从现实情况看,PHP 7 已经引入了一些类型标注,Python 3.5 也有这样的东西,JS 系里