NopCommerce简介
NopCommerce是国外的一个高质量的开源b2c网站系统,基于.NET Framework 4.6和ASP.NET Core,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的,基于xml的多语言版本,非常灵活的语言切换功能,包括在后台都能同时编辑产品的中英文属性,非常适合做外贸,优秀超前的程序架构,性能也非常强大,自定义的产品名称和分类又有很好的seo优化。综合能力远远高于国内的一些程序架构糟糕的.net商城程序,是二次开发和大型b2c架构的首选。
NopCommerce源码结构
绝大多数的项目,目录和文件都顾名思义,你可以从名字就大概知道是做什么的。比如Nop.Plugin.Payments.PayPalStandard这个我都不用看项目代码就能猜到做什么的。
LibrariesNop.Core
Nop.Core项目包含NopCommerce的一系列核心类如缓存,事件,辅助类和业务对象(如订单和客户实体类)
LibrariesNop.Data
Nop.Data项目包含一系列的数据访问类和方法以从数据库或其他数据媒介读取和保存数据。它也有助于把数据访问逻辑和你的业务对象分离。 nopcommerce使用Entity Framework (EF) Code-First方法,允许你在nopcommerce代码中定义实体 (所有的核心实体类都在Nop.Core中定义),再让EF生成数据库,这就是为什么会叫Code-First。你接下来可以用LINQ来查询对象,它自己会把查询转换为SQL语句并在数据库里执行。nopcommerce拥有牛B的API让你完全定制持久映射,官方文档说明,由于.NET Core 中EntityFrameworkCore2.0还没有很好的延时加载机制,所以暂时继续使用EntityFramework6.0,所有项目也暂时基于.NET Framework 4.6。
LibrariesNop.Services
此项目包含一系列的核心服务,业务逻辑,验证,如果有数据的话还有数据的计算方法,也就是传说中的业务访问层(BAL)
Plugins 文件夹中的那些项目
Plugins是VS的解决方案文件夹,硬盘中它是在你解决方案的根目录下。由于项目在编译时的输出路径是”....PresentationNop.WebPlugins{Group}.{Name}”,这样插件的DLL会自动地放到 PresentationNop.WebPlugins文件夹中,用来放置已部署插件。这样也能让插件包含静态文件比如CSS或JS,就不用在项目之间拷贝这些文件了。
PresentationNop.Web
Nop.Web也是一MVC项目,网店的表示层,里面有一个Areas包含了Admin管理后台,去掉了以前的版本中的Nop.Admin项目,这个才是你真正要跑起来的项目,它也是整个应用程序的起始项目。
PresentationNop.Web.Framework
Nop.Web.Framework是一个表示层的类库项目,包括可以让Nop.Web使用的一些共用的展示功能。
Test文件夹中的那些项目
每一个项目都有一个测试项目,进行单元测试,这个是很好的编码习惯。
NopCommerce系统架构
从文件结构中我们也可以看出Nop的层次划分还是非常清晰,下面我将介绍下Nop的架构层次,并对每个层做简要的介绍,先看我画的层次图。
这个系统基本上按照了ddd的形式做了划分,数据层被做了很严格的隔离,充分的从系统中解耦出来,如果将来换数据库并不是什么难事,只需要重写数据层对数据的实现即可。