【NopCommerce源码架构学习-一】--初识高性能的开源商城系统cms

摘要:
我认为,通过阅读NopCommerce的源代码,我们可以学到很多企业系统、软件开发规范以及一些新技术和技术,这些都可以快速提高我们的技术能力。所以我最近决定写一系列“NopCommerce源代码体系结构的细节”来详细分析NopCommCommerce的体系结构和原理。不商业主要是从上到下:不。网络,没有。管理员,没有。框架,没有插件,没有。服务,没有。核心和否数据。下图显示了nopcommerce最新版本3.8的源代码结构:1.LibrariesLibraries文件夹中的项目主要是公共库代码。没有。核心:封装项目使用的基本核心类和接口。

很多人都说通过阅读、学习大神们高质量的代码是提高自己技术能力最快的方式之一。我觉得通过阅读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源码架构学习-一】--初识高性能的开源商城系统cms第1张

后台管理页面:

【NopCommerce源码架构学习-一】--初识高性能的开源商城系统cms第2张

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.8的源码结构:

【NopCommerce源码架构学习-一】--初识高性能的开源商城系统cms第3张

1、Libraries

Libaries文件夹下项目主要是一些公共库代码。

Nop.Core:封装了项目要用的基础核心类,接口。比如领域对象类,缓存类、接口,扩展方法等等。

Nop.Data:EF相关的数据访问相关的类封装和扩展。里面最关键的就是Mapping,Nop采用代码API的形式来建立Model和数据库表之间的映射,命名都是以“表名+Map”的形式。比如:

  1. using System.Data.Entity.ModelConfiguration;
  2. using Nop.Core.Domain.Blogs;
  3. namespace Nop.Data.Mapping.Blogs
  4. {
  5. publicpartialclassBlogCommentMap:EntityTypeConfiguration<BlogComment>
  6. {
  7. publicBlogCommentMap()
  8. {
  9. this.ToTable("BlogComment");
  10. this.HasKey(pr => pr.Id);
  11. this.HasRequired(bc => bc.BlogPost)
  12. .WithMany(bp => bp.BlogComments)
  13. .HasForeignKey(bc => bc.BlogPostId);
  14. this.HasRequired(cc => cc.Customer)
  15. .WithMany()
  16. .HasForeignKey(cc => cc.CustomerId);
  17. }
  18. }
  19. }

以后我会详细的说明这个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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UDP广播-缓冲区过小SRP6协议分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

几种开源工作流引擎的简单比较

目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 其他几种工作流引擎的特性。   Apache ODE Enhydra Shark Bonita Open Business Engine Eclipse JWT  支持的流程建模标准  WS-BPEL 2.0,流程定义必须使用该标准编写才能执行 WfM...

Cmake实战指南

0 综述 我觉的Cmake比较核心的一些东西就是 怎么去组织一个项目的编译框架 最终输出目标有哪些(可执行程序,动态库,静态库等等) 怎么为指定的输出目标指定编译参数(需要哪些源文件,需要哪些编译参数) 怎么为指定的输出目标指定链接参数(需要哪些外部库,需要哪些链接参数) 如果存在多个独立输出目标是否有执行先后顺序(比如项目有自动配置工具,用来自动生...

[转]OpenTK学习笔记(1)-源码、官网地址

OpenTK源码下载地址:https://github.com/opentk/opentk OpenTK使用Nuget安装命令:OpenTK:Install-Package OpenTK -Version 3.0.1  OpenTK.GLControl:Install-Package OpenTK.GLControl -Version 3.0.1 Open...

hwclock和date源码分析

一. hwclock 1.1 hwclock源码在哪里? util-linux 或者busybox 1.2 获取源码 git clone https://github.com/karelzak/util-linux.git 或 git clonegit://git.busybox.net/busybox 1.3 hwclock的源码路径 sys-utils...

PureMVC源码分析

PureMVC 是在基于模型、视图和控制器 MVC 模式建立的一个轻量级的开源应用框架,具有跨平台语言无关性。最初被应用于adobe flex,actionScript开发中,现已被移植到包括c++,java,c#,php等主要语言平台上,在各平台上的实现方式也几乎一样,降低了用户学习成本。 本文从PureMVC actionScript版源码角度分析P...

Mybatis3源码笔记(一)环境搭建

1. 源码下载 地址:https://github.com/mybatis/mybatis-3.git。 国内访问有时确实有点慢,像我就直接先fork。然后从git上同步到国内的gitte上,然后在idea上一波clone下来,速度就比较理想了。 2. mybatis-parent 项目依赖mybatis-parent,下载mybatis-parent。...