(2)dotnet开源电商系统-brnshop VS nopCommerce(dotnet两套电商来PK--第二篇:代码从哪开始-BrnMall3.0Beta)

看大牛们的源码,对于水平一般的人,还是略微有点难度的。我从我自身读码的亲身体验,写下杂散片语,希望能和大家一同进步,也为了日后记忆上的备查。

先看的是brnMall的源码结构,从哪看起呢?

首先推荐看的肯定是官方的剖析:BrnShop开源网上商城第二讲:ASP.NET MVC框架

官方的这篇文章主要讲清楚了几点:

(1)brnshop设计时对网页环境上下文是如何获得,如何保存,并如何访问的(重载了控制器的基类,用于截获http访问时的预处理,身份授权和验证等问题),这些都是mvc程序自定义时惯用的方式。

(2)而为了便利地获得上下文,并自动转换对应类型,则需要重写mvc的WebViewPage页。这里可能一些读者会搞不清楚,这里涉及到对mvc底层的一些了解,我找了些资料看了看,才弄明白。资料url:ASP.NET MVC的Razor引擎:View编译原理

简单说:一个View最终也被编译成一个类,这个类的基类可以自定义为WebViewPage类的派生类,所以可以在这个派生类里完成上下文的类型转换,并替换为视图页面的基类。当然做自定义替换后,也要记得改相关的配置,让mvc用你自定义的视图页的派生类作为基类来生成页面。

(3)另外,讲一下,代码阅读时,该代码的划分放置。

(A) brnMall的Library中的brnMall.Data主要是数据库实体类(和各种表对象打交道),brnMall.Core主要是业务逻辑和辅助功能用到的接口和策略配置管理类(譬如:邮件接口和配置,订单接口和配置),brnMall.Service则是业务逻辑具体的实现

(B) 阅读变现层Presentatio时,重点是要读懂两点:

第一:框架上的自定义改造作者是怎么做的,在BrnMall.Web.Framework中,在Controller里对各个主页面模块的控制器基类做了派生,主要在派生类里完成了网页上下文信息的自动记录。这样当用户访问页面首页时,就能自动获取很多信息,譬如:浏览器类型,是否为移动设备的用户等等。在ViewPages里主要是做了对获取的上下文做了类型返回的自动转换。在Pager里主要对分页做了相关处理。在Validator中主要是封装了各种信息的合法性检查的逻辑和正则表达式的使用。而Theme这个主题风格的问题,目前还没深入读,后面再做分析。

第二:我们看代码时,一般会希望知道程序的起点和跳转的逻辑。我们知道mvc程序都是有启动项目的,BrnMall.Web就是启动项目,在它的Global.asax中为程序的起点。

namespace BrnMall.Web
{
    public class BrnMallApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            //将默认视图引擎替换为ThemeRazorViewEngine引擎
            ViewEngines.Engines.Clear();
            ViewEngines.Engines.Add(new ThemeRazorViewEngine());

            //注册所有的区域
            /*AreaRegistration.RegisterAllAreas()是global.asax中调用的,它会找到所有的AreaRegistration的子类,
             * 不管是在Web项目中,还是在其他类库项目中。所以我们在项目的Api文件夹中放一个AreaRegistration的子类,
             * 也是能被找到的,然后在注册Area时,在参数中传递Controller所在的命名空间,问题就解决了。
             */
            AreaRegistration.RegisterAllAreas();

            RouteConfig.RegisterRoutes(RouteTable.Routes);

            //启动事件机制
            BMAEvent.Start();
            //服务器宕机启动后重置在线用户表
            if (Environment.TickCount > 0 && Environment.TickCount < 900000)
                OnlineUsers.ResetOnlineUserTable();
        }
    }
}

在这里启动时,BrnMall做了很多替换和设置,譬如:视图引擎,路由表的注册,这里还有一个重要的设置:AreaRegistration.RegisterAllAreas();

