在ASP.NET和FluentNHibernate中使用Repository模式在NancyFx中进行CRUD操作





5.00/5 (2投票s)
引言 如今,RAD(快速应用开发)正在迅速发展。有许多框架可用于开发Web应用程序或Web项目。我们可以使用Microsoft的ASP.Net或ASP.Net MVC或任何其他框架。尽管如此,NancyFx对其自身也提供了支持
引言
如今,RAD(快速应用开发)正在迅速发展。有许多框架可用于开发Web应用程序或Web项目。我们可以使用Microsoft的ASP.NET或ASP.NET MVC或任何其他框架。尽管如此,NancyFx对其自身也提供了视图引擎的支持,例如Super Simple View Engine或Razor View Engine。此外,任何人都可以定义自己的自定义视图引擎。在本文中,我们将使用NancyFx构建一个使用ASP.Net和FluentNHibernate的RESTful服务,并逐步了解其工作原理。
什么是NancyFx?
简单来说,NancyFx是一个用于.Net的轻量级Web框架。如今,这个工具在C#开发者中非常流行,用于Web开发。NancyFx受到Ruby的Sinatra的启发。我从未使用过Ruby,所以不要比较Sinatra和NancyFX之间的东西 J。NancyFX内置处理所有请求(GET, PUT, POST,DELETE
等)。
为什么使用NancyFx?
有很多理由在Web开发中采用NancyFX。以下是我的观点(我们不在这篇文章中讨论这些观点)
- 成本更低
- 内置
IoC
容器(TinyIOC
) - 易于测试(就像
ASP.NET MVC
) - 不强制实现任何UI框架(即
MVM, MVC
等) - 提供定制(内置功能,可根据需要替换任何部分)
- 在Mono上运行
- 无需配置即可设置NancyFx
- 不受设计框架限制
- 可以在任何地方运行(
IIS
,WCF
,可以嵌入到EXE
中,作为Windows服务
等)
让我们开始创建一个示例项目
我们需要为我们的项目设置NancyFx和FluentNHibenrate支持。
先决条件
要实现并运行源代码,您应该具备
- Visual Studio 2013 或更高版本
- RestFul服务的基础知识
- FluentNHibernate的基础知识
- Repository模式的基础知识
创建空/骨架ASP.Net项目
首先,我们使用简单的空ASP.NET项目
- 启动 Visual Studio 并选择“文件”->“新建”->“项目”(或按 Ctrl + Shift + N)。
-
ASP.Net 新项目
引用附注——不要与已安装的 Nancy 模板混淆(我们将在下一篇文章中讨论)
在模板对话框中选择空模板
引用(附注:另外,你也可以将其托管在云端——我们在此不讨论此主题)
添加NancyFx和FluentNHibernate支持
我们可以通过多种方式添加NancyFx和FluentNHibernate,这里我们使用nuget包
- 打开nuget包管理器,搜索“Nancy”并按照图片所示选择:
- 或者,进入包管理器控制台并输入以下命令
- 要安装 FluentNHibernate,请转到 Package Manager Console 并输入以下命令
引用(附注:我们安装的是稳定版,目前有一个预发布版可用,如果你想尝试,可以使用预发布版)
我们的应用程序模板已经准备就绪。现在,让我们开始编写简单的CRUD操作。
- 添加新类文件并命名为“ServerDataModule.cs”
- 将以下代码添加到您的类中(这只是为了测试您的NancyFx是否已设置)
- 让我们检查NancyFx资源 – 从Visual Studio运行您的应用程序(按F5)
如果您在浏览器中看到了输出。这意味着您已成功设置所需内容。
- 现在,让我们设置模型类和仓库。
- 从解决方案资源管理器添加一个名为Models的新文件夹,并添加类
- ServerData.cs
-
- ServerDataMap.cs
- 从解决方案资源管理器添加一个名为Models的新文件夹,并添加类
附注:不要忘记添加
- 从解决方案资源管理器中,在Models下添加一个名为Persistent的新文件夹,并添加一个接口
IServerDataRepository
- 对于我们的项目,我们创建了一个辅助类,它支持我们的NHibernate的存储库模式。只需使用解决方案资源管理器添加一个名为
Helper
的新文件夹,并添加一个类NHibernateHelper
至此,我们已经完成了项目的核心准备工作。现在,我们只需以NancyFX的方式实现我们的存储库。
让我们重新访问我们的NancyModule
类ServerDataModule
并修改它。
这里,我们传递int类型的参数并返回一个Json对象。NancyFx最令人兴奋的一点是它会自动识别参数[参数定义在{}括号内],我们称之为资源的动态参数化。
这里,我们使用Post资源,并且this.Bind<ServerData>()
会自动将传入请求绑定到我们的ServerData模型。
添加数据库
创建数据库
完整的SqlScript已附上。以下是我们的表的sql脚本
CREATE TABLE [dbo].[ServerData](
[Id] [int] IDENTITY(1,1) NOT NULL,
[InitialDate] [datetime] NULL,
[EndDate] [datetime] NULL,
[OrderNumber] [int] NULL,
[IsDirty] [bit] NULL,
[IP] [nvarchar](15) NOT NULL,
[Type] [int] NULL,
[RecordIdentifier] [int] NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
为我们的项目添加Bootstrap和自定义异常
到目前为止,我们正在使用内置异常,现在让我们继续前进并实现自定义异常和Bootstrap功能。
添加Bootstrap
我们将使用“Structure Map”,还有许多其他IoC框架可用,但我选择了Structure Map以使我们的演示更容易J。
转到nuget包管理器并安装Nancy.BottStrappers.StructureMap
,如下所示
添加一个名为BootStarpper.cs
的新类,如下所示
现在,再添加两个重要文件:Container
和BootStrapper
添加自定义异常
现在,我们即将为我们的项目添加自定义异常。为此,我们需要将其添加到我们的应用程序中。
添加一个名为ErrorPipeline
的新类(这里我们仅为演示目的定义了一个自定义异常)。
这是我们实现的
在上面你可以看到我们只是将我们的自定义附加到OnError
钩子,还有很多其他方式,这里我们只选择上述方式进行演示。
重访模块代码
让我们按如下方式修改ServerDataModule
代码
我们不打算详细解释重构。
测试NancyFx
我们已经使用NancyFx创建了CRUD操作,由于我们计划将此项目作为服务部署到与客户端服务器分离的服务器上(附注:客户端可以是控制台应用程序、Web应用程序或任何其他可以消费NancyFx服务的来源),我们需要确保我们的服务正常工作并提供预期的结果。
创建新测试项目
创建一个新项目,命名为CrudsWithNancyFx.Test。我们将为项目使用NUnit和Moq框架。添加一个新类并命名为ServerDataTest.cs
为NancyFx项目添加测试支持
打开Nuget包管理器,安装Nancy.Testing
,如下图所示
添加Nunit和Moq框架
打开Nuget包管理器,添加Nunit和Moq框架,如下所示
添加简单测试
我们添加了一个简单的测试来验证(我们不会详细解释每一个测试)。
我们正在使用Resharper,因此可以轻松地在Visual Studio中运行测试
结论
在本文中,我们学习了如何开始使用NancyFx与FluentNHibernate和Repository模式。我们涵盖了Nancy测试。