以下为做fecshop的初衷和fecshop的简介
1.关于对magento的情感
自从2010年进入外贸电商,就开始玩magento,magento一直以来,以seo友好,容易收录,功能强大,可配置性强,灵活度大,支持度高等各个方面完胜其他开源框架,基于xml的配置和基于EAV数据表模型,让magento的插件和模板异常的丰富,magento的插件,基本上可以在不修改源文件的前提,修改任意magento代码,当然,这些都是有代价的,magento的初始化必须加载完所有的xml文件才能进行解析controller,初始化过于笨重,自身的框架过于雍容,在速度,并发方面一直处于劣势,尤其是EAV模型的数据库模型,让magento在产品数据增多的情况下,一旦超过10000个产品后,性能就会带来一定的下降,当产品超过3,4万,性能明显下降,对mysql的内存消耗非常大,当插件增多的情况下,php端对xml解析对服务器的资源吃的也比较厉害。另外在产品很多,store很多的情况下,indexer索引也是硬伤,关于magneto的一些问题,我在知乎上面回答了一个问题:https://www.zhihu.com/question/19813425#zh-question-answer-wrap
总之,magento的灵活度高,解决了自身版本升级,第三方插件升级,和用户二次开发之间冲突的问题,通过配置的方式来协调使用那一块文件代码,magento除了自身功能完善,还有大量的第三方插件和模板,让magento这个闭环更加的完善,但是magento的并发性能较差,日ip超过2万的情况下,没有varnish,2台独立主机都很难平稳的抗住,另外,重构magento的某个底层也是比较困难,这些都是magento的不足。
2.对yii2的情感。
从2014年接触yii2,用yii2做了3个项目,一个电商网站,一个erp系统,一个业务数据分析系统,对yii2框架的认知加深后,越来越喜欢这个php框架,在架构方面非常的优秀,全程基于配置,用户可以在不修改yii2文件代码的前提下修改和扩展yii2框架的功能,单例模式的组件,等基于控制反转的思想设计而成,还有model的role验证,命令行模式的批处理console,类似于一个小系统的模块,多入口应用,可以新建一堆类似frontend,backend这样的入口应用,安全性高,可以通过bootstrap配置加入初始化代码,数据库升级migrate等,yii2是一个非常适合做产品的框架。
3.fecshop的想法
作为一个电商系统产品,我认为有两个大问题比较关键:
3.1 产品自身功能升级,和第三方插件扩展升级,和用户自身二次开发的矛盾的解决, 总体来说就是:各自在各自的文件系统中开发,通过配置的方式覆盖,yii2的配置是基于数据,而不是magento那类笨笨的xml,资源消耗小
3.2 对底层功能的重构和选择,对于一个底层的功能,譬如购物车,我前期用的是基于session,后期我发现不行,我需要吧购物车数据放到mysql中,后来我又想放到redis中(假设),如果我是标注的mvc模式,重构将非常的困难,因为对购物车的操作散步在各个地方,不知道那个地方会漏掉,因此,我们需要更改我们的模式,我想到的是用组件的形式提供服务,各个模块不允许调用数据库,只能通过对服务的调用来完成功能,如果我想重构某个服务,我只需要把这个服务组件里面所有的public方法实现即可,数据的流向为: model –>service component –>module->block->view
这样,我甚至可以对同一个功能做多个服务组件,譬如购物车,我做了session cart,mysql cart让用户选择。
糅合yii2的新型思维,mongodb的多维数组,mysql的事务性,mongodb的强大配置和灵活度,我想基于mysql和mongodb数据库,用yii2框架,参膜magento的灵活,实现一套电商开源系统,我给予的名字为fancy ecommerce shop,简称fecshop。