这句代码的作用是什么呢?它是在同一个解决方案里,不同的项目使用了不同的Areas,区域。而各个项目Area的跳转以及调用方式,都和area和路由的写法有关系。这是什么意思呢?举个例子:如果一个用户拿手机访问BrnMall,它是如何显示页面的呢,它首先在主area里,也就是BrnMall.Web的控制器HomeController的Index方法中

   /// <summary>
    /// 首页控制器类
    /// </summary>
    public partial class HomeController : BaseWebController
    {
        /// <summary>
        /// 首页
        /// </summary>
        public ActionResult Index()
        {
            //判断请求是否来自移动设备,如果是则重定向到移动主题
            if (WebHelper.GetQueryInt("m") != 1 && WebHelper.IsMobile())
                return RedirectToAction("index", "home", new RouteValueDictionary { { "area", "mob" } });

            //首页的数据需要在其视图文件中直接调用,所以此处不再需要视图模型
            return View();
        }
    }

在这个方法中,判断了上下文是否为移动设备,如果是则跳转到移动项目的Area上的同名控制器的index方法上去。

//判断请求是否来自移动设备,如果是则重定向到移动主题
if (WebHelper.GetQueryInt("m") != 1 && WebHelper.IsMobile())
   return RedirectToAction("index", "home", new RouteValueDictionary { { "area", "mob" } });

这句代码就使用到了如何跳转Area,以及如何定义Area的知识。Area有两种定义方式,一种是在同一个项目中添加Area,另一种是在同一个解决方案的不同项目有不同的Area。

而BrnMall就是第二种结构,他在每一个非主Area,且有界面视图的项目里都有一个文件:AreaRegistration.cs文件,这个文件定义了AreaRegistration类的派生类,在这个派生类里指明了Area的名字和路由方法。最后,在程序的起点再通过调用AreaRegistration.RegisterAllAreas(); 就可以自动找到所有定义的Area和对应的路由方式。这就是另一处需要注意的事情。下面也给出了参考的网上文章。

.NET/ASP.NET MVC(模块化开发AraeRegistration)

MVC-RedirectToAction跳转到其他Area

今天先写到这吧,下次我们来读读nopCommerce的起点结构分析,有点压力,因为感觉那个代码比较难,尽力吧!

愿意交朋友的可以加我QQ:9200118

时间: 2024-08-09 19:51:45

(2)dotnet开源电商系统-brnshop VS nopCommerce(dotnet两套电商来PK--第二篇:代码从哪开始-BrnMall3.0Beta)的相关文章

(1)dotnet开源电商系统-brnshop&amp;brnMall 和老外开发的nopCommerce(dotnet两套电商来PK--第一篇)

一直想做电商软件,但是实在不想学PHP了,所以前后关注了这两个开源电商系统.一个是国人出品的,一个据说是俄罗斯人写得(不知道对不对).目前两个开源软件都在学习了解中,以下的博文可能会涉及到这两套系统,我希望能对比进行学习,能互相借鉴和补充. brnshop :http://www.cnblogs.com/wheretime/p/3793979.html  (入门篇:BrnShop开源网上商城第一讲:架构设计) nopCommerce:http://www.cnblogs.com/babieton

亿级流量电商详情页系统实战-缓存架构+高可用服务架构+微服务架构第二版视频教程

