基于nopCommerce的开发框架(附源码)

 .NET的开发人员应该都知道这个大名鼎鼎的高质量b2c开源项目-nopCommerce,基于EntityFramework和MVC开发,拥有透明且结构良好的解决方案,同时结合了开源和商业软件的最佳特性。官网地址:http://www.nopcommerce.com/,中文网:http://www.nopcn.com/。下载后前后端展示如下。如果你还未了解过该项目,建议从官网下载代码后在本地运行查看效果。

  笔者使用该框架开发过不少项目,总的来说,方便简洁,集成了.NET开发许多常用的组件和功能。一直想将它分享出来,但忙于工作而没有达成,最近也是有时间来写这篇文章,本文将展示如何提取该源码的精简框架并附上源码(基于nopCommerce3.9版本)。如果你想了解框架结构,通过该框架来开发项目,那么看一遍该文章是有价值的。前排提示:本框架源码已上传到GitHub:https://github.com/dreling8/Nop.Framework,有兴趣的可以关注该项目,后续会将其它的一些通用模块添加进去,如用户管理(IWorkContext 工作上下文)、插件功能、任务模块(taskservice)、日志、缓存、本地化等。欢迎star给星星,你的支持是我的动力!  

   

  

 

 一、了解项目结构

  从项目结构图中我们也可以看出Nop的层次划分非常清晰,先看我画的层次图

   

  

 

  1. 展现层(Presentation)

  也可称之为应用层,只关注前端的整合,不涉及任何领域逻辑实现。这一层只做展现,对我们框架来说是可有可无的,因此提取框架时会将该层删除。

  2. 业务服务层(Nop.Services)

  整个系统的服务层,提供了对每个领域的接口和实现。这一层非常重要,提供了程序内对展现层的接口服务,不论展现层使用mvc,还是使用winform,异或是给app调用的webapi接口,都需要该层服务。但该层的服务主要是电商的一些服务,对我们框架无用,因此在这个框架中会删除所有服务,只添加一个测试服务类和接口,应用到项目中你应该在该层添加接口和服务。

  3. 数据层(Nop.Data)

  nop在数据层的仓储实现中使用了ef和sqlserver数据库,如果你想扩展,也可以在该层使用其它的ORM映射库和数据库。这一层的大部分功能我们会在框架中将保留。

  4. 基础设施层(Nop.Core)

  包括缓存的实现、配置、领域模型等等。在框架中会保留一部分功能,并将Domain领域模型移出该层做单独项目,为什么要这样做,因为通常情况下,Domain层的调整会比较多,所以我一般将Domain做单独Project,当然你也可以不调整,但框架做了该调整。

  二、删除与业务相关的代码

  我们已经对Nop的整个代码层次结构有了了解,基于以下两点开始修改项目源码:1.框架足够精简,没有任何电商业务。2.核心功能保留建议在开始前先copy一份源码保留。

  1. Test项目:Tests文件夹下面是测试项目,不是必需的,将它全部移除,开发具体业务,可以再单独添加测试项目。由于是测试项目,删除后整个项目还能跑起来。

   

  2. Presentation展现层:这里的三个项目,分别是前台,后端和两个项目共用的一些模块。和测试项目一样,这里我们也全部移除。

   

  3. Plugin项目:插件项目,同1、2一样,插件也不是必需的,移除所有的插件项目。现在只剩下三个项目了(欢迎关注该项目的github,后续我会专门写篇文章介绍如何添加插件)。

   

  Nop.Services:业务服务层,这一层是程序集内对外接口层,需要保留。删除所有相关的业务服务类,其中日志、帮助、任务等跟系统相关的都删除,目的是更好的展示整个系统的结构。添加一个测试类,暂时什么都不写。

   

  Nop.Data:数据层项目。这层基本不做调整,只删除EF的Mapping映射相关类。

  Nop.Core:基础设施层。删除电商业务相关的Domain,新建项目Nop.Domain。

  报错了,IWorkContext(工作上下文,用于获取用户信息等数据)依赖Domain,删除它。这个过程可能要删除不少文件,直到项目不再报错。完成后我们的项目结构如下,注意我们将Nop.Core中的实体基类移到了Nop.Domain中,到这一步,我们的基础框架结构已经大致出来了。

 

  三、添加数据库、数据实体、映射、业务层代码

  1. 在本地Sqlserver中,新建数据库MyProject,添加表Test。

View Code

  2. 添加实体类和映射。在Domain项目下面新建Test目录,添加TestEntity。Data项目Mapping下新建Test目录,添加EF映射类。

View Code
View Code

  3. 添加业务层方法。

  在Nop.Services项目里,在我们之前添加的接口和类下面添加几个常用的CURD方法,并实现它。这样我们就已经实现的业务层的代码了。

View Code
View Code

  四、添加Presentation项目

  有了业务服务,现在可以添加表现层项目来测试了。为什么不直接写测试项目?因为测试项目使用Mock模拟数据,不能完整展示整个功能。

  1. 添加mvc模板项目,通过nuget引入Autofac和Autofac.Mvc5。

  2. 添加容器注册类DependencyRegistrar,实现IDependencyRegistrar接口,这一步非常关键,我们将要用的接口和实现类注入到容器中。

View Code

  3. 配置文件中添加数据库访问节点

<add name="test" connectionString="Data Source=.;Initial Catalog=MyProject;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=sa1234" providerName="System.Data.SqlClient" />

  4. 应用启动时添加初始化引擎上下文

  启动项目,这时NopEngine会报错,因为我们没有使用Nopconfig来配置项目,在RegisterDependencies方法中注释NopConfig的注入,同时在Initialize过程中将相关代码注释。这样就完成通过Autofac注入类到容器中。

