近来使用NopCommerce进行开发,仿照源码的Demo也能做出看上去还蛮高端大气上档次的系统出来,现下准备深入学习学习。首先从官方的Documentation开始看起,先来一篇官网文章的翻译(园里已有类似文章,觉得我翻译水平差的请参照相关文章)。

  原文地址:http://www.nopcommerce.com/docs/71/source-code-organization-architecture-of-nopcommerce.aspx.


     源代码的组织以及nopcommerce的架构

  对于开发者来说,这篇文档可以指导你了解nopCommerce的系统结构。对于刚接触nopCommerce的开发者,这份文档是你学习nopCommerce源码的基础。首先,nopCommerce的源码是很容易获取的。它是一个开源的应用程序,所以,你只需要简单的从官网上下载就能获取到我们的源码。这些项目以及文件夹按它们在Visual Studio中的顺序陈列出来。当你读到这篇文档时,我们建议你在Visual Studio中打开nopCommerce解决方案来浏览里面的工程项目。

  

  

  大多数的工程项目、目录以及文件的命名都是为了让你能够对它的意图首先有一个粗略的了解。例如,我们甚至不用去看这个叫作Nop.Plugin.Payments.PayPalStandard的工程项目内部的代码,就能猜到它是用来做什么的。

  

  \Libraries\Nop.Core

  Nop.Core工程项目包含了一些nopCommerce的核心类(core classes),诸如缓存,事件,帮助和业务对象(例如,订单和用户实体)。

  

  \Libraries\Nop.Data

  Nop.Data工程项目包含了一些用于读写数据库或者其它数据存储的类和方法。它有助于将你的数据访问逻辑与你的业务对象分离开来。nopCommerce使用Entity Framework (EF) 代码优先方法。这样能让你在代码中定义数据实体(所有的核心实体都被定义在Nop.Core工程项目当中),并且能根据你刚才定义的数据实体生成数据库。这就是它被叫做代码优先的原因。这样做后,你能够使用LINQ访问你的对象,而LINQ能自动翻译成SQL在数据库中执行。nopCommerce使用fluent code API 来充分的定制持久映射。你可以从或者了解更多关于代码优先的信息。

  

  \Libraries\Nop.Services

  这一工程项目当中包含了一系列核心的Services,业务逻辑,验证或者与数据相关的计算。如果需要,一些人称它为业务接入层(BAL)。

  在 \Plugins\ 解决方案文件夹下的工程项目

  \Plugins 是一个包含插件工程项目的Visual Studio解决方案文件夹。它位于你解决方案的根目录下。但是插件的DLLS(动态链接库?)被自动的拷贝到\Presentation\Nop.Web\Plugins\目录,它用于放置已经发布的插件。因为所有插件生成的输出路径都被设置为"..\..\Presentation\Nop.Web\Plugins\{Group}.{Name}\"。这样做可以让插件包含其它的外部文件,诸如一些静态内容(CSS 或者 JS 文件)而不必为了项目能够运行而在各个工程项目之间拷贝文件。

  

  \Presentation\Nop.Admin

  Nop.Admin是一个MVC Web应用程序项目。如果你从未使用过MVC,请点击获取跟多信息。正如你所猜到的,它是一个admin 区域的展示层。这一工程项目位于\Presentation\Nop.Web\Administration目录之下。这一工程项目不能运行。

  

  \Presentation\Nop.Web

  Nop.Web也是一个MVC Web应用程序项目,一个公有区域的展示层。它就是你实际能够运行的应用程序。它是应用程序的启动项目。

  

  \Presentation\Nop.Web.Framework

  Nop.Web.Framework是一个类库工程项目,它包含了一些Nop.Admin 和 Nop.Web 工程项目共同需要呈现的东西。

  

  \Test\Nop.Core.Tests

  Nop.Core.Tests是用于Nop.Core 工程项目的测试。

  \Test\Nop.Data.Tests  

  Nop.Data.Tests用于Nop.Data工程项目的测试。

  

  \Test\Nop.Services.Tests

  Nop.Services.Tests用于Nop.Services工程项目的测试。

  

  \Test\Nop.Tests

  Nop.Tests是一个类库,它包含一些公共测试类以及其它测试项目的帮助文件。它没有任何测试。

  

  \Test\Nop.Web.MVC.Tests

  Nop.Web.MVC.Tests用于是展示层的测试。


 Time:  2013-11-28

