應該是在兩年前了,在拜讀園子裏大神的文章時偶然瞭解到有個叫NopCommerce的商城系統,苦於沒有時間,各類耽誤,其中研究過一段時間,也就是一個星期時間,後來又耽擱了,直到最近,隨着項目進入間歇期,終於有時間好好的研究下nop的代碼了,做爲優秀的.net B2C商城系統,從系統的架構設計角度出發,具備很強的拓展性,結合DDD思想,我以爲能夠對系統有更深刻的瞭解。web
今天我就簡單的先將系統解決方案中的項目作拆解,並附上本身的理解。我這裏使用的是3.7版本的源碼,官方目前到3.8,總體應該差異不大,能夠到官網查看http://www.nopcommerce.com數據庫
從四個文件夾提及:api
1、Libraries架構
這裏存放了大量的領域層服務、領域事件、基礎設施等,能夠說是整個系統的最核心,個人理解是即便沒有展現層,這裏的全部的功能也是完整的,換句話說,若是我將整個系統開發成API,這裏地方不須要作額外的改動,只須要api程序調用這裏的相關功能就能夠實現,絕對的鬆耦合。框架
文件沒有顯示齊全,可是能夠大概看到,這個項目裏存放了大量的通用支撐功能,用ddd的話講應該就叫通用支撐子域,還包括了基礎設施,領域類等。單元測試
這個項目裏是同數據庫作交互操做的數據層,在ddd裏屬於基礎設施一部分,也能夠單獨拎出來,之後換數據庫也不是難事。學習
領域服務,主要進行領域邏輯的實現。這個層的客戶只有應用層,那麼應用層在哪裏?就在展現層中。其實這個裏面並不包括web技術所特有的一些領域邏輯實現,就像我開始講的,web的領域邏輯實如今展現層中的web框架項目中。測試
2、Plugins 插件機制是nop系統的一個很大的特點,不須要對系統作二次開發,能夠靈活的開發出各類插件應用於系統。這個文件夾下面防止了大量的插件項目。.net
從名字就能夠看出來了,有支付插件,有留言簿插件,有各類打折促銷插件,這個之後再細說。插件
3、Presentation 展現層面,分爲後臺管理admin項目,前臺web項目,web框架項目,他的絕妙之處在於將web框架從領域邏輯層剝離,就像剛纔上面所講的,能夠將libraries裏的服務單獨拿出來用,沒有任何的違和。
這裏重點說下Framework,它是對Nop.Service的補充,重點在於對web程序的應用功能進行領域服務的深刻。
4、Tests 大量的測試項目,這個在老外寫的規範的項目裏都是必須存在的,可是在國內,猿們爲了更快的完成老闆交代的任務,基本不會去作單元測試,唉。。。其實這個是絕對好,能夠節省大量的時間。
後面我將逐個進行分析,對於nopcommerce,個人目標不是改裝他,而是更多的學習先進的開發思惟,必定要結合ddd思想。