nopcommerce商城系统--开发者常遇问题清单

原址:http://www.nopcommerce.com/docs/74/frequently-asked-development-questions.aspxhtml

如下是开发者常见问题的清单。也介绍了一些nopCommerce开发团队的编码规范。程序员

有什么要求?web

nopCommerce技术和系统需求能够在这里找到。数据库

开发者如何为nopCommerce项目作出贡献?浏览器

nopCommerce在Codeplex Mercurial托管了一个源码库,用户能够在这里查看。用户在公共库能够看到即将发生变化的设计决策,以及之前的设计决策。想了解更多关于Codeplex Mercurial对版本树的支持信息请点击这里.开发人员能够轻松地将其插件或语言包上传到咱们的扩展部分,并与其余用户共享。要上传一个扩展信息请在Web浏览器中访问个人账户页面,选择标有“Your contributions and extensions”选项卡,并单击“Upload a new extension”按钮。并发

如何报告一个BUG?mvc

nopCommerce使用Codeplex做为官方BUG跟踪系统,若是发现一个BUG,可经过在Codeplex建立一个新的任务来报告给nopCommerce团队。开发者或用户也能够在咱们的BUG论坛版块发帖子来告知新发现的BUG。经过这里你有机会验证你的BUG是否已经被提交,这个很重要。由于BUG的重复提交会浪费时间,减小咱们在开发新功能和改其余BUG的时间。框架

数据访问层asp.net

Nop.Data项目包含了一系列的类和函数来读取和写入数据库或其余数据存储介质Nop.Data库有助于将数据访问的逻辑从业务对象中分离出来(分离关注点)。 NopCommerce使用实体框架EFCode-First方法Code-First容许开发人员在源代码中定义实体全部核心实体Nop.Core项目中定义而后用EF来生成基于C# 类的数据库。这就是为何它被称为Code-First而后,您能够使用LINQ来查询对象,由于它会悄悄地把代码转化为SQL语句并在数据库执行 NopCommerce采用了流畅API来彻底定制持久性映射若是想了解更多Code-First请访问这里这里ide

控制反转和依赖注入

控制反转和依赖注入是两个密不可分的方法,用来分离你应用程序中的关注点。控制反转Inversion of Control (IoC)意味着一个对象不会新建立一个对象并依赖着它来完成工做.相反,它们从外部获取它们想要的对象.依赖注入Dependency Injection (DI) 意味着在没有对象的干预下,通常经过能传入构造参数和一系列属性的框架组件完成。Martin Fowler写过一篇关于依赖注入和控制反转的文章,我就再也不重复了,你能够在这儿找到。NopCommerce使用Autofac类库做为IOC容器。只要你写了一个服务和此服务已实现的适当接口,你应该在实现了IDependencyRegistrar接口(Nop.Core.Infrastructure.DependencyManagement 命名空间)的类里注册它。好比全部nopCommerce的核心服务都在Nop.Web.Framework类库的DependencyRegistrar类中注册了。

 1 public class DependencyRegistrar : IDependencyRegistrar
 2     {
 3         public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder)
 4         {
 5             builder.Register(c => c.Resolve<HttpContextBase>().Request)
 6                 .As<HttpRequestBase>()
 7                 .InstancePerHttpRequest();
 8 
 9             ...
10         }
11     }
代码示例

你想建立多少依赖注册类均可以。每个类实现了IDependencyRegistrar接口的类都有一个Order属性,能够用它来替换一个现有的依赖。要覆盖nopcommerce的依赖,设置order属性大于0。Nopcommerce会对依赖排序,并按顺序运行,数字越大你的对象被注册的时间就会被推后。

 如何新建一个新的routes

 ASP.NET Routes负责接收传入的浏览器请求并把它映射到特定的MVC控制器Action操做上这里能够找到关于路由的详细信息 Nopcommerce有一个叫IRouteProvider的接口,用于在应用程序开始时注册路由。全部核心路由被注册在位于Nop.Web项目RouteProvider

 1 public partial class RouteProvider : IRouteProvider
 2     {
 3         public void RegisterRoutes(RouteCollection routes)
 4         {
 5             //home page
 6             routes.MapLocalizedRoute("HomePage",
 7                             "",
 8                             new { controller = "Home", action = "Index"},
 9                             new[] { "Nop.Web.Controllers" });
10 }
11 }
代码示例