NopCommerce——源代码的组织,以及系统的架构的更多相关文章

  1. SaaS系列介绍之十三: SaaS系统体系架构

    1 系统体系架构设计 软件开发中系统体系架构决定了一个系统稳定性.健壮性.可扩展性.兼容性和可用性,它是系统的灵魂.体系架构是架构师所关注的核心.良好的体系架构是系统成功的开端,否则,再好的代码与设计 ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. 【转载】ROS系统整体架构

    目录 1.从文件系统级理解 2.从计算图级理解 3.从开源社区级理解 由于ROS系统的组织架构比较复杂,简单从一个方面来说明很难说清楚.按照ROS官方的说法,我们可以从3个方面来理解ROS系统整体架构 ...

  4. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  5. 标准Web系统的架构分层

    标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...

  6. 标准Web系统的架构分层[转]

    标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...

  7. (数字IC)低功耗设计入门(三)——系统与架构级

    前面讲解了使用EDA工具(主要是power compiler)进行功耗分析的流程,这里我们将介绍在数字IC中进行低功耗设计的方法,同时也结合EDA工具(主要是Design Compiler)如何实现. ...

  8. Atitit.收银系统模块架构attilax 总结

    Atitit.收银系统模块架构attilax 总结 1. 常规收银系统模块结构1 1.1. 商品管理1 1.2. 会员系统1 1.3. 报表系统1 1.4. 会员卡系统1 1.5. 库存管理1 2.  ...

  9. 分布式公布订阅消息系统 Kafka 架构设计

    我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础. 如今它已为多 ...

随机推荐

  1. WIN7系统操作快捷键

    轻松访问 按住右Shift八秒钟:启用或关闭筛选键 按左 Alt+左 Shift+PrntScrn(或 PrntScrn):启用或关闭高对比度 按左 Alt+左 Shift+Num Lock :启用或 ...

  2. 读书笔记-UIView与控件

    1.UIView 在Objective-C中,NSObject是所有类的“根”类.同样,在UIKit框架中,也存在一个如此神奇的类UIView.从继承关系上看,UIView是所有视图的根. 1.1.U ...

  3. Swift中的单例的实现方式

    单例在iOS日常开发中是一个很常用的模式.对于希望在 app 的生命周期中只应该存在一个的对象,保证对象的唯一性的时候,一般都会使用单例来实现功能.在OC单例的写法如下: @implementatio ...

  4. 【学习笔记】【C语言】标识符

    1. 什么是标识符 标识符就是在程序中自定义的一些符号和名称.要跟关键字区分开来:关键字是C语言默认提供的符号,标识符是程序员自定义的 2. 标识符的作用 1) 标识符,从字面上理解就是用来标识某些东 ...

  5. MiZ702学习笔记13——ZYNQ通过AXI-Lite与PL交互

    在<MiZ702学习笔记7——尝试自制带总线IP>,我曾提到了AXI4-Lite的简单用法,驱动了下流水灯,只涉及到了写总线.今天,我想利用之前的VGA模块,将AXI4-Lite的读写都应 ...

  6. javascript 获取项目根路径

    /** * http://localhost:8088/projectName */ function getRootPath(){ //获取当前网址,如: http://localhost:8088 ...

  7. js中字符和数组一些基本算法题

    最近在刷 fcc的题,跟升级打怪一样,一关一关的过,还挺吸引我的.今天抽时间把 Basic Algorithm Scritping  这部分题做了,根据一些提示,还是比较简单的.有些题的处理方式 方法 ...

  8. (栈)栈 给定push序列,判断给定序列是否是pop序列

    题目: 输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2. ...

  9. 【风马一族_Python】 实施kNN算法

    一.在PyCharm 5.0.4(编写python程序的IDE) 编写kNN.py文件的代码 -------------------------- 1. kNN.py  运算符模块 --------- ...

  10. NSS_04 extjs中grid接收datetime类型参数列

    今天在做用户列表时发现, asp.net mvc3的控制器在返回JsonResult结果时, 会把对象内的DateTime类型成员,解析为类似于\/Date(1238606590509)\/的格式 , ...