BrnShop开源网上商城第一讲:架构设计

摘要:
首先,感谢您对BrnShop项目的支持和鼓励!无论我们将来遇到多大困难,我们都必须坚持BrnShop!!好了,让我们继续今天的主题:获得BrnShop开源在线商城架构设计源代码的朋友知道,BrnShop解决方案由四个解决方案文件夹组成。BrnShop.Web.Framework项目:该项目主要提供Web层面的商城设计。BrnShop.Web.Admin项目:商城网站的后台。此项目的类型是类库,而不是web项目,因此无法直接启动。

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

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

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

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

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

  BrnShop开源网上商城第一讲:架构设计第1张

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

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

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

  BrnShop开源网上商城第一讲:架构设计第2张

  • 对于异步模块,缓存模块,配置模块,数据模块,邮箱模块,随机值模块,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文件夹中,一定要配置项目生成的输出路径为“....PresentationBrnShop.Webin”

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

  BrnShop开源网上商城第一讲:架构设计第5张

  • 当前只有企业版提供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开源网上商城第一讲:架构设计第6张

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

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

免责声明:文章转载自《BrnShop开源网上商城第一讲:架构设计》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇架构之CDN缓存深入理解JVM3下篇

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

相关文章

开源netcore前后端分离,前端服务端渲染方案

SPA单页面应用容器开源地址:https://github.com/yuzd/Spa 功能介绍 前端应用开发完后打包后自助上传部署发布 配合服务端脚本(javascript)实现服务端业务逻辑编写渲染SSR功能 可以快速回滚到上一个版本 可以设置环境变量供SSR功能使用 服务端脚本提供执行日志 redis db三大组件打造强大的基于js的ssr服务端...

VSCode, 当今最流行的免费开源代码编辑器,微软出品,必属精品

什么是VSCode? Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,并且可用于Windows,macOS和Linux。它内置了对JavaScript,TypeScript和Node.js的支持,并具有丰富的其他语言(例如C ++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unit...

FPGA智能网卡综述(4): 开源DMA

https://zhuanlan.zhihu.com/p/359754525 Corundum 原版见FCCM2020 代码见:https://github.com/ucsdsysnet/corundum 这个专题主要对基于FPGA的智能网卡技术进行介绍,上篇介绍了NanoPU、PANIC、Tonic等,这次介绍“Corundum: An Open-Sou...

几款不错的RPA开源软件分享[RPA Plus]

https://blog.csdn.net/dev_kex/article/details/105450790RPAPlus 2020-04-11 13:02:15 10780 收藏 23文章标签: 人工智能 rpa RPAPlus 开源 RPA+AI版权 智能自动化将成为大势所趋,但并不是所有公司都选择购买商业付费软件,有部分研发能力比较强的公司可能会采...

git 的安装以及使用:是一个开源的分布式版本控制系统,可以对项目进行版本管理。 早期是linux之父用来管理linux系统源代码的(linux是和windows一样操作系统 开源免费的操作

## 总结 - 学会使用基本的git命令 管理源代码- 学会去github创建仓库 并将代码上传到github的仓库 (有待完成 回家有网再push)- 了解本地的.git和服务器github的.git的关系 是两个仓库 一个是本地 一个是服务器 需要使用一句命令来关联 git remote add origin 远端的.git的地址- 了解github的...

.NetCore之基础

.NetCore几大特点     这篇文章主要从.NetCore全面开源、依赖注入、包引入、跨平台、应用服务器的特点来入手。大约需要10分钟的阅读时间。   与.Net的区别     在.Net与.NetCore在代码编写上并无太大的区别,都使用C#作为编程语言。主要体现在.NetCore更加拥抱开源、与世界共同发展。   开源的重要性     一般...