GitHub:https://github.com/iamoldli/NetModularhtml
地址:https://nm.iamoldli.com
帳戶:admin
密碼:admin前端
地址:http://nm.demo.iamoldli.com/index.html
帳戶:admin
密碼:admingit
一、開篇
二、快速建立一個業務模塊
三、數據訪問模塊介紹
四、模塊化實現思路github
NetModular實現快速開發有兩個前提條件:web
一、約定優於配置的開發原則數據庫
二、代碼生成器npm
約定優於配置是如今處處可見的一種開發原則,好比ASP.NET MVC中的HttpGet
、HttpPost
等特性限制請求方式,好比控制器都以Controller
結尾,好比SpringBoot中各類註解等,都屬於約定優於配置,這種開發原則的好處在於能夠減小開發人員須要作決定的次數,使開發變得簡單、快速,只是這是對於老手來講的,對於新手則提升了學習成本。json
基本上每一個開源的框架都會有配套的代碼生成器,而代碼生成器其實就是以約定優於配置爲基礎的,只有先約定好了項目結構和開發規範,你才能實現一個代碼生成器。與其它代碼生成器不一樣,NetModular
的代碼生成器不是根據數據庫來生成代碼,而是提供了一個單獨的模塊,能夠很方便的集成到任何項目當中,經過Web的形式在線配置項目、實體、屬性、模型、枚舉等內容,而後能夠一鍵生成項目代碼並下載。後端
其實,個人最終目標是但願可以有一個強大的可視化編輯頁面,能夠靈活配置前端的視圖頁面以及後端的實體信息,最後直接在線編譯並熱加載到當前項目中。後端熱加載還有點思路,可是前端由於要打包的緣由,如今還沒想好解決,之後努力~瀏覽器
上面說了,代碼生成器是依賴與約定的,因此咱們先來看下一個模塊的項目結構
上圖中的Blog目錄,就是一個模塊的示例,自己就是經過代碼生成器生成後放到項目當中的(不少人第一眼看到覺得是DDD架構的,其實不是,頂多就是個DDDLite~),先說一下每層的做用
一、Domain:領域層,包含實體、實體擴展、實體相關的枚舉、倉儲接口
實體都已
Entity
結尾
倉儲接口都已Repository
結尾,且必須繼承IRepository<>
泛型接口
實體包含擴展屬性的,須要把實體設置爲部分類,且擴展類須要以Extend.cs
結尾
二、Infrastructure:基礎設施層,包含倉儲實現以及一些當前模塊特有的類,像配置項等
倉儲實現位於Repositories目錄下,不一樣數據庫放到不一樣的目錄下面
模塊特有的配置項放在Options目錄下
三、Application:應用服務層、包含全部的業務邏輯
每一個實體對應一個目錄,目錄名稱爲
實體名稱+Service
每一個目錄下包含有服務接口和實現、視圖模型、對象映射配置、模型驗證配置等信息
四、Web:接口層、包含控制器、模塊初始化配置等
必須建立
ModuleInitializer
類,且該類必須繼承IModuleInitializer
接口
必須建立ModuleController
基類控制器,繼承ModuleControllerAbstract
抽象類,並配置Area
特性用於配置區域
五、WebHost:Web主機,包含配置文件,用於安裝所需的模塊以及啓動項目
必須建立
Startup
類,而且繼承StartupAbstract
抽象類
在Program
的Main
函數中,使用WebHostCreator.Run<Startup>(args);
方式啓動
六、WebHost.Electron:客戶端主機,用於啓動基於 Electron.js 的客戶端程序
以上就是NetModular
框架中一個模塊的結構,有了約定,那麼接下來就演示一下如何經過代碼生成器來建立項目吧。
已我的博客爲例,項目須要填名稱車和編碼
由於文章有多媒體信息,因此先添加一個多媒體的枚舉MediaType
添加文章Article
、分類Category
、標籤Tag
三個實體
以文章Article
爲例
在項目列表中,點擊生成按鈕生成代碼並下載。
打開生成的代碼,進入Blog/data
目錄,按需建立數據庫,由於模塊默認依賴Nm_Admin
模塊,因此也要建立Nm_Admin
的數據庫
進入Blog/src/WebHost/config
目錄,打開db.json
配置數據庫鏈接
回到Blog/src/WebHost
目錄,代開命令行輸入如下命令啓動服務端
dotnet watch run --environment Development
進入Blog/src/UI/nm-module-blog
目錄,執行如下命令來啓動前端代碼
npm install npm update npm run serve
最後在瀏覽器中輸入 http://localhost:6220 進行瀏覽
接口文檔地址 http://localhost:6220/swagger/index.html
若是沒有意外的話,應該能夠了~