MzBlog分析
早上衣明志 在QQ群里说他的博客开源了,地址在 https://github.com/qihangnet/MZBlog,基于NancyFX和MongoDB开发的。博客内容需要使用 MarkDown 进行编写。Nancy框架是ASP.NET之外用.NET开发Web App的一种选择,而且也是一种很简单的选择。所以本文本着学习Nancy 框架的分析了下衣大哥的代码,下图是个脑图:

1、MongoDB:数据存储采用NoSQL MongoDB,采用官方的驱动 mongocsharpdriver。
2、核心库的测试项目MZBlog.Core.Tests:项目采用xUnit.NET测试框架,xUnit.net创造者是Jim Newkirk和Brad Wilson从包括NUnit及其它单元测试框架的使用经验中总结出来的一个新框架,相比于NUnit,xUnit.net和其他框架的比较可参考《xuint和其他的单元测试框架的比较》。另外FluentAssertions,非常棒的测试断言。非常符合人的思维模式。
3、项目分层:项目采用DDD(领域模型)的典型层次,包括了表现层,应用层,领域层和基础设施层,MZBlog.Core其实对应着基础设施层,不过这里的并不是指领域模型中的基础设施,更恰当的说应该是一些普通项目的核心层,封装一些常用的工具和服务,例如缓存、MongoDB操作。
![]()
MZBlog.Core的Documents、ViewProjections、Commands 对应的是MongoDB的领域层,领域层进行细分,会出现一些专门对应的一些领域核心层,领域核心实体扩展层。
- 领域核心层:这个层专门用于进行对领域层的扩展:用于定义一些领域中常用模式的接口,属于上层建筑。如ICommandInvoker,IViewProjection等,
- 领域核心扩展层:这个层专门用于对领域层中的实体进行扩展,如ViewProjections、Commands 等。
MZBlog.Web是应用层和表现层,同时也是对Nancy框架的一个应用的示例。
4、Nancy框架:Nancy是一个不错的轻量级开源.NET Web框架,他是asp.net框架之外的另一个web开发框架,他完全不依赖于System.Web.只为简单的Web开发做最基础的准备,以Nancy写的Web应用,可以轻松部署在Linux上,而不必受服务器操作系统的限制,衣明志的博客 就是在Linux上跑的,Web服务器使用的Jexus。
- Bootstrapper,类似与ASP.Net项目里的Global.asax,定义了应用的生命周期,继承了NancyBootstrapper类后可以重写基类的许多方法,比如
ApplicationStartup Security: Nancy的身份验证组件——Nancy.Authentication.Forms,你可以到nuget上获得。由于Nancy的运行机制跟ASP.NET几乎没有关联,到可以移步到Forms authentication with nancyfx看看它是怎么实现的。- Responses:Http响应,项目中有个RssResponse,封装了博客的RSS功能。
- Modules:Nancy Web App的核心,继承NancyModule这个基类,然后在构造里直接定义HTTP方法和路由即可,路由机制简单轻量但不失强大,可以方便的通过正则表达式制定路由规则。和ASP.NET相比非常简单吧,Nancy框架天生就是MVC结构,Modules类似于ASP.NET MVC的Controller。
- Modelbinding:类似于asp.net mvc的ModelBinding,具体参看https://github.com/NancyFx/Nancy/wiki/Model-binding,担负起Modules和Views之间数据传递的桥梁。
- Views: Nancy支持Razor, Spark, dotLiquid等视图引擎,开发人员可以根据自己的喜好,选用不同的视图引擎。MZBlog用的是Razor视图引擎,你的ASP.NET MVC的知识可以无缝嫁接。
- ErrorHandling:异常处理,可以根据不同的http状态码进行处理,具体可以参考 Consistent error handling with Nancy。
- TinyIoC:Nancy集成了TinyIoC,TinyIoC是一个跨各种手机平台的轻量级开源Ioc框架(TinyIoC),该框架非常小,只有一个cs文件就能使用,使用后感觉效果还不错,基本容器功能都支持了。git开源项目地址:https://github.com/grumpydev/TinyIoC
5、Bootstrap是Twitter出名的一个优秀的web前端框架,它让不太懂设计的web程序员们也能做出比较好看的UI来。Bootstrap3默认采用时下流行的扁平化设计,会让你的web显得很时尚.
6、Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber)和亚伦·斯沃茨(Aaron Swartz)。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档”。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。Markdown 语法可参考 http://wowubuntu.com/markdown/
xUnit.net runner for Visual Studio 2012 and 2013
Lift your Petticoats with Nancy....
From ASP.NET MVC to Nancy - Part 1
MzBlog分析的更多相关文章
- 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】
因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...
- alias导致virtualenv异常的分析和解法
title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...
- 火焰图分析openresty性能瓶颈
注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- 应用工具 .NET Portability Analyzer 分析迁移dotnet core
大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...
- UWP中新加的数据绑定方式x:Bind分析总结
UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...
- 查看w3wp进程占用的内存及.NET内存泄露,死锁分析
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
随机推荐
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- UWP中新加的数据绑定方式x:Bind分析总结
UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...
- vs2010静态链接MFC库报链接错误
由于需要将MFC程序在其它电脑上运行,所以需要将动态链接的MFC改成静态链接,本以为很简单,没想到链接的时候出现下面的链接错误: uafxcw.lib(afxmem.obj) : error LNK2 ...
- ThinkPHP 模板substr的截取字符串函数
ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...
- 【SAP业务模式】之ICS(三):前台操作
本片博文开始讲解SAP前台是如何实现ICS业务模式的. 一.VA01开立销售订单 我这里为了方便,创建了一个订单类型ZMIV作为公司间销售的订单类型,其实公司间销售订单跟标准的销售订单是一致的.同时, ...
- Android中开发工具Android Studio修改created用户(windows环境)
最近经常有朋友反馈说我的安卓项目中,在一些类中会出现Created by panchengjia on 2016/12/30的字样,是如何自动实现的(默认一般为Administrator),如下图: ...
- 高仿it之家新闻客户端源码
仿it之家新闻客户端界面,数据为本地假数据.仅实现了新闻模块的功能. 源码下载:http://code.662p.com/list/11_1.html 详细说明:http://android.662p ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- mysql查询性能优化
mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...
- SQL Server常见问题介绍及快速解决建议
前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...