14套java精品高级架构课,缓存架构,深入Jvm虚拟机,全文检索Elasticsearch,Dubbo分布式Restful 服务,并发原理编程,SpringBoot,SpringCloud,RocketMQ中间件,Mysql分布式集群,服务架构,运 维架构视频教程 14套精品课程介绍: 1.14套精 品是最新整理的课程,都是当下最火的技术,最火的课程,也是全网课程的精品: 2.14套资 源包含:全套完整高清视频.完整源码.配套文档: 3.知识也 是需要投资的,有投入才会有产出(保证投入产出比是

Vue全家桶实战 从零独立开发企业级电商系统

Vue全家桶实战 从零独立开发企业级电商系统(免费升级Vue3.0)现阶段,电商系统随处可见,具有很大市场潜力:同时因为商城系统复杂,涉及到丰富的知识点,如果能进行电商系统的开发,其它各类型的前端系统也能掌握.本课程以Vue全家桶作为主要的技术体系,模拟小米商城,带大家从0开始开发网页和交互功能.你能进行完整的项目架构.体会页面开发的全流程.学习丰富的技术栈和各类组件知识,还能了解Git.动画.开发调试等方面的知识.同时项目本身具有很强的实用性,稍作修改,便能"为我所用".相信此课程能

优秀的开源电商系统有哪些

信息技术的迅速发展,商家想在众多的电商系统中选择一款合适的并不是那么轻易的事情,那么为了能够让商家在选择上减少时间,小编为你介绍几款好的开源电商系统. ECSHOP电商系统 基于PHP语言及MYSQL数据库构架开发的跨平台开源电商系统,因其强大功能拥有着大批粉丝.ECSHOP开源的电商系统最大的特色之一是功能健全,有着较为全面的商品管理.订单处理.会员管理等功能,其操作简易性更是成为国内多数从事电商行业的企业或个人的首选.ECSHOP是我国较为经典的一款老牌开源电子商务系统. MAGENTO电商

电商系统架构——系统鸟瞰图

在看到图(一)这样的图,我们是否有一种探究系统的冲动?这样一个花花绿绿的界面,背后隐藏着什么样的奥秘!用户输入某个域名的时候,比如www.taobao.com的时候,页面是如何展示的,用户在搜索框搜宝贝的时候,系统又是如何处理的,用户在参加秒杀活动的时候,系统又是如何处理的.经过两年多的互联网从业经验,以及自己的思考,在这里我就抛砖引玉对电商系统架构进行探究,探究系统是如何设计的,以及设计这个系统的各种权衡. 图(一) 隐藏在花花绿绿的界面之后,是一个庞大复杂的系统,图(二)是这个系统的鸟瞰图.

“大型票务系统”和“实物电商系统”的数据库选型

讨论请移步至:http://www.zhiliaotech.com/ideajam/idea/detail/423 相关文章: <今天你买到票了吗?--从铁道部12306.cn站点漫谈电子商务站点的"海量事务快速处理"系统> 不能简单套用"实物电商系统"对"大型票务系统"做需求分析 "大型票务系统"和"实物电商系统"在不能提供商品(服务)时给消费者带来的影响有巨大差异 "大型票务系统&

电商系统架构总结(一)

最近主导了一个电商系统的设计开发过程,包括前期分析设计,框架搭建,功能模块的具体开发(主要负责在线支付部分),成功上线后的部署维护,运维策略等等全过程. 虽然这个系统不是什么超大型的电商系统 数亿计的并发,但团队里的主要成员都有多年的开发经验以及电商的经验,系统设计方面还是麻雀虽小,但五脏俱全. 系统客户端有 ios , android,H5,微信小程序,后台方面用.net web api + sql server,图片资源的读写使用阿里云,缓存则自己搭建redis,支付方面既有使用一些第三方支

程序员如何开发独立电商系统?

当社会发展进入"互联网+"时代,传统的PC电商已经不能满足电商运营者的需求,打造独立的移动电商系统是必然的趋势. 随着移动电商热度的不断增加,许多的商家是开始慢慢的加入到移动电商的行列当中,那么你们知道设计开发移动电商系统的吗?延誉电商为您答疑解惑! 1.规划阶段 前规划阶段的主要任务是进行建立数据库的必要性及可行性分析,确定数据库系统在组织中和信息系统中的地位,以及各个数据库之间的联系.规划工作完成后应写出详尽的可行性分析报告和数据库系统规划纲要.可行性分析报告的主要内容包括信息范围

如何来合理解决电商系统数据承载过大的问题呢?

原文地址:http://whosmall.com/?post=431 初创企业在发展过程中,一般不会遇到类似问题,但是随着业务量的增加,特别是电商系统,由于每日的订单数量过多,导致数据库的承载量过大,更换服务器的成本很大,所以如何来合理解决电商系统数据承载过大的问题呢? 1.从初始阶段,这应该是属于系统架构师应该考虑进去的事情,所以这项工作应该由架构师来完成: 2.如果没有合理的架构,那么在需要解决这个问题的时候,可以通过数据库分库,分表.切片的方式来进行.(再次强调这是个技术问题,产品不背锅)