NopCommerce源码架构详解--初识高性能的开源商城系统cms
很多人都说通过阅读、学习大神们高质量的代码是提高自己技术能力最快的方式之一。我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统、软件开发的规范和一些新的技术、技巧,可以快速地提高我们的技术能力。所以我最近决定写一个“NopCommerce源码架构详解”的系列,来详细剖析NopCommerce的架构和原理。
Nopcommerce主要用到的技术及特点:
1、Entity Framework
2、ASP.NET mvc
3、IoC容器+依赖注入(Autofac)
4、使用EF中的EntityTypeConfiguration+Repository模式+领域驱动开发
5、插件技术
6、Themes主题技术
7、Ajax
8、Validator验证技术
9、面向接口编程
10、事件通知、日志机制
11、缓存(System.Runtime.Caching.MemoryCache)
12、网站计划任务
13、消息队列
14、多语言支持
15、Jquery UI+kendo UI
16、多网店支持、促销推广、在线支付
17、seo友好支持
18、其它asp.net MVC和c#最新核心技术
Nopcommerce是国外的一个高质量的开源b2c网站系统,最新版是基于Entity Framework6.0和MVC5.0,使用razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的,基于xml的多语言版本,非常灵活的语言切换功能,包括在后台都能同时编辑产品的中英文属性,非常适合做外贸,优秀超前的程序架构,性能也非常强大,自定义的产品名称和分类又有很好的seo优化。综合能力远远高于国内的一些程序架构糟糕的.net商城程序,是二次开发和大型b2c架构的首选。3.0开始支持多店。
前台页面效果:

后台管理页面:

NopCommerce最新版的在CodePlex的源码下载。
nopcommerce主要从上往下Nop.Web、Nop.Admin、Nop.Web.Framework、Nop插件、Nop.Services、
Nop.Core、Nop.Data。引用的第三方模块EntityFramework,Autofac(控制反转,即依赖注入),telerik.extern.mvc(后台管理用的界面,2.0后开始使用)。
下图是nopcommerce版本3.4的源码结构:

1、Libraries
Libaries文件夹下项目主要是一些公共库代码。
Nop.Core:封装了项目要用的基础核心类,接口。比如领域对象类,缓存类、接口,扩展方法等等。
Nop.Data:EF相关的数据访问相关的类封装和扩展。里面最关键的就是Mapping,Nop采用代码API的形式来建立Model和数据库表之间的映射,命名都是以“表名+Map”的形式。比如:
- using System.Data.Entity.ModelConfiguration;
- using Nop.Core.Domain.Blogs;
- namespace Nop.Data.Mapping.Blogs
- {
- public partial class BlogCommentMap : EntityTypeConfiguration<BlogComment>
- {
- public BlogCommentMap()
- {
- this.ToTable("BlogComment");
- this.HasKey(pr => pr.Id);
- this.HasRequired(bc => bc.BlogPost)
- .WithMany(bp => bp.BlogComments)
- .HasForeignKey(bc => bc.BlogPostId);
- this.HasRequired(cc => cc.Customer)
- .WithMany()
- .HasForeignKey(cc => cc.CustomerId);
- }
- }
- }
以后我会详细的说明这个Mapping的怎么实现的以级这样做的好处。
Nop.Services:真正的处理数据的业务层,都是通过面向接口编程,减少对具体实现的依赖。
2、Plugins
Plugins文件夹下是放的插件项目,你也可以按照规则开发属于自己的插件。
3、Presentation
Presentation中文意思是呈现、表现的意思。也就是这文件夹下的项目都是解决方案的表示层。
Nop.Admin:后台管理
Nop.Web:前台Web项目
Nop.Web.Framework:Web及MVC相关扩展和公共类的封装,比如:BaseController,Seo相关,主题Themes,autofac依赖注入DependencyRegistrart等等。
4、Tests
Tests下面放的都是对应项目的单元测试。
NopCommerce源码架构详解--初识高性能的开源商城系统cms的更多相关文章
- NopCommerce源码架构详解
NopCommerce源码架构详解--初识高性能的开源商城系统cms 很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从 ...
- 【NopCommerce源码架构学习-一】--初识高性能的开源商城系统cms
很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们 ...
- Nop--NopCommerce源码架构详解专题目录
最近在研究外国优秀的ASP.NET mvc电子商务网站系统NopCommerce源码架构.这个系统无论是代码组织结构.思想及分层都值得我们学习.对于没有一定开发经验的人要完全搞懂这个源码还是有一定的难 ...
- NopCommerce源码架构
我们承接以下nop相关的业务,欢迎联系我们. 我们承接NopCommerce定制个性化开发: Nopcommerce二次开发 Nopcommerce主题开发 基于Nopcommerce的二次开发的电子 ...
- Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览
一.设计原理 1.Hadoop架构: 流水线(PipeLine) 2.Hadoop架构: HDFS中数据块的状态及其切换过程,GS与BGS 3.Hadoop架构: 关于Recovery (Lease ...
- Hadoop3.1.1源码Client详解 : 写入准备-RPC调用与流的建立
该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 关于RPC(Remote Procedure Call),如果没有概念,可以参考一下RMI(Remot ...
- Hadoop3.1.1源码Client详解 : 入队前数据写入
该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 紧接着上一篇: Hadoop3.1.1源码Client详解 : 写入准备-RPC调用与流的建立 先给出 ...
- Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之DataStreamer(Packet发送) : 主干
该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 在上一章(Hadoop3.1.1源码Client详解 : 写入准备-RPC调用与流的建立) 我们提到, ...
- Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之ResponseProcessor(ACK接收)
该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 紧接着上一篇文章: Hadoop3.1.1源码Client详解 : Packet入队后消息系统运作之D ...
随机推荐
- Kinetic使用注意点--lable
new Lable(config) 参数: config:包含所有配置项的对象. { x: "横坐标", y: "纵坐标", width: "宽度&q ...
- 内置对象之Cookie
if (!this.IsPostBack) { try { HttpCookie MyCookie = new HttpCookie("MyCookie"); MyCookie.V ...
- Js 处理将时间转换 “年-月-日”
将时间 \/Date(1432828800000+0800)\/" 转换成:“年-月-日” //时间转换function ChangeDateFormat(val) { if (v ...
- 论文阅读(2014-1)----a new collaborative filtering-based recommender system for manufacturing appstore: which applications would be useful to your busines?
这篇论文讲的东西并不深,讲的是appstore上的app个性化推荐问题,简单做个笔记. 简单介绍: 推荐系统可以降低没有卖任何app就离开的用户的概率.当用户买了某个app后,可以推荐配套的app.增 ...
- Linux下使用GDB调试程序
问题描述: Linux下使用GDB调试程序 问题解决: (1)生成调试文件 注: 使用命令 gdb IOStream.c -o IOStre ...
- jquery中json数据转换为字典
首先在前台页面中的json数据为 var recipe = {}; recipe["name"] = $("#name").val(); recipe[&quo ...
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 382 Solved: 111[Submit][S ...
- css的优先级以及!important的使用
CSS的优先级应该是作为CSS基本知识而广为知道的,所以CSS入门后,就一直把CSS的优先级记挂在心里(自觉告诉自己这地方很可能会摔跤).起初可能是因为自己的项目经验不够丰富,或者是自己所接触到的项目 ...
- sql批量删除wordpress所有日志修订revision
wordpress日志修订是所有速度慢的罪恶之源,每次在后台发布或修改文章的时候,数据库都会产生一个revision版本的记录,几百篇日志会有几千条日志修订的记录,如果更多文章的话,那一个网页打开可能 ...
- c_str 以及atoi
const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类 ...