源码下载地址:http://nopchina.net/page/nopcommerce-download.html
最新版nop3.6,建议大家下载这个,因为学习技术当然学习最新的比较好,NOP的每个新版本都会用上一些新技术,这点也是学习NOP的价值之一。
一 项目框架介绍
这个就是用VS打开的页面了,
nop每次升级都会把package里面的dll升到最新版,所以NOP3.4里面需要.net framework 4.5.1,这个需要先安装上,要不然项目是打不开的, 个人建议直接安装VS2013,方便快捷,因为我发现自己安装了独立的.net framework 4.51发现项目还是打不开,悲剧。
项目打开之后,我们做下整体的分析:上面有四个文件夹
1.Libraries(库)
Nop.Core项目包含NopCommerce的一系列核心类文件,包含以下内容
缓存 NOP的缓存机制
组件模型 只有两个文件,一个用来做类型转换的,一个用来锁定访问资源的,还没具体研究,不影响做项目
配置
数据
表模型 表模型的修改比较常用,数据库里对表数据字段的一些操作都要在这里做相应的操作。
事件
页面操作重写 这个具体啥用不知道,按照名字猜测应该是对虚假用户访问的一些处理的方法。
界面帮组类 前端的View的一些帮助方法,比如文本转换成HTML,HTML转换成文本之类的
框架 域名查找,引擎上下文,计划任务,类查找,NOP引擎,单例模式
插件方法,以及一些扩展extenstion类。
Nop.Data项目包含相关和数据操作有关的类,如数据初始化类、数据映射类、还有一些EF的类。Nop提供很好的API可完全定制持久映射。
Nop.Services故名思意,是业务逻辑层,包含验证。即BAL层
如果大家刚开始学习NOP,不理解也没关系, 因为我也有很多不理解的,后面我们会详细做讲解,但是不懂这些并不妨碍我们做项目。
2.Plugins(插件)
这个Plugins文件夹顾名思义就是插件文件夹,里面存放的是一些NOP使用的插件,其实里面的很多插件我们国内是用不到的,我们只需要熟悉其中一个就可以大致明白它的原理,建议使用支付宝插件,自己做下修改调整就可以了解了,支付宝插件群里有共享,有需要的可以直接下载,这个我的感觉是前期对做项目没有很大的帮助,暂时知道有这么个东西就行了,等后期NOP的代码基本上熟悉了,这个也就没难度了。
3.Presentation(陈述)
Nop.Admin 这个是Nop的后台项目代码,值得一提的是Nop的后台在项目上虽然是分离的,但是运行上却是一起的,我们只要用管理员登陆账号登陆之后,在首页的头顶位置会出现一个administration的链接进入后台,如下图所示。
原理是Nop.Admin的Dll输出路径为..\bin\,而且项目路径为Nop.Web\Administration,也就是说,Nop.Admin的DLL放置在了Nop.Web文件夹的bin文件夹之下,这样在运行的时候它们可以在同一个站点,再加上MVC的Areas(对每个功能模块使用ASP.NET MVC规则的目录结构和命名方法。可以把不同的项目集合进行模块划分,这样可以完整的把项目分离,相互之间不会发生关联,比如我Nop.Web文件夹下有个CustomerControl,在Nop.Admin文件夹下也有个CustomerControl,如果是同一个站点会发生冲突,要不然就得建立两个命名空间,但引入了MVC的Areas则可以解决这个问题,这样各自的项目负责各自的事情,更符合程序开发的高类聚低耦合的思想),两个项目同时运行在一个站点,完全互不影响。
Nop.Web 这个就是我们的网站运行项目了,把这个设为起始项,运行项目就能跑起来。
Nop.Web.FrameWork 此项目为Web的框架层,一些控制器的基类、属性类、路由等前端和后端公用的类库都放在该项目下。
4.Tests
这个是Nop的单元测试项目。
二 NOP数据库安装
介绍了大致的框架内容,我们要做的就是把项目跑起来,设置Nop.Web 为起始项目,然后运行之后的界面如下:
NOP的数据库可以使用在线安装的方式,它默认检查你Nop.Web\App_Data\Setting.txt的文本文件,如果这里面有连接数据库的字符,则不会出现这个界面。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //initialize engine context EngineContext.Initialize( false ); //model binders ModelBinders.Binders.Add( typeof (BaseNopModel), new NopModelBinder()); //判断数据库是否安装 bool databaseInstalled = DataSettingsHelper.DatabaseIsInstalled(); if (databaseInstalled) { //remove all view engines ViewEngines.Engines.Clear(); //except the themeable razor view engine we use ViewEngines.Engines.Add( new ThemeableRazorViewEngine()); } |
public partial class DataSettingsHelper { private static bool? _databaseIsInstalled; public static bool DatabaseIsInstalled() { if (!_databaseIsInstalled.HasValue) { var manager = new DataSettingsManager(); var settings = manager.LoadSettings(); _databaseIsInstalled = settings != null && !String.IsNullOrEmpty(settings.DataConnectionString); } return _databaseIsInstalled.Value; } public static void ResetCache() { _databaseIsInstalled = null; } }
点击确定之后,会转到InstallController,代码如下
数据填写正确之后,项目就可以正式运行出来,数据来源的原理就是利用appdata里的几个.sql文件。
三 项目发布
NOP的发布和普通网站的发布类似,不同的一点是需要引用脚本映射
这样,一个NOP的站就运行起来了,效果可参考http://demo.nopchina.net/