早上衣明志 在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. Ubuntu下使用nvm

    写在前面:刚写着写着博客就跨年了,希望新的一年大家万事如意,一切向"前"看! 安装 wget -qO- https://raw.githubusercontent.com/crea ...

  2. Web性能优化:图片优化

    程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...

  3. 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  4. .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加

    在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...

  5. Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现

    前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...

  6. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  7. SVD奇异值分解的基本原理和运用

    SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...

  8. Maven 整合FreeMarker使用

    pom.xml <!-- freemarker jar --> <dependency> <groupId>org.freemarker</groupId&g ...

  9. 6_Win7下Chrome主页被流氓网站hao123.com劫持后的解决方法。

    今天安装了一个PDF阅读器,免费的,你懂的,结果自己安装的时候没有将默认的选项取消,就被hao123流氓网站劫持啦. 说实话某免费PDF阅读器还算好的,有一个可以供你选择的项.不想某些软件直接就默认选 ...

  10. BPM配置故事之案例12-触发另外流程

    还记得阿海么,对就是之前的那个采购员,他又有了些意见. 阿海:小明,你看现在的流程让大家都这么方便,能不能帮个忙让我也轻松点啊-- 小明:--你有什么麻烦,现在不是已经各个部门自己提交申请了嘛? 阿海 ...