天天看點

.NET作品集:linux下的.net mvc cms

cms程式架構

本程式是主要是用于企業網站開發的,也可以做部落格程式,程式是從之前上一篇的.net 部落格程式改進過來的,主要技術由webform轉成.net mvc了,由于是很早之前的項目,12年還是mvc3版本,當然還是跑在linux下的。

技術棧

  • .net framework 4.0
  • sqlite 資料庫
  • mono linux 運作環境以及mono下的sqlite庫
  • razor 模闆引擎
  • dapper 輕量級orm架構
  • vs2017 社群版本

這次的開發工具比較新了吧,上次用vs2010發的,跨度比較大,這個項目之前也是在10下開發出來的,雖然用2017,其實沒什麼影響的。

razor引擎比nvelocity的易用性高很多,而且跟後端集合的比較好。

而且這次的項目完全使用dapper orm,整個資料庫通路層操作看起來也清爽很多了。

代碼結構

.NET作品集:linux下的.net mvc cms

左側主要分為三個檔案夾,Jqpress.web是存放web路由入口、模闆皮膚、靜态檔案,上傳檔案夾,背景管理程式通過Areas域管理來實作的,整個項目結構還是比較清晰的。

路由設計

.NET作品集:linux下的.net mvc cms

路由入口為HomeController這個檔案,包括首頁、産品清單,文章清單,文章内容等待,都是通過這個Controller來路由的,雖然功能比較多,但是代碼量不到300行,業務邏輯處理基本都在service層。

如下為一個清單界面的Action邏輯才20幾行

public ActionResult Category(string pagename) 
        {
            var model = new PostListModel();
            CategoryInfo cate = _categoryService.GetCategory(pagename);
            model.Category = cate;
            if (cate != null)
            {
                int categoryId = cate.CategoryId;
                model.MetaKeywords = cate.CateName;
                model.MetaDescription = cate.Description;
                ViewBag.Title = cate.CateName;
                model.Url = ConfigHelper.SiteUrl + "category/" + Jqpress.Framework.Utils.StringHelper.SqlEncode(pagename) + "/page/{0}";

                const int pageSize = 10;
                int count = 0;
                int pageIndex = PressRequest.GetInt("page", 1);
                int cateid = PressRequest.GetQueryInt("cateid", -1);
                int tagid = PressRequest.GetQueryInt("tagid", -1);
                if (cateid > 0)
                    pageIndex = pageIndex + 1;
                var cateids =categoryId+","+ _categoryService.GetCategoryList().FindAll(c => c.ParentId == categoryId).Aggregate(string.Empty, (current, t) => current + (t.CategoryId + ",")).TrimEnd(',');
                var postlist = _postService.GetPostPageList(pageSize, pageIndex, out count, cateids.TrimEnd(','), tagid, -1, -1, -1, -1, -1,-1, "", "", "");
                model.PageList.LoadPagedList(postlist);
                model.PostList = (List<PostInfo>)postlist;
            }
            model.IsDefault = 0;
            

            return View(model.Category.ViewName,model);
        }
           

模闆引擎設計

.NET作品集:linux下的.net mvc cms
.NET作品集:linux下的.net mvc cms

模闆引擎采用razor,不同的cms風格模闆以檔案夾的形式存放在Themes檔案夾下,通過後端設定可以随意切換模闆(此功能還在完善當中)。

資料存儲設計

.NET作品集:linux下的.net mvc cms

作為輕量級的cms,當然不會用mysql或者sqlserver,依然堅定的使用sqlite,以上是通過dapper進行資料庫操作,雖然沒有微軟增加的orm強大,但是可讀性和操控性都是非常好的。

.NET作品集:linux下的.net mvc cms

因為要支援linux,是以sqlite的操作類需要

using Mono.Data.Sqlite;

,當然可以在windows下切換過來,上面我寫的切換方式太粗暴了,學過設計模式的同學應該分分鐘能夠重構出來,切換windows和linux簡直不要太友善。

資料庫結構

.NET作品集:linux下的.net mvc cms
  • jq_category

    分類及标簽表
  • jq_comments

    評論表
  • jq_links

    友鍊及導航設定
  • jq_posts

    文章表
  • jq_sites

    站點通路統計數字及文章、分類、數量統計表
  • jq_users

    賬戶表

資料庫結構跟之前的 部落格程式沒差别,隻是部分表結構字段有所差别

運作

vs2017調試模式預覽

cms首頁

.NET作品集:linux下的.net mvc cms

背景登入,預設使用者名admin,密碼123456

.NET作品集:linux下的.net mvc cms

背景首頁

.NET作品集:linux下的.net mvc cms

文章清單

.NET作品集:linux下的.net mvc cms

文章編輯

.NET作品集:linux下的.net mvc cms

linux下的部署方式

mono

.NET作品集:linux下的.net mvc cms

上圖為我伺服器上的mono安裝資訊。

jexus

linux下需要安裝mono和jexus就可以運作起來,mono作為.net framework的linux運作環境,jexus作為web伺服器。

.NET作品集:linux下的.net mvc cms

jexus配置,因為我的伺服器上還有其他語言的站點,是以沒有直接采用jexus對外服務。

nginx

.NET作品集:linux下的.net mvc cms

nginx代理了jexus的81端口,此地方不是必選,但是Nginx作為正常的代理軟體,可以在伺服器上跑.net、php、java等,各司其職,百花齊放。

bin檔案夾說明

.NET作品集:linux下的.net mvc cms

.net mvc3在 linux下的部署需要注意的是需要将項目下引用的dll都需要上傳到bin目錄下。并且還需要上傳Microsoft.web.Infrastructure.dll,這個是釋出mvc項目需要用的。可以對比下我webform下的Linux部落格程式站點bin下隻要引入Mono和Nvelocity這2個第三方dll,其他都是自己的業務程式,這個.net cms要的東西還挺多,下圖是我的部落格站點下的bin檔案夾内容。

.NET作品集:linux下的.net mvc cms

linux伺服器上的的.net 程式問題

  • jexus不支援中文,是以檔案上傳的路徑必須重寫成字母加數字元号形式,
  • jexus web伺服器是預設對大小寫敏感的,是以部署的時候一定要

    隻需要把 jws這個腳本檔案中的 “export MONO_IOMAP=...”這一句前邊的“#”去掉,就可以不區分大小寫了

源碼擷取

https://github.com/robotbird/jqpress.cms

為了防止部分同學無法通路Github,是以放oschina的gitee上了

https://gitee.com/robotbird/jqpress.cms

後記

在開發這個cms的時候那時候.net core還沒誕生,作為linux下的.net mvc項目還還是比較新穎的,隻可惜沒能好好的寫代碼,跑去做項目做産品去了,在這裡開源出來緬懷寫代碼的歲月,如果對大家有用那最好不過了。

如果對源碼感興趣可以聯系qq:330296409