nopCommerce常見問題匯總


以下列出的是程序猿攻城濕在開發nopCommerce的時候經常提出的問題。它們也表現出nopCommerce團隊對一些架構的選擇。

文章說明:文章來源自我的博客,於原文之理解而翻譯,並非出版社那種按字詞翻譯風格。歡迎各位提出意見,也歡迎各位轉載不過務必注明本文原址。更多 nopcommerce的文章請關注http://www.dingsea.com/?tag=nopcommerce,或者加入我們的QQ群 101675096

有哪些要求?

NopCommerce的技術和系統要求可以在這兒找到(英文)

程序猿如何向nopCommerce項目貢獻代碼?

NopCommerce代碼托管在codeplex Mercurial代碼庫,用戶點此訪問。借此公共代碼庫,用戶可找到將要發布的修改和以前的設計決策。如果想知道codeplex Mercurial對版本樹的支持請在這兒這兒找更多信息。程序猿可以很容易地在我們的擴展頁面上傳插件和語言包並分享給他人。要上傳擴展,請在瀏覽器中訪問我的帳號,選擇“Your contributions and extensions”選項卡,然后點擊“Upload a new extension”按鈕。

我如何報告一個缺陷?

nopCommerce使用Codeplex作為官方缺陷跟蹤系統,如果發現一個缺陷,可通過在Codeplex創建一個任務來報告給nopCommerce團隊。程序猿或用戶也可以在我們的Bug Reports論壇版塊發帖子來告知新發現的缺陷。如果你的缺陷已經被記錄當然最好,正因為此,驗證那些沒有被記錄的缺陷更為重要(比較拗口)。報告重復的缺陷會分心而且讓我們在新的開發和改缺陷上時間更少。

nopCommerce的數據訪問層

Nop.Data項目包含一系列的類和函數來讀取和寫入數據庫或是其它數據存儲介質。Nop.Data項目有助於將數據訪問的邏輯從你的業務對象中 分離出來。NopCommerce使用Entity Framework (EF) Code-First,Code-First允許程序員在源代碼中定義實體(所有核心實體都在Nop.Core項目中定義),然后使用EF來生成基於C# 類的數據庫,這就是為何被稱為Code-First。你可以用LINQ來查詢你的對象,它會悄悄地把代碼轉化為SQL語句並在數據庫執行。 Nopcommerce有流利的API用於完全定制化的持久映射。如果想了解更多Code-First請訪問這兒這兒

控制反轉和依賴注入

控制反轉和依賴注入是兩個密不可分的方法用來分離你應用程序中的依賴性。控制反轉Inversion of Control (IoC) 意味着一個對象不會新創建一個對象並依賴着它來完成工作。相反,它們從外部獲取它們想要的對象。依賴注入Dependency Injection (DI) 意味着在沒有對象的干預下,一般通過能傳入構造參數和一系列屬性的框架組件完成。馬丁虎老二(Martin Fowler)寫過一篇關於依賴注入和控制反轉的牛B文章,我就不要再抄到這兒了,你可以在這兒找到。NopCommerce使用Autofac類庫作為IOC容器。只要你寫了一個服務和此服務已實現的適當接口,你應該在任何實現了IDependencyRegistrar接口(Nop.Core.Infrastructure.DependencyManagement 命名空間).的類里注冊它。比如所有nopCommerce的核心服務都在Nop.Web.Framework類庫的DependencyRegistrar類中已注冊。

public class DependencyRegistrar : IDependencyRegistrar

{

public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder)