View Code
View Code

  5. 在controller添加测试代码。将service添加到HomeController,在构造函数中初始化。系统启动后会自动注入实例。通过断点我们看到,数据成功添加到了数据库。

View Code

  五、扩展到Webapi、Winform、WPF

 

  现在再添加一个winform项目,同样的步骤添加相关的代码。在Winform中我们也能使用业务的服务了。

  1. 通过Nuget安装autofac,entityframework, 添加项目Libraries下的引用。

  2. 添加依赖注册类,因为是winform项目,DependencyRegistrar这里需要做些调整,建议定义一个空接口IRegistrarForm,需要注入的Form实现IRegistrarForm。

View Code

  3. 在启动时添加 EngineContext.Initialize(false),启动项目,报错了,因为winform不能执行,对方法做些调整,添加一个参数isForm表示是否是winform,默认为false。

View Code
View Code

  4. From1中测试,成功调用了业务层的方法,这里我们并没有实例化ITestService,而是交给依赖注入自动实现。

View Code

 

至此,基于Nop的精简开发框架基本完成,如果你有兴趣,建议在github关注该项目 :https://github.com/dreling8/Nop.Framework

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本次版本没有大的新功能,因为我们主要重点放在ASP.NET 4.0迁移,更多的功能维护和修改漏洞,但我们有做出以下修改 亮点: 移到ASP.NET4.0(需要装VS2010用于源代码编辑) 简化数据访问。目前使用ORM(Entity framework 4.0) 集成QuickBook 性能优化 以下方面有提升: USA EPAY(集成)支付模块(感谢Chris Curtis) QuickPay支付方式中添加了退款和收款 GOOGLE广告集成 更新PAYPAL SOAP API至最新版(63.0) 全局上下文事件(开发人员) 把Assigned to product variants打折拆分为Assigned to product variants和Assigned to categories 新的促销管理界面 PriceGrabber / Yahoo Shopping, become.com的促销信息供应源 新的themoneyconverter.com汇率信息源(默认显示) 根据订单状态让礼品卡激活/禁用(和积分类似) 如果订单总额为0,可跳过/隐藏支付方式(可以各个支付方式中配置) 产品的规格、属性界面更加友好 消息模板和信息本地化界面更加友好 产品主图片可以放大 店主可以在全店范围内禁用PDF/EXCEL功能(在中等信任级别中可用) Payment/Shipping restrictions by country加上全选功能 RSS按钮添加了tooltip资源 少量admin界面修改 批量选项:删除队列中的EMAIL 在投票模块中加入“在首页显示”和“开始/截止日期”的属性 选项:是否显示导航栏(俗称面包屑) 把MenuControl.ascx移到\Administration\Modules目录 订单详细页有更多的用户界面修改 包裹单现在保存到file/ImportExport目录中 漏洞: 产品拷贝功能没有拷贝prices by customer roles 在某些服务器上HTML编辑器会有JS脚本问题 修正上传image/icon收藏夹图标的问题(不是image/x-icon) 一些函数/属性中的拼写错误(Weigth > Weight) 修正在IE6中,高级搜索页面的界面问题 在点击“继续购物”按钮以后回到错误的页面 Administration\Tax\General\TaxRates.ascx文件中,HeaderText字段应该和文本字段匹配 修正了语言图标的小问题 修正澳大利亚邮政(最小尺寸检查和多包裹) 修正UPS的问题(在美国以外发货) 修正在一级价格和产品属性中的价格调整 修正Assigned to product variant中的打折问题(当打折比产品价格还多时) 修正了Assigned to shipping中的打折问题 修正了产品批量编辑的问题 产品批量编辑页面中文本框 SEOHelper.RenderMetaTag()没有创建新标签 在用图片(国旗)作为语言选择时,把语言名作为tool tip(html标题)和注释文本显示在image按钮上。 我们不需要在更新购物车以后重设客户的默认付款/收货地址(CustomerManager.ResetCheckoutData方法) firefox下载含有空格的文件名会被截断
nopCommerce 是一个由ASP.NET多层模式开发的开源电子商城系统,可以自行设置模板、配置灵活、功能强大,它内含一个目录前端和一个管理工具后端。前端包括用户注册、商品购买(可以进行评论)、投票、Blog等,后端有类别管理、产品管理、客户及角色管理、订单管理、纳税管理、国家(地区管理)、邮件发送、消息模板、新闻发布、blog管理,可以对列表数据进行XML导出。 Highlight features Architecture improvements Moved to ASP.NET MVC 3.0 (Razor syntax) Really pluggable architecture (just drop a plugin to the /plugins folder in your nopCommerce directory) SQL Server Compact support Code-First Development with Entity Framework 4 (data access) More flexible ACL implementation More user-friendly admin area Added unit tests   Improvements Performance optimization reCAPTCHA integration New tier prices implementation (now can be configured based on customer roles) Several discount requirements can be configured per discount Allow store owner to create a new purchased gift card without placing an order Some of existing discount requirements didn't work for guests Search for customers by name in administration Merged product reviews and ratings options. Email wishlist to a friend Admin area. Show operation status after it's completed (Save, Delete buttons) New installation wizard (The orchard project contribution) Simplified register page. Removed a lot of fields that were not used at all. Fill the "EstimateShipping" module on load with the country/region/zipcode of the current customer Allow store owner to manage the number of product tags that appear in the tag cloud Removed warehouses and pricelists features because they were useless A lot of refactoring and other improvements   Bugs Tax rounding issue fixed Some shipping issues fixed Download catalog as PDF. Currency values had 4 decimal places Select payment/shipping method radio button text was not clickable Hide prices for non-registered customers didn't work on tier prices Renamed PayPal PTI to PDT MS Excel importing issue fixed A lot of other bugs fixes

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值