详解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,整个数据库访问层操作看起来也清爽很多了。
代码结构
左侧主要分为三个文件夹,jqpress.web是存放web路由入口、模板皮肤、静态文件,上传文件夹,后台管理程序通过areas域管理来实现的,整个项目结构还是比较清晰的。
路由设计
路由入口为homecontroller这个文件,包括首页、产品列表,文章列表,文章内容等待,都是通过这个controller来路由的,虽然功能比较多,但是代码量不到300行,业务逻辑处理基本都在service层。
如下为一个列表界面的action逻辑才20几行
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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
以上就是本次我们为大家整理的全部内容,希望对你有所帮助,如果大家还有任何不明白的地方可以在下方的留言区讨论,感谢你对服务器之家的支持。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。