{

builder.Register(c => c.Resolve().Request)                 .As()                 .InstancePerHttpRequest();             builder.Register(c => c.Resolve().Response)                 .As()                 .InstancePerHttpRequest();

你想創建多少依賴注冊類都可以。每一個類實現了IDependencyRegistrar接口的類都有一個Order屬性,可以用它來替換一個現有的依賴。要覆蓋nopcommerce的依賴,設置order屬性為大於0。Nopcommerce會對依賴排序,並按順序運行,數字越大你的對象越遲被注冊。

我如何注冊新的路由(路由?我覺得還是用routes比較好呢?)

ASP.NET路由主要用於接受進來的瀏覽器請求並把它映射到具體的MVC控制器action上。在此有更多信息。Nopcommerce有一個叫IRouteProvider的接口,用於在應用程序開始時注冊路由。所有的核心路由都在Nop.Web項目中的RouteProvider注冊。

public partial class RouteProvider : IRouteProvider

{

public void RegisterRoutes(RouteCollection routes)

{

//home page

routes.MapLocalizedRoute(“HomePage”,

“”,

new { controller = “Home”, action = “Index”},

new[] { “Nop.Web.Controllers” });

你想創建多少RouteProvider都可以。比如,如果你的插件有定制路由,需要注冊,於是你可以創建一個實現IRouteProvider接口的新類,再根據插件具體注冊路由。

數據校驗

數據校驗是一個用以保證程序操作干凈,正確和有用數據的流程。很多.NET程序猿使用Data Annotation Validators,不過nopCommerce用的是Fluent Validation, 一個有着文藝青年般的接口和lambda表達式構成的.NET的小型驗證庫,用以生成符合你業務需求的校驗規則 。在nopCommerce中你必須要通過2步來添加一個校驗到一些模型中:1.創建一個繼承自AbstractValidator的類並把所有必須的驗 證邏輯都放入其中,看下邊這些應該有所啟發:

public class AddressValidator : AbstractValidator     {         public AddressValidator(ILocalizationService localizationService)         {             RuleFor(x => x.FirstName)                 .NotEmpty()                 .WithMessage(localizationService.GetResource(“Address.Fields.FirstName.Required”))                 .When(x => !x.FirstNameDisabled);

2.給你的模型類加上ValidatorAttribute屬性,比如下邊代碼:

[Validator(typeof(AddressValidator))]

public class AddressModel : BaseNopEntityModel

{
當一個視圖模型被提交到控制器,ASP.NET會執行相應的校驗。

計划任務

有了計划任務,你可以安排一個任務在指定的時期里,在后台運行。比如nopCommerce會定時地發送隊列中的email。任務是在ASP.NET線程池中由單獨的線程執行。創建一個新的任務有如下基本步驟:

  1. 定義一個有ITask接口的類,它只有一個無參數的方法:Execute。在任務要執行的時候,這個方法會被調用,你懂的。
  2. 為了設定一個計划任務,程序員必須在數據庫相應的表中添加一個ScheduleTask記錄。你可以使用IScheduleTaskService來添加記錄

事件暴露和處理

事件是把消息廣播給感興趣的部分。事件是由數據驅動的如添加,更新和刪除數據。NopCommerce允許程序員“監聽”他們感興趣的事件。程序員要想玩轉事件基本上有如下兩條路走,一個程序員要么發布某個事件讓其它人來用,要么用別的程序員編好並發布的事件。

  1. 程序員為了發布一個事件,必須先取得一個IEventPublisher實例再使用相應的數據一起調用Publish方法。
  2. 程序員要監聽一個事件,他必須實現一個新的IConsumer泛型接口,一旦有人使用這個事件,nopCommerce會用反射來尋找並注冊這個事件的實現。

 

設置API

正如其它網站平台,nopCommerce也有例如“網店名稱”或“啟用單頁購買”這類設置,在nopCommerce中有兩種辦法來管理設置。

你可以用實現ISettingService接口的方法SetSettingGetSettingByKey來加載和保存單個設置。而在nopCommerce中最牛B的處理設置的辦法是創建一個ISettingService接口的新實現。每個設置將變為C#屬性,程序員在需要時應該使用setting類構建函數注入設置。以下是setting類的示例代碼。

/* 小結:本文是按老丁於原文之理解而翻譯,並非出版社那種按字詞翻譯風格。歡迎各位提出意見,也歡迎各位轉載不過務必注明本文原址。更多 nopcommerce的文章請關注http://www.dingsea.com/?tag=nopcommerce,或者加入我們的QQ群 101675096討論。
*/
public class MediaSettings : ISettings

{

public int AvatarPictureSize { get; set; }

public int ProductThumbPictureSize { get; set; }

public int ProductDetailsPictureSize { get; set; }

public int ProductThumbPictureSizeOnProductDetailsPage { get; set; }

public int ProductVariantPictureSize { get; set; }

public int CategoryThumbPictureSize { get; set; }

public int ManufacturerThumbPictureSize { get; set; }

public int CartThumbPictureSize { get; set; }

 

public bool DefaultPictureZoomEnabled { get; set; }

 

public int MaximumImageSize { get; set; }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM