nopCommerce常見問題匯總

來源:互聯網
上載者:User

以下列出的是程式猿攻城濕在開發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; }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.