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

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

  好了现在进入今天的正题:自定义插件。上一讲中我们已经阐述了BrnShop插件的工作机制,现在我们详细介绍下如何自定义插件。首先BrnShop的插件从功能上分为三类,分别是:

  • 开放授权插件(OAuth)
  • 支付插件
  • 配送插件

  对应的接口文件(注:位于BrnShop.Core项目的Plugin/Base文件夹中)依次如下:

  • IOAuthPlugin
  • IPayPlugin
  • IShipPlugin

  现在我们依次介绍下各个接口,首先登场的是IOAuthPlugin接口。先看它的定义:

    /// <summary>
    /// BrnShop开放授权插件接口
    /// </summary>
    public interface IOAuthPlugin : IPlugin
    {
        /// <summary>
        /// 登陆控制器
        /// </summary>
        string LoginController { get; }

        /// <summary>
        /// 登陆动作方法
        /// </summary>
        string LoginAction { get; }

        /// <summary>
        /// 登陆路由数据
        /// </summary>
        RouteValueDictionary LoginRouteValues { get; }
    }

  对于一个开放授权插件来说,它只需要向主应用程序提供自己的一个登陆地址就可以,至于怎么授权验证等那都是插件自己的事情了。所以IOAuthPlugin接口内容仅仅是登陆地址的mvc3要素(控制器名,动作方法名,路由数据)就可以了,以QQ授权登陆为例:

  

  接下来是IPayPlugin接口,代码如下:

 

  成员比较多,我们分类来看就清晰了:

  • PayMode:代表支付的3种类型,这个属性非常重要,因为其它成员的实现跟他密切相关。
  • GetPayFee:计算订单的支付手续费。
  • GetRequestUrl:只在PayMode为在线付款时有效;返回支付地址,在BrnShop.Web项目的OrderController类的PayShow方法中调用。
  • ReturnController,ReturnAction,ReturnRouteValues:这3个成员为一组,并且只在PayMode为在线付款时有效;提供支付完成后的返回地址。
  • NotifyController,NotifyAction,NotifyRouteValues:这3个成员为一组,并且只在PayMode为在线付款时有效;提供支付完成后的回调地址。
  • AllowRecharge:系统预留成员,目前无用。

  最后我们来看下IShipPlugin接口,代码如下:

    /// <summary>
    /// BrnShop配送插件接口
    /// </summary>
    public interface IShipPlugin : IPlugin
    {
        /// <summary>
        /// 获得配送费用
        /// </summary>
        /// <param name="totalWeight">订单总重量</param>
        /// <param name="productAmount">商品合计</param>
        /// <param name="buyTime">购买时间</param>
        /// <param name="shipRegionId">收货区域</param>
        /// <param name="partUserInfo">购买用户</param>
        /// <returns></returns>
        decimal GetShipFee(int totalWeight, decimal productAmount, DateTime buyTime, int shipRegionId, PartUserInfo partUserInfo);
    }

  这个接口比较简单,只是提供一个计算配送费用的成员。

  补充说明一下:以上3个接口都继承自IPlugin,这个接口提供后台配置地址mvc3要素,只在BrnShop.Web.Admin项目中的插件配置视图中使用,具体如下:

    @if (Model.ConfigRouteValues == null)
    {
        @Html.Action(Model.ConfigAction, Model.ConfigController)
    }
    else
    {
        @Html.Action(Model.ConfigAction, Model.ConfigController, Model.ConfigRouteValues)
    }

  下面我们以支付宝插件为例来讲解下如何自定义一个插件。

   首先新建一个ASP.NET MVC3应用程序并引用需要的程序集,根据上一篇讲解我们知道需要修改非.net自带程序集的复制到本地属性和项目生成属性。具体如下图:

  至此我们的项目基本框架已经搭好了。现在我们需要添加一个插件说明文件(注:此文件为必须文件且文件名称必须为PluginInfo.config,还有不要忘记修改它的复制属性)。内容如下:

<?xml version="1.0" encoding="utf-8"?>
<PluginInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SystemName>alipay</SystemName>
  <FriendlyName>支付宝</FriendlyName>
  <ClassFullName>BrnShop.PayPlugin.Alipay.PluginService,BrnShop.PayPlugin.Alipay</ClassFullName>
  <Folder>BrnShop.PayPlugin.Alipay</Folder>
  <Description>阿里巴巴旗下支付工具</Description>
  <Type>1</Type>
  <Author>brnshop</Author>
  <Version>1.0</Version>
  <SupVersion>1.0.0</SupVersion>
  <DisplayOrder>3</DisplayOrder>
  <IsDefault>0</IsDefault>
