首先在此感谢大家对BrnShop项目的支持和鼓励!我们在发布BrnShop以前曾推测项目会受到不少园友的支持,但没想到园友们的支持大大超过我们的预测。4天6000次浏览,140个推荐,170个评论,8000次下载。看到这些数据后我们内心除了激动外,更多了一份责任。无论将来遇到多大的困难,我们一定要坚持把BrnShop坚持到底!!

  如果你还不知道BrnShop是什么或还没有下载源码的可以点此下载,如果下载源码后发现商城有bug,也可以点此下载(什么?你还是1.0.**版本?我们现在都已经更新到1.0.141版本了!)。

  在开始今天的主题前,有个问题先向大家解释下:不少园友运行我们的程序后,以为前台页面功能不完整,于是认为我们的商城是个残缺品,功能不全。在此我针对这个问题向大家郑重说明下:不是我们的功能不全,对于一个商城来说该有的功能我们程序都提供了,不信你可以查看下每个控制器及它的动作方法,就会发现你想要的各个功能。只是这些功能默认主题并没有相应的页面或糅合进别的页面去了。我们的默认主题只提供一个演示功能(君没见Php的ecshop的默认主题更粗糙吗?)。

  好了,下面进入今天的主题:BrnShop开源网上商城架构设计

  拿到源码的朋友知道BrnShop解决方案是由4个解决方案文件夹构成的。它们分别是Libraries,Presentation,Strategies和Plugins,下面是这四个解决方案文件夹的截图和介绍:

  

  • Libraries:商城基础类库,主要提供系统核心,数据访问,业务逻辑等功能。
  • Presentation:商城web展示,提供网站前台和后台实现。
  • Strategies:包含各种策略程序集
  • Plugins:包含开发授权,支付等插件。

  通过上面的介绍大家可以看出其实BrnShop的主要功能都在Libraries和Presentation中,而Strategies和Plugins只是提供程序外围的一些服务。到这相信大家的思路就清晰多了,下面依次介绍各个项目:

  BrnShop.Core项目:这个项目是BrnShop最核心的项目,它提供商城最底层,最基础的服务。首先通过图片给出各个模块的基本介绍:

  

  • 对于异步模块,缓存模块,配置模块,数据模块,邮箱模块,随机值模块,Session模块,短信模块这8个模块来说,BrnShop.Core项目只提供加载和接口,并不包含具体实现。大家请看邮箱模块代码(其它7个模块的实现原理一样):
 1     /// <summary>
2 /// BrnShop邮件管理类
3 /// </summary>
4 public class BSPEmail
5 {
6 private static IEmailStrategy _emailstrategy = null;//邮件策略
7
8 static BSPEmail()
9 {
10 Load();
11 }
12
13 /// <summary>
14 /// 邮件策略实例
15 /// </summary>
16 public static IEmailStrategy Instance
17 {
18 get { return _emailstrategy; }
19 }
20
21 /// <summary>
22 /// 加载邮件策略
23 /// </summary>
24 private static void Load()
25 {
26 try
27 {
28 string[] fileNameList = Directory.GetFiles(System.Web.HttpRuntime.BinDirectory, "BrnShop.EmailStrategy.*.dll", SearchOption.TopDirectoryOnly);
29 _emailstrategy = (IEmailStrategy)Activator.CreateInstance(Type.GetType(string.Format("BrnShop.EmailStrategy.{0}.EmailStrategy, BrnShop.EmailStrategy.{0}", fileNameList[0].Substring(fileNameList[0].IndexOf("EmailStrategy.") + 14).Replace(".dll", "")),
30 false,
31 true));
32 }
33 catch
34 {
35 throw new BSPException("创建\"邮件策略对象\"失败,可能存在的原因:未将\"邮件策略程序集\"添加到bin目录中;将多个\"邮件策略程序集\"添加到bin目录中;\"邮件策略程序集\"文件名不符合\"BrnShop.EmailStrategy.{策略名称}.dll\"格式");
36 }
37 }
38
39 }

  通过以上代码大家不难看出实现的核心思想就是“约定大于配置”和“策略模式”。这里的“约定大于配置”大家需要注意下,如果大家想自己实现一个策略,例如邮箱策略(其它策略一样),请一定要保证符合约定限制,具体就是程序集名一定要满足“BrnShop.EmailStrategy.{自定义名称}.dll”格式,命名空间满足"BrnShop.EmailStrategy.{自定义名称}"格式,主类名必须是“EmailStrategy”。还有一点就是为了保证策略程序集能正确的编译到BilShop.Web项目的bin文件夹中,一定要配置项目生成的输出路径为“..\..\Presentation\BrnShop.Web\bin\”

  目前商城默认实现了每个策略,他们的对应关系及介绍如下:

  

  • 当前只有企业版提供NOSQL实现,所以目前Data文件夹中的NOSQL为空,后期随着企业版的开源也会补上NOSQL代码实现。
  • 插件部分内容比较多,我后面会专门写一遍博客介绍。不过大家可以先看看这篇文章http://shazwazza.com/post/Developing-a-plugin-framework-in-ASPNET-with-medium-trust

  BrnShop.Data项目:这个项目主要是通过调用BrnShop.Core项目中的BSPData类来和各种数据存储做交互,大家可以自己看下代码,都有注释,没什么难度。PS:前几天园子里有个朋友说想用EF替换掉sql语句和存储过程,他当时的替换点是重写BrnShop.Data项目,在此我不反对他使用EF,只是替换点不应该是BrnShop.Data项目,而是BrnShop.RDBSStrategy.SqlServer策略程序集。

  BrnShop.Services项目:商城的业务功能实现,如果你想找商城某个功能的实现可以来这个项目中找,例如购物车的实现。PS:在BrnShop.Service项目中有个Admin文件夹,这个文件夹是商城后台操作要用到的类。

  BrnShop.Web.Framework项目:这个项目主要提供商城web层面的设计。大家可以打开看一看里面都是自定义控制器类,分页,动作筛选器等MVC方面的东西。

  BrnShop.Web.Admin项目:商城网站后台,这个项目的类型是类库,不是web项目(但mvc的各部分俱全),所以不能直接启动。PS:关于网站发布问题,这里提供一个简单的方法,首先将vs的生成配置改成"release",然后将BrnShop.Web项目中的web.config文件中的compilation节点的debug属性设置成“false”,然后重新生成BrnShop.Web项目,最后把BrnShop.Web项目的文件夹复制并删除无用的文件(例如obj文件夹下的文件)到iis中就可以了。

  BrnShop.Web项目:商城网站前台:使用ASP.NET MVC3实现。各个文件夹或文件解释如下:

  

  今天这一篇博文主要是帮助大家对BrnShop项目有个整体的认识,下一篇我会介绍下BrnShop的ASP.NET MVC实现。敬请期待!

  有对网上商城程序设计感兴趣的朋友,欢迎加入QQ群:235274151,大家可以探讨下!

