nopCommerce 学习之路(一)Nop之强制拆迁

时间:2021-11-23 08:06:20

一、nop简介

按照国际惯例,先介绍一下文章的主角——nopCommerce,于是,以下内容来自百度百科:
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] 。

    nopCommerce 学习之路(一)Nop之强制拆迁

  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。经过后期的反复调试,保留以下:

   nopCommerce 学习之路(一)Nop之强制拆迁

  d. 新建 Nop.Service 项目,只保留框架相关 Service,删除业务 Service。

      nopCommerce 学习之路(一)Nop之强制拆迁

  e. 新建 Nop.Web 及 Nop.Web.Framework,从 Nop.Admin 中复制 HomeCotrollor.cs 到 Nop.Web,然后依次查找各依赖项,反复进行『复制/粘贴/调试』操作……最终可以得到一个简化的 Nop.Web 和 Nop.Web.Framework。

    nopCommerce 学习之路(一)Nop之强制拆迁

 

六、总结——路漫漫其修远兮

  1、经过近三个周(晚上/周末)的学习、拆迁奋战,终于得到了一个完整的 Nop.Core + 一个简化的 Nop.Web。

  2、略懂了 Ioc 思想,赞叹了 Ioc 架构的灵活。(可轻易的剥离EF,替换成NPoco)。

  3、Nop 的 Presentation 层太复杂了,决定用标准的 MVC + BootStrap,参照Nop.Web代码重写一个简易的网店应用。

  4、意外得到一个小甜点:Nop.Web 使用了MiniProfiler监控页面,而NPoco的官方文档中也有 MiniProfiler 的应用方法,看实例:

     nopCommerce 学习之路(一)Nop之强制拆迁

     还可以点击放大看明细,一下子有种世界尽在掌握的感觉有木有!!!

 

  以上。

 

  祝愿:世界和平、人民安康。 “虚惊一场”是人世间最美好的成语———韩寒。