</PluginInfo>

  这个文件是BrnShop.Core项目中的PluginInfo序列化文件,所以节点说明请参考下面代码:

 

  接下来我们定义一个类PluginService,并实现接口IPayPlugin,代码如下:

 

  因为支付宝有一些需要配置的属性要保存,例如收款支付宝帐户等。在此我们采用对象序列化和文件的方式来保存这些信息。首先定义一个设置信息类,代码如下:

 

  然后添加一个工具类PluginUtils来序列化和反序列化设置信息,代码如下:

 

  就下来就是前台和后台实现了。首先是后台实现,对于后台我们只需要提供一个可供修改支付宝配置的子方法就行了,此子方法在上面讲解"IPlugin"接口时已经给出了它的调用方式。代码如下:

 

  至于前台我们有3个方面需要去实现,第一个方面是返回调用动作方法,代码如下:

 

  第二个方面是通知调用动作方法,代码如下:

 

  第三个方面是我们需要提供一个支付宝简介的视图文件,这个视图文件在顾客支付订单时给其展示一些支付宝的说明信息,此文件有以下几点要求:

  • 文件名必须为"Show.cshtml"。
  • 此文件必须位于插件项目的Views文件夹的顶层中。
  • 此视图文件接收类型为OrderInfo的视图模型对象。

  这个视图文件在BrnShop.Web项目的支付展示视图文件PayShowModel.cshtml中调用,调用方式如下:

@Html.Partial(Model.ShowView, Model.OrderInfo)

  至此支付宝插件开发完成,至于其它类型的插件开发也都是大同小异。

  PS:最后附上一张BrnShop开启NOSQL前后的性能对比图,以商品详细页面为例:

   开启NOSQL前:

  开启NOSQL后:

  可见性能提升还是很明显的。

时间: 2024-10-23 22:52:23

BrnShop开源网上商城第四讲:自定义插件的相关文章

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

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

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

在正式讲解扩展视图功能以前,我们有必要把视图的工作原理简单说明下.任何一个视图都会被翻译成一个c#类,并保存到指定的位置,然后被编译.这也就是为什么能在视图中包含c#代码片段的原因.下面我们通过一个项目具体的了解一下这个过程,首先我们新建一个mvc3项目,它的Index.cshtml视图文件的代码如下: 1 2 3 4 5 6 7 8 @{     ViewBag.Title = "主页"; } <h2>@ViewBag.Message</h2> <p&g

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

首先在此感谢大家对BrnShop项目的支持和鼓励!我们在发布BrnShop以前曾推测项目会受到不少园友的支持,但没想到园友们的支持大大超过我们的预测.4天6000次浏览,140个推荐,170个评论,8000次下载.看到这些数据后我们内心除了激动外,更多了一份责任.无论将来遇到多大的困难,我们一定要坚持把BrnShop坚持到底!! 如果你还不知道BrnShop是什么或还没有下载源码的可以点此下载,如果下载源码后发现商城有bug,也可以点此下载(什么?你还是1.0.**版本?我们现在都已经更新到1.

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

在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择.下面我依次来说明下. 首先是数据的复用和传递:对于BrnShop的每一次请求,程序都要分成好几个阶段执行,例如验证,执行动作方法等等,在各个阶段我们可能需要重复使用同一信息,而我们的愿景就是希望此信息只需获取一次,然后沿着流程管道一直流动,这样在后面的阶段中就可以直接使用,不用再重新获取了,提高程序的性能.举例来说:在授权验证阶段,我们为对用户进行验证,从而获取了用户

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

这几天BrnShop的开发工作比较多,所以这一篇文章来的晚了一些,还请大家见谅呀!还有通知大家一下BrnShop1.0.312版本已经发布,此版本添加了报表统计等新功能,需要源码的园友可以点此下载.好了,我们现在进入今天的正题.关于BrnShop插件内容比较多,所以我分成两篇文章来讲解,今天先讲第一部分内容:插件的工作机制. 对于任意一种插件机制来说,基本上只要解决以下三个方面的问题,这个插件机制就算成功了.这三个方面如下: 插件程序集的加载 视图文件的路径和编译 插件的部署 首先是插件程序集的

Python 开源网上商城项目

django-oscar  https://github.com/django-oscar/django-oscar#screenshots django-shop  https://github.com/awesto/django-shop cakeshop  https://github.com/myoula/cakeshop satchmo  https://bitbucket.org/chris1610/satchmo/wiki/Home django-lfs https://githu

开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载(非官方文章)

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 源码下载地址: asp.net(c#)开源商店系统Brn shop 1.9(免费仿京东商城) asp.net(c#)开源商店系统Brn shop 2.1(免费仿京东商城) 项目结构图如下: 后台管理页面: 功能简介: 1 基本数据:品牌,分类,属性(有些属性用作sku,有些属性还要提供商品筛选功能). 2 商品属性:商品图库,商品属性列表,商品

重磅来袭,开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 啥话也不说了,直接上源码:下载源码(由于公司服务器在香港,所以如果下载速度过慢可来此下载网盘) 项目结构图如下: 后台管理页面: 一个完整的网上商城应该至少包含以下几个方面: 1 基本数据:品牌,分类,属性(有些属性用作sku,有些属性还要提供商品筛选功能). 2 商品属性:商品图库,商品属性列表,商品关键词列表,商品库存(有的需要按照仓库拆分

开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,1旦整理完成也全部开源).         MVC3.0下载地址:        https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=4211 源码下载地址: asp.net(c#)开源商店系统Brn shop 1.9(免费仿京东商城) asp.net(c#)开源商店系统Brn shop 2.1(免费