NopCommerce——源代码的组织,以及系统的架构
近来使用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——源代码的组织,以及系统的架构的更多相关文章
- SaaS系列介绍之十三: SaaS系统体系架构
1 系统体系架构设计 软件开发中系统体系架构决定了一个系统稳定性.健壮性.可扩展性.兼容性和可用性,它是系统的灵魂.体系架构是架构师所关注的核心.良好的体系架构是系统成功的开端,否则,再好的代码与设计 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- 【转载】ROS系统整体架构
目录 1.从文件系统级理解 2.从计算图级理解 3.从开源社区级理解 由于ROS系统的组织架构比较复杂,简单从一个方面来说明很难说清楚.按照ROS官方的说法,我们可以从3个方面来理解ROS系统整体架构 ...
- (系统架构)标准Web系统的架构分层
标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...
- 标准Web系统的架构分层
标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...
- 标准Web系统的架构分层[转]
标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...
- (数字IC)低功耗设计入门(三)——系统与架构级
前面讲解了使用EDA工具(主要是power compiler)进行功耗分析的流程,这里我们将介绍在数字IC中进行低功耗设计的方法,同时也结合EDA工具(主要是Design Compiler)如何实现. ...
- Atitit.收银系统模块架构attilax 总结
Atitit.收银系统模块架构attilax 总结 1. 常规收银系统模块结构1 1.1. 商品管理1 1.2. 会员系统1 1.3. 报表系统1 1.4. 会员卡系统1 1.5. 库存管理1 2. ...
- 分布式公布订阅消息系统 Kafka 架构设计
我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础. 如今它已为多 ...
随机推荐
- Intent的4种传值方法总结
xml 代码: <Button android:id="@+id/button1" android:layout_width="wrap_conte ...
- 四步完成ajax的使用
什么是ajax? ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页. 如何使用ajax? 第一步,创建xmlhttprequest对象,var xmlhttp ...
- [转]Mac OS X 下部分Android手机无法连接adb问题之解决方案
时至当今,Android山寨手机厂商已如此之多,能修改和个性化定制Android OS的能人已是多如牛毛,有的牛人修改Android系统只会影响所修改的点,不会影响其它,然后还有的就不多说了,总之做的 ...
- html有序列表和无序列表
css控制UL LI 的样式详解(推荐) CSS: 代码如下: #menu ul {list-style:none;margin:0px;} #menu ul li {float:left;} 代码如 ...
- 【百度地图API】JS版本的常见问题
1.请问如何将我的店铺标注在百度地图上?我是否可以做区域代理?在百度地图上标注是否免费? 答复: 这里只负责API的技术咨询,不解决任何地图标注问题.在百度地图上标注自己公司,即气泡标注业务.该业务已 ...
- Eclipse中tomcat之后,tomcat的相关配置会被Eclipse重置
之前用MyEclipse,在tomcat的conf中修改了配置文件,启动就OK了. 现在改用Eclipse,发现改了,之后发现没有用,Eclipse重启tomcat之后,配置文件就被重置了. 众里寻他 ...
- hdu 1686 Oulipo KMP匹配次数统计
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 分析:典型的KMP算法,统计字符串匹配的次数. 用Next数组压缩时间复杂度,要做一些修改. / ...
- mysql之触发器before和after的区别(2)
我们先做个测试: 接上篇日志建的商品表g和订单表o和触发器 假设:假设商品表有商品1,数量是10: 我们往订单表插入一条记录: insert into o(gid,much) values(1,20) ...
- Spring AOP整理
示例展示 AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充.AOP之所以能得到广泛认可,主要是因为它将应用系统拆分分了 ...
- 利用二维矩阵求spanning tree
只做了9个节点的,无权值,使用了n-1个=8个循环,非常麻烦.一级一级判断是否连接,连接及记录所在节点,以后不再使用,确保无回路. 验证后无回路,但只试过几种情况. 代码如下: #include< ...