一、nop简介
nopcommerce是国外的一个高质量的开源b2c网站系统,基于EntityFramework4.0和 MVC3.0,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的,基于xml的多语言版本,非常灵活的语言切换功能,包 括在后台都能同时编辑产品的中英文属性,非常适合做外贸,优秀超前的程序架构,性能也非常强大,自定义的产品名称和分类又有很好的seo优化。综合能力远 远高于国内的一些程序架构糟糕的.net商城程序,是二次开发和大型b2c架构的首选。3.0开始支持多店。nopcommerce主要模块从上往下Nop.Web、Nop.Admin、Nop.Web.Framework、Nop插件、Nop.Services、Nop.Core、Nop.Data。引用的第三方模块EntityFramework,Autofac(控制反转,即依赖注入),telerik.extern.mvc(后台管理用的界面,2.0后开始使用)。
嘿嘿,百度的内容果然不怎么靠谱,有一些错误在里面,大家凑合看看吧。不爽的童鞋请直接访问官方网站:http://www.nopcommerce.com
二、技术水平
1、做了n年Powerbuilder开发,曾短暂学习过PHP框架ThinkPHP,.net领域菜鸟一枚。
2、C#语法:初步了解。
3、Asp.net:初步了解
4、MVC:初步了解。
5、ORM框架:NPoco学习中
6、前端:HTML略懂,JS初步了解。
7、其他:没有了。
三、学习目标
1、能读懂Nop源码。
2、搞清楚某些.net基础概念及应用,如Ioc、Cache等。
3、分离出一套asp.net开发框架,作为以后开发asp.ent应用的基础。
4、在此框架基础上,整理出一套asp.net应用开发的最佳实践。
四、学习思路及历程
鉴于篇(lan)幅(duo)原因,我就不放具体代码了,只说思路。
1、搜集所有关于Nop的中文文章(悲催的英语水平),包括但不限于cnblogs、CSDN,共找到有价值的文章共36篇。
2、通读能看得懂文章,以@王一一的《Nop源码分析》三篇文章为起点,开始阅读Nop源码。地址:http://www.cnblogs.com/wdwyy/p/3292771.html
3、穿插学习涉及到的.net概念及类库,主要是Ioc的AutoFac。推荐文章:@许两会 http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html
4、对我而言,就算有文章指导,再看了n天之后,对Nop还是仅仅了解了皮毛,Nop太复杂了。于是绝对动手对代码进行拆迁。
五、强拆之路
1、拆迁目标:
a. 拆除绝大多数业务功能,保留一个可用的Asp.net开发框架。
b. 根据个人喜好,拆除EF,替换成NPoco。
2、拆迁记录——Libraries篇:
a. 将 Nop.Core 中的 Data 文件夹与 Domain 文件夹移出,此时 Nop.Core 即可移除对EF的依赖。
b. 将上述两个文件夹放到新建的 Nop.Domain 解决方案中,并引用 NPoco 类库,参照Nop的EF代码实现NPoco的代码。
c. 由于NPoco 只支持Poco,不支持内联实体(我自己起的名),故需要修改 Domain 下的所有继承于 BaseEntity 类,对其扩展属性(内联实体)增加 NPoco 标识 [Ignore] 。
d. Nop.data 是 Nop数据库层 与 Service层 的一层抽象和Mapping,不知道啥用处,经测试可剥离,果断拆除!
e. Nop.Service。只要NPoco替换EF的阶段做的足够好,Nop.Service基本很少需要修改。因为我没(bu)有(hui)实现 IDataProvider,因此需要将于此有关的代码修改掉。
f. 此时编译 Nop.Web 项目,编译成功,并可以运行看到Nop首页。
3、拆迁记录——Plugin篇:
a. Nop.Plugin ,插件功能很高大上,但以我目前的能力啃不动,拆除先。
4、拆迁记录——Presentation篇:
a. 略微看了一下 Nop.Web 的架构,唉呀妈呀,太复杂了,基本没有使用MVC的默认配置,完全重新实现,从Router到Razor再到Themes,我肯定吃不消的,放弃先。
b. Nop.Admin还不错,多了一个Telerik,就拿他开刀吧。PS:如果用BootStrap框架就好了,BootStrap是我梦寐想学的前端框架……
c. 新建 Nop 解决方案,引入『2』中生成 Nop.Core 以及NPoco。
d. 引入『2』中生成的 Nop.Domain,删除业务相关的 Entity,只保留框架相关的 Entity。经过后期的反复调试,保留以下:
d. 新建 Nop.Service 项目,只保留框架相关 Service,删除业务 Service。
e. 新建 Nop.Web 及 Nop.Web.Framework,从 Nop.Admin 中复制 HomeCotrollor.cs 到 Nop.Web,然后依次查找各依赖项,反复进行『复制/粘贴/调试』操作……最终可以得到一个简化的 Nop.Web 和 Nop.Web.Framework。
六、总结——路漫漫其修远兮
1、经过近三个周(晚上/周末)的学习、拆迁奋战,终于得到了一个完整的 Nop.Core + 一个简化的 Nop.Web。
2、略懂了 Ioc 思想,赞叹了 Ioc 架构的灵活。(可轻易的剥离EF,替换成NPoco)。
3、Nop 的 Presentation 层太复杂了,决定用标准的 MVC + BootStrap,参照Nop.Web代码重写一个简易的网店应用。
4、意外得到一个小甜点:Nop.Web 使用了MiniProfiler监控页面,而NPoco的官方文档中也有 MiniProfiler 的应用方法,看实例:
还可以点击放大看明细,一下子有种世界尽在掌握的感觉有木有!!!
以上。
祝愿:世界和平、人民安康。 “虚惊一场”是人世间最美好的成语———韩寒。