你想建立多少RouteProvider均可以。好比你的插件有自定义路由,须要注册,你能够建立一个实现IRouteProvider接口的新类,再根据插件具体注册路由。

数据验证

 数据验证是确保程序的数据操做干净、正确和有用的过程。大多数.NET开发人员使用Data Annotation ValidatorsnopCommerce使用Fluent Validation。是一个使用fluent接口和lambda表达式来生成业务逻辑验证规则的.NET小型验证类库。nopCommerce必须如下两个步骤添加一个校验到一些模型中
1建立一个从AbstractValidator类派生的类并把全部必须的验证逻辑都放入其中,你能够从下面的代码中获得些启发

1  public class AddressValidator : AbstractValidator<AddressModel>
2     {
3         public AddressValidator(ILocalizationService localizationService)
4         {
5             RuleFor(x => x.FirstName)
6                 .NotEmpty()
7                 .WithMessage(localizationService.GetResource("Address.Fields.FirstName.Required"));
8         }
9     }
代码示例

二、添加ValidatorAttribute属性,以下:

1  [Validator(typeof(AddressValidator))]
2     public class AddressModel : BaseNopEntityModel
3     {}
代码示例

当一个视图模型被提交到控制器,ASP.NET会执行相应的校验。

计划任务

 有了计划任务,你能够在后台建立一个任务,让它在指定的时期里运行。好比nopCommerce会定时地发送队列中的email。任务是在ASP.NET线程池中由单独的线程执行。建立一个新的任务有以下基本步骤:

  1.   定义一个实现ITask接口的类。它只有一个不带参数的方法;执行。当任务启动的时候,这个方法会被调用
  2.   计划任务开始时,应该插入一条新的ScheduleTask记录到相应的数据库表。您可使用IScheduleTaskService来执行插入操做

 事件暴露和处理

事件是把消息广播给相关部分。事件是由数据改变来触发的如添加,更新和删除数据。NopCommerce容许开发者“监听”事件。开发者要想玩转事件基本上有以下两条路走:要么发布某个事件让其它人来用;要么用别的编好并发布的事件。

  1. 发布一个事件,必须先取得一个IEventPublisher实例再使用相应的数据一块儿调用Publish方法。
  2. 要监听一个事件,必须实现一个新的IConsumer泛型接口,一旦有人使用这个事件,nopCommerce会用反射来寻找并注册这个事件的实现。

 设置API

 和其余网站平台同样,nopCommerce也有“网店名称”或“启用单页购买”这类设置,在nopCommerce中有两种办法来管理设置.

 你能够用实现ISettingService接口的方法SetSettingGetSettingByKey来加载和保存单个设置。而在nopCommerce中最好的处理设置的办法是建立一个ISettingService接口的新实现。每一个设置将变为C#属性,程序员在须要时应该使用setting类构建函数注入设置。如下是setting类的示例代码。

 

 1 public class MediaSettings : ISettings
 2     {
 3         public int AvatarPictureSize { get; set; }
 4         public int ProductThumbPictureSize { get; set; }
 5         public int ProductDetailsPictureSize { get; set; }
 6         public int ProductThumbPictureSizeOnProductDetailsPage { get; set; }
 7         public int ProductVariantPictureSize { get; set; }
 8         public int CategoryThumbPictureSize { get; set; }
 9         public int ManufacturerThumbPictureSize { get; set; }
10         public int CartThumbPictureSize { get; set; }
11 
12         public bool DefaultPictureZoomEnabled { get; set; }
13 
14         public int MaximumImageSize { get; set; }
15     }
代码示例
相关文章
相关标签/搜索