




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
nopCommerce的源代碼結(jié)構(gòu)和架構(gòu)編寫本文檔是為了向程序員說明nopcommerce的解決方案結(jié)構(gòu),亦是程序員開發(fā)nopcommerce的居家必備良書。首先nopcommerce的源代碼很容易拿到,它是開源的,所以你可以直接到網(wǎng)上下載。在你打開VS以后項(xiàng)目和文件夾都會完整列出來,我們建議你在看此文檔的同時也打開你的VS來瀏覽項(xiàng)目和文件。
絕大多數(shù)的項(xiàng)目,目錄和文件都顧名思義,你可以從名字就大概知道是做什么的。比如Nop.Plugin.Payments.PayPalStandard這個我都不用看項(xiàng)目代碼就能猜到做什么的。
\Libraries\Nop.Core
Nop.Core項(xiàng)目包含nopcommerce的一系列核心類如緩存,事件,輔助類和業(yè)務(wù)對象(如訂單和客戶實(shí)體類)
\Libraries\Nop.Data
Nop.Data項(xiàng)目包含一系列的數(shù)據(jù)訪問類和方法以從數(shù)據(jù)庫或其他數(shù)據(jù)媒介讀取和保存數(shù)據(jù)。它也有助于把數(shù)據(jù)訪問邏輯和你的業(yè)務(wù)對象分離。nopcommerce使用EntityFramework(EF)Code-First方法,允許你在nopcommerce代碼中定義實(shí)體(所有的核心實(shí)體類都在Nop.Core中定義),再讓EF生成數(shù)據(jù)庫,這就是為什么會叫Code-First。你接下來可以用LINQ來查詢對象,它自己會把查詢轉(zhuǎn)換為SQL語句并在數(shù)據(jù)庫里執(zhí)行。nopcommerce擁有牛B的API讓你完全定制持久映射,你可以在這兒和這兒找到Code-First的資料。
\Libraries\Nop.Services
此項(xiàng)目包含一系列的核心服務(wù),業(yè)務(wù)邏輯,驗(yàn)證,如果有數(shù)據(jù)的話還有數(shù)據(jù)的計(jì)算方法,也就是傳說中的業(yè)務(wù)訪問層(BAL)\Plugins\文件夾中的那些項(xiàng)目Plugins是VS的解決方案文件夾,硬盤中它是在你解決方案的根目錄下。由于項(xiàng)目在編譯時的輸入路徑是”..\..\Presentation\Nop.Web\Plugins\{Group}.{Name}\”,這樣插件的DLL會自動地放到\Presentation\Nop.Web\Plugins\文件夾中,用來放置已部署插件。這樣也能讓插件包含靜態(tài)文件比如CSS或JS,就不用在項(xiàng)目之間拷貝這些文件了。\Presentation\Nop.AdminNop.Admin是一MVC項(xiàng)目,如果你還從沒用過ASP.NETMVC,請猛擊\o"nopcommerce,MVC"這兒有更多信息。可能你已經(jīng)猜到這是表示層中的管理后臺,你可以在\Presentation\Nop.Web\Administration文件夾中找到它,此項(xiàng)目不能運(yùn)行。\Presentation\Nop.WebNop.Web也是一MVC項(xiàng)目,前臺網(wǎng)店的表示層,這個才是你真正要跑起來的項(xiàng)目,它也是整個應(yīng)用程序的起始項(xiàng)目。\Presentation\Nop.Web.FrameworkNop.Web.Framework是一個表示層的類庫項(xiàng)目,包括可以讓后臺和前臺使用的一些共用的展示功能。\Test\Nop.Core.TestsNop.Core.Tests是Nop.Core的測試項(xiàng)目\Test\Nop.Data.TestsNop.Data.Tests是Nop.Data的測試項(xiàng)目\Test\Nop.Services.TestsNop.Services.Tests是Nop.Services的測試項(xiàng)目\Test\Nop.TestsNop.Tests是一個類庫,包含其它測試項(xiàng)目中要用的一共有類和輔助方法,此項(xiàng)目不包含任何測試用例擴(kuò)展現(xiàn)有實(shí)體-添加新的屬性Updatinganexistingentity.Howtoaddanewproperty.擴(kuò)展現(xiàn)有實(shí)體:如何添加一個新的屬性?ThistutorialcovershowtoaddapropertytotheAffiliateentitythatshipswiththenopCommercesourcecode.本教程將為代理商實(shí)體Affiliateentity添加一個屬性,附帶nopCom源碼。Thedatamodel數(shù)據(jù)模型Entitieswillhavetwoclassesthatareusedtomaprecordstoatable.Thefirstclassdefinestheproperties,fields,andmethodsconsumedbythewebapplication.實(shí)體將有兩個類用于映射記錄表:第一個類定義affiliate的屬性、字段和方法。FileSystemLocation文件位置:[ProjectRoot]\Libraries\Nop.Core\Domain\Affiliates\Affiliate.csAssembly程序集:Nop.CoreSolutionLocation解決方案中的位置:Nop.Core.Domain.Affiliates.Affilate.csThesecondclassisusedtomapthepropertiesdefinedintheclassabovetotheirrespectiveSQLcolumns.ThemappingclassisalsoresponsibleformappingrelationshipsbetweendifferentSQLtables.第二個類是將各屬性分別映射到對應(yīng)的SQL列,以及映射不同的SQL表之間的關(guān)系。FileSystemLocation:[ProjectRoot]\Libraries\Nop.Data\Mapping\Affiliates\AffiliateMap.cs
Assembly:Nop.Data
SolutionLocation:Nop.Data.Mapping.Affiliates.AffiliateMap.csAddthefollowingpropertytotheAffiliateclass.eq\o\ac(○,1)為Affiliate添加一個屬性:publicvirtualstringAffiliateWebSite{get;set;}
AddthefollowingcodetotheconstructoroftheAffiliateMapclass.eq\o\ac(○,2)為AffiliateMap添加一個構(gòu)造函數(shù):this.Property(m=>m.AffiliateWebSite).HasMaxLength(255).IsOptional();
BecauseI’mallaboutresults,atthispointIwouldrunthecode,re-installthedatabase,andverifythatthecolumnwascreatedappropriately.eq\o\ac(○,3)修改數(shù)據(jù)庫,為Affiliate表添加列:AffiliateWebSite,允許為空,navrchar(255)。eq\o\ac(○,4)重新編譯程序Thepresentationmodel視圖模型Thepresentationmodelisusedtotransportinformationfromacontrollertotheview(readmoreat/mvc).Modelshaveanotherpurpose;definingrequirements.表示模型用于傳輸控制器的信息視圖(參考/mvc)。模型的另一個目的,定義需求。Weconfiguredourdatabasetoonlystore255charactersfortheAffiliateWebSite.IfwetryandsaveanAffiliateWebSitewith300characterstheapplicationwillbreak(ortruncatethetext).Wewanttheapplicationtoprotectusersfromfailuresthebestwecan,andourviewmodelshelpenforcerequirementslikestringlength.我們在數(shù)據(jù)庫中設(shè)定AffiliateWebSite長度為255個字符,如果嘗試保存300個字符的,程序?qū)⒅袛啵ɑ蚪財(cái)辔谋荆?。因此需要通過程序強(qiáng)制用戶輸入不超過255個字符,盡可能地降低出錯。FileSystemLocation:[ProjectRoot]\Presentation\Nop.Web\Administration\Models\Affiliates\AffiliateModel.cs
Assembly:Nop.Admin
SolutionLocation:Nop.Admin.Models.Affiliates.AffiliateModel.csThevalidatorclassisusedtovalidatethedatastoredinsideofthemodelclass(e.g.requiredfields,maxlength,andrequiredranges).驗(yàn)證輸入格式FileSystemLocation:[ProjectRoot]\Presentation\Nop.Web\Administration\Validators\Affiliates\AffiliateValidator.cs
Assembly:Nop.Admin
SolutionLocation:Nop.Admin.Validators.Affiliates.AffiliateValidator.csAddthepropertytoourviewmodel.eq\o\ac(○,5)添加視圖模型需要的屬性:[NopResourceDisplayName("Admin.Affiliates.Fields.AffiliateWebSite")]publicstringAffiliateWebSite{get;set;}Therequirementscodewillbeaddedintheconstructorofthevalidator.RuleFor(m=>m.AffiliateWebSite).Length(0,255);TheviewFileSystemLocation:[ProjectRoot]\Presentation\Nop.Web\Administration\Views\Affiliates\_CreateOrUpdate.cshtml
Assembly:Nop.Admin
SolutionLocation:Nop.Admin.Views.Affiliates._CreateOrUpdate.cshtmlViewscontainthehtmlfordisplayingmodeldata.Placethishtmlunderthe"active"section.eq\o\ac(○,6)在視圖中添加一行:<tr>
<tdclass="adminTitle">
@Html.NopLabelFor(model=>model.AffiliateWebSite):
</td>
<tdclass="adminData">
@Html.EditorFor(model=>model.AffiliateWebSite)
@Html.ValidationMessageFor(model=>model.Active)
</td></tr>ThecontrollerInthiscasethecontrollerisresponsibleformappingthedomaindatamodeltoourviewmodelandviceversa.ThereasonIchoosetheaffiliatemodeltoupdateisbecauseofthesimplicity.IwantthistobeanintroductiontothenopCommerceplatformandIwouldliketokeepitassimpleaspossible.在這種情況下,控制器負(fù)責(zé)域數(shù)據(jù)模型映射到視圖模型,反之亦然。這里之所以選擇“代理商”模型來更新是因?yàn)樗容^簡單。以便盡可能簡單地為大家介紹如何擴(kuò)展現(xiàn)有實(shí)體屬性。FileSystemLocation:[ProjectRoot]\Presentation\Nop.Web\Administration\Controllerss\AffiliateController.cs
Assembly:Nop.Admin
SolutionLocation:Nop.Admin.Controllers.AffiliateController.csWe'regoingtomakethreeupdatestotheAffiliateControllerclass.DataModel->ViewModelCreateViewModel->DataModelEditViewModel->DataModelNormallyIwouldwritetestsforthefollowingcodeandverifythatmodelmappingisworkingcorrectly,butI'llskipunittestingtokeepitsimple.我們將要進(jìn)行三次更新AffiliateController類。數(shù)據(jù)模型-視圖模型創(chuàng)建視圖模型->數(shù)據(jù)模型編輯視圖模型->數(shù)據(jù)模型通常情況下,我會寫下面的代碼測試和驗(yàn)證模型的映射正常工作,但我會跳過單元測試,以保持它的簡單。InthemethodPrepareAffiliateModeladdthefollowingcodebelowthemodel.Active=affiliate.Active:eq\o\ac(○,7)找到PrivatevoidPrepareAffiliateModel方法,在model.Active=affiliate.Active后中添加代碼:
model.AffiliateWebSite=affiliate.AffiliateWebSite;
InthepublicActionResultCreate(AffiliateModelmodel,boolcontinueEditing)methodaddthefollowingcodebelowaffiliate.Active=model.Active:eq\o\ac(○,8)找到publicActionResultCreate(AffiliateModelmodel,boolcontinueEditing)方法,在affiliate.Active=model.Active后添加代碼:affiliate.AffiliateWebSite=model.AffiliateWebSite;AsimilarchangeisrequiredinpublicActionResultEdit(AffiliateModelmodel,boolcontinueEditing):eq\o\ac(○,9)最后,在publicActionResultEdit(AffiliateModelmodel,boolcontinueEditing)方法中添加以下代碼:affiliate.AffiliateWebSite=model.AffiliateWebSite;TroubleshootingRecreatethedatabase.EitheryourowncustomSQLscriptorusethenopCommerceinstaller.Stopthedevelopmentwebserverbetweenschemachanges.Postadetailedcommentonourforums.
如何編寫nopCommerce插件插件(Plug-in,又叫addin、add-in、addon或add-on)是一種電腦程序,通過和應(yīng)用程序的互動,用來替應(yīng)用程序增加一些所需要的特定的功能。(Wikipedia)插件用來擴(kuò)展nopCommerce的功能,nopcommcer有多種類型的插件。比如支付方式中的paypal,稅率供應(yīng)商,配送計(jì)算方式(UPS,USP,Fedex),小部件(livechat功能)等等。nopCommerce本身也自帶了很多不同的插件。你可以在官網(wǎng)上搜索是否已經(jīng)有人上傳了滿足你需要的插件。如果沒有,哥這就手把手帶你編寫一個出來。插件結(jié)構(gòu),所用文件,所在位置1.你第一件事就是要在解決方案中新建一個“類庫”項(xiàng)目。最好的辦法是把插件都放在解決方案根目錄(不過小心不要和Nop.Web下邊的plugins目錄搞混了,那兒是放已布置插件的),而且最好把插件也都放在解決方案目錄的plugin目錄中(關(guān)于更多解決方案文件夾的信息,請猛擊此處)最好以這種方法來命名:”Nop.Plugin.{Group}.{Name}”。{Group}是你插件的分類(比如支付),{Name}是你的插件名(比如”AuthorizeNet”),那么Authorize.NET的支付插件就會有這樣的名字:Nop.Plugin.Payments.AuthorizeNet。2.一旦建立了插件項(xiàng)目,把輸入路徑改為”..\..\Presentation\Nop.Web\Plugins\{Group}.{Name}\”,比如Authorize.NET支付插件就會有這樣的輸入路徑:“..\..\Presentation\Nop.Web\Plugins\Payments.AuthorizeNet\”。搞定以后,對應(yīng)的插件DLL就會被拷貝到\Presentation\Nop.Web\Plugins\文件夾,nopCommerce內(nèi)核會搜索此文件夾。a.在項(xiàng)目菜單,點(diǎn)擊屬性
b.選擇生成選項(xiàng)卡
c.點(diǎn)擊輸入路徑旁邊的瀏覽按鈕選擇一個輸入目錄你要在debug和release模式下都要做此步驟。3.下一步你就要為你的每一個插件建立一個Description.txt,此文件包含描述插件的信息。你可以從其它插件目錄中拷出來。比如Authorize.NET支付插件的Description.txt就有如下內(nèi)容:Group:PaymentmethodsFriendlyName:CreditCardSystemName:Payments.AuthorizeNetVersion:1.00SupportedVersions:2.30Author:nopCommerceteamDisplayOrder:1FileName:Nop.Plugin.Payments.AuthorizeNet.dll其實(shí)所有的信息你都能看懂,不過有一些注意事項(xiàng)。SystemName必須唯一。Version字段是你插件的版本號,你可以將它設(shè)置為你喜歡的任何值。SupportedVersions可以包含一個由逗號分隔的(確保nopCommerce當(dāng)前版本包含在此列表中,否則此插件沒戲)支持版本清單。FileName是用這個格式:Nop.Plugin.{Group}.{Name}.dll(是你插件的assembly文件名)。要確保此文件的“拷貝到輸入目錄”屬性是“Copyifnewer”
4.所需的最后一個步驟是創(chuàng)建一個類實(shí)現(xiàn)IPlugin接口(Nop.Core.Plugins命名空間)。nopCommerce有BasePlugin類已經(jīng)實(shí)現(xiàn)了一些IPlugin方法,這樣你就不用苦逼地再寫一遍。nopCommerce還提供一些從IPlugin派生特定的接口。例如,俺們有“IPaymentMethod”接口,用于創(chuàng)建新的付款插件,它包含了一些特定的用于付款的方法如ProcessPayment()或GetAdditionalHandlingFee()。nopCommerce目前有以下特定的插件接口:
IExternalAuthenticationMethod.用來建立外部認(rèn)證方法如Facebook,Twitter,OpenID,etc.
IWidgetPlugin.讓你可以創(chuàng)建小部件,小部件在你網(wǎng)站的某些地方出現(xiàn),如左邊的Livechat框
IExchangeRateProvider.用于獲得貨幣匯率.
IDiscountRequirementRule.允許你創(chuàng)建新的折扣規(guī)則比如”帳單寄到的國家必須是……“
ISMSProvider.短信提供商,讓你可以在下單時收到短信通知。
IPaymentMethod.用于處理支付流程的插件。
IPromotionFeed.這些插件用于向Froogle或PriceGrabber提供產(chǎn)品信息
IShippingRateComputationMethod..這些插件是用于獲取可用的配送方法和正確的運(yùn)費(fèi)。例如,UPS,UPS,F(xiàn)EDEX等。
ITaxProvider.稅率提供商用于獲取稅率。處理請求??刂破?,模型和視圖?,F(xiàn)在你可以在Adminarea>Configuration>Plugins看到我們的插件了,不過正如你所想,這個杯具的插件啥都不能做,甚至連個配置的界面都沒有?,F(xiàn)在讓我們來創(chuàng)建一個配置頁面。我們現(xiàn)在需要做的是創(chuàng)建一個控制器,模型和視圖。MVC控制器負(fù)責(zé)響應(yīng)對一個ASP.NETMVC網(wǎng)站的請求。每個瀏覽器請求被映射到一個特定的控制器。一個視圖包含被發(fā)送到瀏覽器的HTML標(biāo)記和內(nèi)容。視圖是相當(dāng)于一個ASP.NETMVC應(yīng)用程序的頁面。一個MVC模型包含視圖或控制器以外的所有應(yīng)用程序邏輯。關(guān)于MVC模式在\o"MVC"這里你可以找到更多的信息。那么,我們可以開工了:創(chuàng)建模型。新插件中加入一個Models文件夾,然后按你需要新加入一個模型類。
創(chuàng)建視圖。在插件項(xiàng)目中新加一個Views文件夾,再在里邊添加一個{Name}文件夾,此處{Name}是指你的插件名。然后再添加一個Configure.cshtml文件。很重要的一點(diǎn):此視圖應(yīng)該要注明是嵌入資源。
創(chuàng)建控制器。在插件項(xiàng)目中新加一個controller文件夾,再新加一個控制器類。最好的命名辦法是像{Group}{Name}Controller.cs這樣如PaymentAuthorizeNetController。再好好地命名一個action方法用于配置。哥叫它“Configure”。準(zhǔn)備一個模型類并將其傳給這個視圖:Nop.Plugin.{Group}.{Name}.Views.{Group}{Name}.Configure,即那個嵌入視圖。比如你在Authorize.NET支付插件中的PaymentAuthorizeNetController實(shí)現(xiàn)你就會比較清楚。提示一:從其它插件項(xiàng)目中拷貝web.config到你項(xiàng)目里來,這樣在做視圖的時候有智能感知(老?。喊??真的么?這和拷文件有什么關(guān)系?)。智能感知即微軟的自動完成亮點(diǎn)。提示二:搞定以上步驟最簡單的辦法是直接把其它插件項(xiàng)目拷貝過來,然后文件和文件夾改名。提示三:如果你想限制后臺(店主)控制器的一些action方法,只用在方法上加[AdminAuthorize]屬性即可。提示四:接下來要確保所有第三方的程序集引用的“拷貝到本地”屬性設(shè)為false,這樣可以減小部署包的大小。比如Authorize.NET插件的項(xiàng)目結(jié)構(gòu)會如下圖:路由現(xiàn)在我們要為插件注冊相應(yīng)的路由。ASP.NET路由用于把瀏覽器發(fā)送的請求映射成MVC控制器相應(yīng)的action方法,接下來的步驟你會讀到很多詳細(xì)關(guān)于路由的信息。1.新建如下文件:RouteProvider.cs,它會向nopcommerce告知關(guān)于插件路由信息。比如下邊的RouteProvider添加了一個新的路由,可以通過瀏覽器路徑http://www.yourS/Plugins/PaymentAuthorizeNet/Configure來訪問:publicpartialclassRouteProvider:IRouteProvider{publicvoidRegisterRoutes(RouteCollectionroutes){routes.MapRoute("Plugin.Payments.AuthorizeNet.Configure","Plugins/PaymentAuthorizeNet/Configure",new{controller="PaymentAuthorizeNet",action="Configure"},new[]{"Nop.Plugin.Payments.AuthorizeNet.Controllers"});}publicintPriority{get{return0;}}}2.一些特寫的插件接口(像上邊講的)和“IMiscPlugin”接口有一個方法“GetConfigurationRoute”。它應(yīng)該向控制器返回一個用于插件后臺配置的路由。實(shí)現(xiàn)你插件的“GetConfigurationRoute”方法,可以告知nopCommerce你插件的后臺配置路由是什么。如果你插件不需要后臺配置,那么此方法將返回NULL,比如下邊這樣:publicvoidGetConfigurationRoute(outstringactionName,
outstringcontrollerName,
outRouteValueDictionaryrouteValues)
{
actionName=“Configure”;
controllerName=“PaymentAuthorizeNet”;
routeValues=newRouteValueDictionary()
{
{“Namespaces”,“Nop.Plugin.Payments.AuthorizeNet.Controllers”},
{“area”,null}
};
}只要你有這個配置方法,插件安裝以后你就能在Admin>Configuration>Plugins找到一個配置鏈接。處理“安裝”和“卸載”方法這是可選步驟。一些插件需要有一定的安裝邏輯,比如插件要添加一些本地資源數(shù)據(jù)。在你的IPlugin實(shí)現(xiàn)中(大多數(shù)情況下是直接從BasePlugin類繼承下來),重載以下方法:1.Install:在插件安裝時會調(diào)用此方法,你可以在此初始化任何設(shè)置,添加新的本地資源數(shù)據(jù)或添加新的數(shù)據(jù)庫表(如果需要的話)2.Uninstall:在卸載插件時會調(diào)用此方法。重要說明:如果你重載這些方法,不要隱藏基類的實(shí)現(xiàn)。比如重載”Install”的時候要記得調(diào)用base.Install(),Authorize.NET的install方法如下:publicoverridevoidInstall()
{
varsettings=newAuthorizeNetPaymentSettings()
{
UseSandbox=true,
TransactMode=TransactMode.Authorize,
TransactionKey=“123″,
LoginId=“456″
};
_settingService.SaveSetting(settings);base.Install();
}提示:已安裝的插件列表可以在\App_Data\InstalledPlugins.txt找到,這個列表是在安裝的時候創(chuàng)建的。升級nopCommerce可能會讓插件掛掉一些插件可能在新版本的nopCommerce中掛掉無法工作。如果在升級后有問題,請刪除插件再到nopCommerce官網(wǎng)看看是否有些版本的插件下載。大部分的插件作者都會把他們的插件升級到新的版本,不過少數(shù)插件并不會跟隨著一起升級從而不再支持新版本。不過大多數(shù)情況下,你可以打開相應(yīng)的Description.txt文件并編輯SupportedVersions字段。小結(jié)希望此文能讓你開始nopCommerce的插件之旅并搞個出類拔萃的插件。
nopCommerce常見開發(fā)問題匯總以下列出的是程序猿攻城濕在開發(fā)nopCommerce的時候經(jīng)常提出的問題。它們也表現(xiàn)出nopCommerce團(tuán)隊(duì)對一些架構(gòu)的選擇。文章說明:文章來源自我的博客,于原文之理解而翻譯,并非出版社那種按字詞翻譯風(fēng)格。歡迎各位提出意見,也歡迎各位轉(zhuǎn)載不過務(wù)必注明本文原址。更多nopcommerce的文章請關(guān)注/?tag=nopcommerce,或者加入我們的QQ群101675096有哪些要求?NopCommerce的技術(shù)和系統(tǒng)要求可以在這兒找到(英文)程序猿如何向nopCommerce項(xiàng)目貢獻(xiàn)代碼?NopCommerce代碼托管在codeplexMercurial代碼庫,用戶點(diǎn)此訪問。借此公共代碼庫,用戶可找到將要發(fā)布的修改和以前的設(shè)計(jì)決策。如果想知道codeplexMercurial對版本樹的支持請?jiān)谶@兒和這兒找更多信息。程序猿可以很容易地在我們的擴(kuò)展頁面上傳插件和語言包并分享給他人。要上傳擴(kuò)展,請?jiān)跒g覽器中訪問我的帳號,選擇“Yourcontributionsandextensions”選項(xiàng)卡,然后點(diǎn)擊“Uploadanewextension”按鈕。我如何報(bào)告一個缺陷?nopCommerce使用Codeplex作為官方缺陷跟蹤系統(tǒng),如果發(fā)現(xiàn)一個缺陷,可通過在Codeplex創(chuàng)建一個任務(wù)來報(bào)告給nopCommerce團(tuán)隊(duì)。程序猿或用戶也可以在我們的BugReports論壇版塊發(fā)帖子來告知新發(fā)現(xiàn)的缺陷。如果你的缺陷已經(jīng)被記錄當(dāng)然最好,正因?yàn)榇耍?yàn)證那些沒有被記錄的缺陷更為重要(比較拗口)。報(bào)告重復(fù)的缺陷會分心而且讓我們在新的開發(fā)和改缺陷上時間更少。nopCommerce的數(shù)據(jù)訪問層Nop.Data項(xiàng)目包含一系列的類和函數(shù)來讀取和寫入數(shù)據(jù)庫或是其它數(shù)據(jù)存儲介質(zhì)。Nop.Data項(xiàng)目有助于將數(shù)據(jù)訪問的邏輯從你的業(yè)務(wù)對象中分離出來。NopCommerce使用EntityFramework(EF)Code-First,Code-First允許程序員在源代碼中定義實(shí)體(所有核心實(shí)體都在Nop.Core項(xiàng)目中定義),然后使用EF來生成基于C#類的數(shù)據(jù)庫,這就是為何被稱為Code-First。你可以用LINQ來查詢你的對象,它會悄悄地把代碼轉(zhuǎn)化為SQL語句并在數(shù)據(jù)庫執(zhí)行。Nopcommerce有流利的API用于完全定制化的持久映射。如果想了解更多Code-First請?jiān)L問這兒和這兒控制反轉(zhuǎn)和依賴注入控制反轉(zhuǎn)和依賴注入是兩個密不可分的方法用來分離你應(yīng)用程序中的依賴性??刂品崔D(zhuǎn)InversionofControl(IoC)
意味著一個對象不會新創(chuàng)建一個對象并依賴著它來完成工作。相反,它們從外部獲取它們想要的對象。依賴注入DependencyInjection(DI)
意味著在沒有對象的干預(yù)下,一般通過能傳入構(gòu)造參數(shù)和一系列屬性的框架組件完成。馬丁虎老二(MartinFowler)寫過一篇關(guān)于依賴注入和控制反轉(zhuǎn)的牛B文章,我就不要再抄到這兒了,你可以在這兒找到。NopCommerce使用Autofac類庫作為IOC容器。只要你寫了一個服務(wù)和此服務(wù)已實(shí)現(xiàn)的適當(dāng)接口,你應(yīng)該在任何實(shí)現(xiàn)了IDependencyRegistrar接口(Nop.Core.Infrastructure.DependencyManagement命名空間).的類里注冊它。比如所有nopCommerce的核心服務(wù)都在Nop.Web.Framework類庫的DependencyRegistrar類中已注冊。publicclassDependencyRegistrar:IDependencyRegistrar{publicvirtualvoidRegister(ContainerBuilderbuilder,ITypeFindertypeFinder){builder.Register(c=>c.Resolve().Request)
.As()
.InstancePerHttpRequest();
builder.Register(c=>c.Resolve().Response)
.As()
.InstancePerHttpRequest();你想創(chuàng)建多少依賴注冊類都可以。每一個類實(shí)現(xiàn)了IDependencyRegistrar接口的類都有一個Order屬性,可以用它來替換一個現(xiàn)有的依賴。要覆蓋nopcommerce的依賴,設(shè)置order屬性為大于0。Nopcommerce會對依賴排序,并按順序運(yùn)行,數(shù)字越大你的對象越遲被注冊。我如何注冊新的路由(路由?我覺得還是用routes比較好呢?)ASP.NET路由主要用于接受進(jìn)來的瀏覽器請求并把它映射到具體的MVC控制器action上。在此有更多信息。Nopcommerce有一個叫IRouteProvider的接口,用于在應(yīng)用程序開始時注冊路由。所有的核心路由都在Nop.Web項(xiàng)目中的RouteProvider注冊。publicpartialclassRouteProvider:IRouteProvider{publicvoidRegisterRoutes(RouteCollectionroutes){//homepageroutes.MapLocalizedRoute(“HomePage”,“”,new{controller=“Home”,action=“Index”},new[]{“Nop.Web.Controllers”});你想創(chuàng)建多少RouteProvider都可以。比如,如果你的插件有定制路由,需要注冊,于是你可以創(chuàng)建一個實(shí)現(xiàn)IRouteProvider接口的新類,再根據(jù)插件具體注冊路由。數(shù)據(jù)校驗(yàn)數(shù)據(jù)校驗(yàn)是一個用以保證程序操作干凈,正確和有用數(shù)據(jù)的流程。很多.NET程序猿使用DataAnnotationValidators,不過nopCommerce用的是FluentValidation,一個有著文藝青年般的接口和lambda表達(dá)式構(gòu)成的.NET的小型驗(yàn)證庫,用以生成符合你業(yè)務(wù)需求的校驗(yàn)規(guī)則。在nopCommerce中你必須要通過2步來添加一個校驗(yàn)到一些模型中:1.創(chuàng)建一個繼承自AbstractValidator的類并把所有必須的驗(yàn)證邏輯都放入其中,看下邊這些應(yīng)該有所啟發(fā):publicclassAddressValidator:AbstractValidator
{
publicAddressValidator(ILocalizationServicelocalizationService)
{
RuleFor(x=>x.FirstName)
.NotEm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- YY/T 1284-2024牙科學(xué)牙科鑷
- 銷售公司業(yè)務(wù)員勞動合同協(xié)議
- 房屋按揭共同還款合同樣本2025
- 生態(tài)養(yǎng)殖基地租賃合同
- 特許經(jīng)營合同示范文本
- 新能源貨車租賃合同
- 采購合同管理:風(fēng)險防范與應(yīng)對措施
- 合作建房借款合同(單位集體住房)
- 度產(chǎn)品試用合同協(xié)議
- 金屬冶煉安全管理課件
- 2025包頭青山賓館有限公司面向社會公開招聘18人筆試參考題庫附帶答案詳解
- 課件-DeepSeek從入門到精通
- 2025至2030年中國毛絨卡通玩具數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年度智能充電樁場地租賃合同范本3篇
- 2024年蕪湖職業(yè)技術(shù)學(xué)院高職單招語文歷年參考題庫含答案解析
- 心電監(jiān)護(hù)儀的操作及注意事項(xiàng) 課件
- GB/T 718-2024鑄造用生鐵
- 細(xì)胞生物學(xué)(全套1047張課件)
- CFM56-7發(fā)動機(jī)滑油系統(tǒng)及其常見故障分析(共41頁)
- 《嵌入式技術(shù)》課程標(biāo)準(zhǔn)(STM32版)
- tplink-mr11u刷openwrt教程
評論
0/150
提交評論