详解linux下的.net/mvc/cms程序结构

 更新时间:2017年12月25日 08:39:32   投稿:laozhang  
本片文章给大家详细分析了在linux下.net/mvc/cms程序详细结构说明,了解这个对在linux下程序开发非常有用,有兴趣的参考学习下吧。

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,整个数据库访问层操作看起来也清爽很多了。

代码结构

左侧主要分为三个文件夹,Jqpress.web是存放web路由入口、模板皮肤、静态文件,上传文件夹,后台管理程序通过Areas域管理来实现的,整个项目结构还是比较清晰的。

路由设计

路由入口为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);
  }

模板引擎设计

模板引擎采用razor,不同的cms风格模板以文件夹的形式存放在Themes文件夹下,通过后端设置可以随意切换模板(此功能还在完善当中)。

数据存储设计

作为轻量级的cms,当然不会用mysql或者sqlserver,依然坚定的使用sqlite,以上是通过dapper进行数据库操作,虽然没有微软增加的orm强大,但是可读性和操控性都是非常好的。

因为要支持linux,所以sqlite的操作类需要using Mono.Data.Sqlite;
,当然可以在windows下切换过来,上面我写的切换方式太粗暴了,学过设计模式的同学应该分分钟能够重构出来,切换windows和linux简直不要太方便。

数据库结构

jq_category 分类及标签表 jq_comments 评论表 jq_links 友链及导航设置 jq_posts 文章表 jq_sites 站点访问统计数字及文章、分类、数量统计表 jq_users 账户表

数据库结构跟之前的 博客程序没差别,只是部分表结构字段有所差别

运行 vs2017调试模式预览

cms首页

后台登录,默认用户名admin,密码123456

后台首页

文章列表

文章编辑

linux下的部署方式 mono

上图为我服务器上的mono安装信息。

jexus

linux下需要安装mono和jexus就可以运行起来,mono作为.net framework的linux运行环境,jexus作为web服务器。

jexus配置,因为我的服务器上还有其他语言的站点,所以没有直接采用jexus对外服务。

nginx

nginx代理了jexus的81端口,此地方不是必选,但是Nginx作为常规的代理软件,可以在服务器上跑.net、php、java等,各司其职,百花齐放。

bin文件夹说明

.net mvc3在 linux下的部署需要注意的是需要将项目下引用的dll都需要上传到bin目录下。并且还需要上传Microsoft.web.Infrastructure.dll,这个是发布mvc项目需要用的。可以对比下我webform下的Linux博客程序站点bin下只要引入Mono和Nvelocity这2个第三方dll,其他都是自己的业务程序,这个.net cms要的东西还挺多,下图是我的博客站点下的bin文件夹内容。

linux服务器上的的.net 程序问题 jexus不支持中文,所以文件上传的路径必须重写成字母加数字符号形式, jexus web服务器是默认对大小写敏感的,所以部署的时候一定要

只需要把 jws这个脚本文件中的 “export MONO_IOMAP=...”这一句前边的“#”去掉,就可以不区分大小写了 源码获取

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

为了防止部分同学无法访问Github,所以放oschina的gitee上了

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

以上就是本次我们为大家整理的全部内容,希望对你有所帮助,如果大家还有任何不明白的地方可以在下方的留言区讨论,感谢你对脚本之家的支持。

相关文章

  • Linux中接收和处理数据包方式

    Linux中接收和处理数据包方式

    这篇文章主要介绍了Linux中接收和处理数据包方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 详解Linux CPU负载和CPU使用率

    详解Linux CPU负载和CPU使用率

    在本篇文章里小编给各位分享了关于Linux CPU负载和CPU使用率的相关知识点内容,有需要的朋友们参考下。
    2019-07-07
  • linux下查看yum/rpm/dpkg某软件是否已安装的方法

    linux下查看yum/rpm/dpkg某软件是否已安装的方法

    这篇文章主要介绍了在linux下查看yum/rpm/dpkg某软件是否已安装的方法,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • linux下scp和sftp命令使用详解

    linux下scp和sftp命令使用详解

    大家好,本篇文章主要讲的是linux下scp和sftp命令使用详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 基于Centos7 部署Varnish缓存代理服务器

    基于Centos7 部署Varnish缓存代理服务器

    这篇文章主要介绍了基于Centos7 部署Varnish缓存代理服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Xshell连接本地Linux虚拟机方式

    Xshell连接本地Linux虚拟机方式

    这篇文章主要介绍了Xshell连接本地Linux虚拟机方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • linux安装jdk并设置环境变量的方法教程(看这一篇够了)

    linux安装jdk并设置环境变量的方法教程(看这一篇够了)

    这篇文章主要介绍了linux安装jdk并设置环境变量的相关资料,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 详解ubuntu 20.04 LTS安装记录

    详解ubuntu 20.04 LTS安装记录

    这篇文章主要介绍了ubuntu 20.04 LTS安装记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 在Centos上搭建Maven中央仓库的方法

    在Centos上搭建Maven中央仓库的方法

    这篇文章主要介绍了在Centos上搭建Maven中央仓库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • CentOS7如何重置root密码的方法

    CentOS7如何重置root密码的方法

    这篇文章主要介绍了CentOS7如何重置root密码的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论