BrnShop开源网上商城第一讲:架构设计的更多相关文章

  1. BrnShop开源网上商城第二讲:ASP.NET MVC框架

    在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择.下面我依次来说明下. 首先是数据的复用和传递:对于BrnShop的每一 ...

  2. BrnShop开源网上商城第六讲:扩展视图功能

    在正式讲解扩展视图功能以前,我们有必要把视图的工作原理简单说明下.任何一个视图都会被翻译成一个c#类,并保存到指定的位置,然后被编译.这也就是为什么能在视图中包含c#代码片段的原因.下面我们通过一个项 ...

  3. BrnShop开源网上商城第五讲:自定义视图引擎

    今天这篇博文主要讲解自定义视图引擎,大家都知道在asp.net mvc框架中默认自带一个Razor视图引擎,除此之外我们也可以自定义自己的视图引擎,只需要实现IViewEngine接口,接口定义如下: ...

  4. BrnShop开源网上商城第四讲:自定义插件

    重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www.brnshop.com. 好了现在进入今天的 ...

  5. BrnShop开源网上商城第三讲:插件的工作机制

    这几天BrnShop的开发工作比较多,所以这一篇文章来的晚了一些,还请大家见谅呀!还有通知大家一下BrnShop1.0.312版本已经发布,此版本添加了报表统计等新功能,需要源码的园友可以点此下载.好 ...

  6. 文献综述七:基于SSM的网上商城的开发与设计

    一.基本信息 标题:基于SSM的网上商城的开发与设计 时间:2018 出版源:Computer Knowledge and Technology 文件分类:对框架的研究 二.研究背景 为了解决现在电商 ...

  7. vivo商城促销系统架构设计与实践-概览篇

    一.前言 随着商城业务渠道不断扩展,促销玩法不断增多,原商城v2.0架构已经无法满足不断增加的活动玩法,需要进行促销系统的独立建设,与商城解耦,提供纯粹的商城营销活动玩法支撑能力. 我们将分系列来介绍 ...

  8. Python 开源网上商城项目

    django-oscar  https://github.com/django-oscar/django-oscar#screenshots django-shop  https://github.c ...

  9. 开源Asp.Net MVC网上商城BrnShop

    开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载 BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一 ...

随机推荐

  1. 在Mac OS X中搭建STM32开发环境(2)

       本文原创于http://www.cnblogs.com/humaoxiao,非法转载者请自重!     在上一篇文章中,我们在OSX中编译了ST-Link2调试工具,并且简单的对其功能进行了测试 ...

  2. 安装Debian 7.8 过程,以及该系统的配置过程

    最近,我给自己的电脑安装了Debian操作系统,版本7.8 stable.Debian我相信大家都能了解,它是Ubuntu的基础,Ubuntu是基于Debian的unstable开发的.我安装这个系统 ...

  3. HTML meta viewport属性说明

    什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤 到很小的窗口中(这样会破坏没有针对手 ...

  4. 网络设备作用和工作ISO层

    物理层——中继器和集线器 二者都起数字信号放大和中转的作用. 中继器 Repeater 用来延长网络距离的互连设备.REPEATER可以增强线路上衰减的信号,它两端即可以连接相同的传输媒体,也可以连接 ...

  5. python 中函数的参数

    一.python中的函数参数形式 python中函数一般有四种表现形式: 1.def function(arg1, arg2, arg3...) 这种是python中最常见的一中函数参数定义形式,函数 ...

  6. Unity3d Shader开发(三)Pass(Culling & Depth Testing)

    剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施.所有几何体都包含正面和反面.剔除基于大多数对象都是封闭的事实:如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因 ...

  7. MVC5添加控制器总是报“Multiple object sets per type are not supported”

    http://www.asp.net/mvc/tutorials/mvc-5/introduction/creating-a-connection-string 按照上面的指导做练习,  总报小面的错 ...

  8. Spring核心框架 - AOP之动态代理机制

    动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码.动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类. ...

  9. VS2010制作网站自定义安装程序 转

    最近在把一个网站打包成安装程序,这方面的文章网上有很多,也看了不少,但因为开发环境的不同,遇到了一些问题,便写下这篇文章记下整个流程(有很多资源都来自互联网,由于条目颇多,所以无法说明其来处,敬请谅解 ...

  10. nutch 采集到的数据与实际不符

    现象,这个网站我总计能抽取将近500个URL,但实际只抽取了100条 解析:nutch默认从一个页面解析出的链接,只取前 100 个. <property> <name>db. ...