早上衣明志 在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的领域层,领域层进行细分,会出现一些专门对应的一些领域核心层,领域核心实体扩展层。

  1. 领域核心层:这个层专门用于进行对领域层的扩展:用于定义一些领域中常用模式的接口,属于上层建筑。如ICommandInvoker,IViewProjection等,
  2. 领域核心扩展层:这个层专门用于对领域层中的实体进行扩展,如ViewProjections、Commands 等。

MZBlog.Web是应用层和表现层,同时也是对Nancy框架的一个应用的示例。

4、Nancy框架:Nancy是一个不错的轻量级开源.NET Web框架,他是asp.net框架之外的另一个web开发框架,他完全不依赖于System.Web.只为简单的Web开发做最基础的准备,以Nancy写的Web应用,可以轻松部署在Linux上,而不必受服务器操作系统的限制,衣明志的博客 就是在Linux上跑的,Web服务器使用的Jexus

  1. Bootstrapper,类似与ASP.Net项目里的Global.asax,定义了应用的生命周期,继承了NancyBootstrapper类后可以重写基类的许多方法,比如ApplicationStartup
  2. Security: Nancy的身份验证组件——Nancy.Authentication.Forms,你可以到nuget上获得。由于Nancy的运行机制跟ASP.NET几乎没有关联,到可以移步到Forms authentication with nancyfx看看它是怎么实现的。
  3. Responses:Http响应,项目中有个RssResponse,封装了博客的RSS功能。
  4. Modules:Nancy Web App的核心,继承NancyModule这个基类,然后在构造里直接定义HTTP方法和路由即可,路由机制简单轻量但不失强大,可以方便的通过正则表达式制定路由规则。和ASP.NET相比非常简单吧,Nancy框架天生就是MVC结构,Modules类似于ASP.NET MVC的Controller。
  5. Modelbinding:类似于asp.net mvc的ModelBinding,具体参看https://github.com/NancyFx/Nancy/wiki/Model-binding,担负起Modules和Views之间数据传递的桥梁。
  6. Views: Nancy支持Razor, Spark, dotLiquid等视图引擎,开发人员可以根据自己的喜好,选用不同的视图引擎。MZBlog用的是Razor视图引擎,你的ASP.NET MVC的知识可以无缝嫁接。
  7. ErrorHandling:异常处理,可以根据不同的http状态码进行处理,具体可以参考 Consistent error handling with Nancy
  8. TinyIoC:Nancy集成了TinyIoCTinyIoC是一个跨各种手机平台的轻量级开源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....

Setting up a NancyFX website

From ASP.NET MVC to Nancy - Part 1

扩展NoteService,支持NancyFx

MzBlog分析的更多相关文章

  1. 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】

    因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...

  2. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  3. 火焰图分析openresty性能瓶颈

    注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...

  4. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  5. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  6. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  7. 查看w3wp进程占用的内存及.NET内存泄露,死锁分析

    一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...

  8. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  9. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

随机推荐

  1. Npm包的开发

    个人开发包的目录结构 ├── coverage //istanbul测试覆盖率生成的文件 ├── index.js //入口文件 ├── introduce.md //说明文件 ├── lib │   ...

  2. ASP.NET Aries 入门开发教程1:框架下载与运行

    背景: 鉴于框架的使用者越来越多,文档太少,不少用户反映框架的入门门槛太高. 好吧,再辛苦下,抽时间写教程吧! 步骤1:下载框架源码 开源地址:https://github.com/cyq1162/A ...

  3. C语言 · 薪水计算

    问题描述 编写一个程序,计算员工的周薪.薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水.如果员工工作的时间在40 到50 ...

  4. js复杂对象和简单对象的简单转化

    var course = { teacher :{ teacherId:001, teacherName:"王" }, course : { courseId : 120, cou ...

  5. 前端学HTTP之安全HTTP

    前面的话 HTTP的主要不足包括通信使用明文(不加密),内容可能会被窃听:不验证通信方的身份,有可能遭遇伪装:无法证明报文的完整性,有可能被篡改 基本认证和摘要认证能够使得用户识别后较安全的访问服务器 ...

  6. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

  7. ASP.NET 5 RC1 升级 ASP.NET Core 1.0 RC2 记录

    升级文档: Migrating from DNX to .NET Core Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2 Migrating ...

  8. 从display:run-in;中学习新技能

    有时我们想在一行内显示一个标题,以及一段内容,虽然看起来比较简单,但是为了语义化用dl比较合适,但是它默认是block元素,改成inline?那么有多段呢?不就都跑上来了?用float?那问题也挺多. ...

  9. 游走 bzoj 3143

    游走(2s 128MB)walk [问题描述] [输入格式] [输出格式] [样例输入] 3 3 2 3 1 2 1 3 [样例输出] 3.333 [样例说明] 题解: 主要算法:贪心:高斯消元: 题 ...

  10. 升级npm

    查看npm的所有版本 运行命令: npm view npm versions 命令运行后,会输出到目前为止npm的所有版本. [ '1.1.25', '1.1.70', '1.1.71', '1.2. ...