关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外的一种映射方式, 由于推出的时间比较晚, 所以资料相对比较少, 而且与社区版的 Fluent Mapping 和 Attribute Mapping 不同, 有其独特的设计风格。 下面就通过一个实例来说明怎么使用 NHibernate 自带的代码映射。 实体关系 要映射的类关系图如下: 上图中有三个实体类, 他们之间的关系说明如下: Product 与 Store 之间是多对多关系; Store 与 Employee 之间是一对多关系; Employee 与 Store ... 阅读全文

Web API 的依赖注入 Web API 定义了依赖注入的接口 IDependencyResolver , 定义如下: public interface IDependencyResolver : IDependencyScope, IDisposable { IDependencyScope BeginScope(); } public interface IDependencyScope : IDisposable { object GetService(Type serviceType); IEnumerable<object> GetSe... 阅读全文

多视图应用 AngularJS 通过路由支持多视图应用, 可以根据路由动态加载所需的视图, 在 AngularJS 的文档中有详细的介绍, 网上也有不少教程, 就不用介绍了! 随着视图的不断增加, js文件 会越来越多, 而 AngularJS 默认需要把全部的 js 都一次性加载, 使用起来非常不便, 因此按需加载模块的需求会越来越强, 不过, AngularJS 并没有实现按需加载。 异步加载 关于异步加载, AngularJS 的开发指南中有这样一段话: Modules are a way of managing $injector configuration, ... 阅读全文

AngularJS 目前的版本没有遵循 Javascript 约定的 AMD 模块化规范, 因此使用 RequireJS 加载 AngularJS 时需要一些额外的配置。 通过查阅 RequireJS 的文档, RequireJS 通过配置可以支持支持动态加载没有遵循 AMD 规范的脚本, 接下来就看一下怎么配置: 先在页面引入 RequireJS 脚本, 这个很简单, 只要一个 script 标记: < script type="text/javascript" src="scripts/lib/require/require.js" data-main="scripts/... 阅读全文

最近需要将一些命令行程序包装成后台服务, 本来可以用 .NET 完成, 不过又想尝试一下用 C 语言实 现 Windows 服务, 发现用 C 语言做 Windows 服务也是很容易的, 步骤如下: 1 包含必要的头文件, 并定义一些常量, 代码如下: #include <windows.h> #include <stdio.h> // 服务线程暂停时间; #define SLEEP_TIME 5000 // 日志文件输入路径 #define LOGFILE "C:\\memstatus.txt" 2 写日志文件, 几乎所有的服务都有日志输出, 即使是... 阅读全文

在二叉查找树的最后提到, 二叉树最终的形状如下图所示: 实际上,为了避免二叉树形状向最坏情况靠拢, 通常会创建能够自平衡的 2-3 树。 而 红黑树 是 2-3 树比较简单的一种实现形式: 红黑树将用二叉树表示 2-3 树, 实现起来相对容易; 内部使用向左倾斜的链接表示第三个节点; 红黑树定义如下: 没有任意节点拥有两个红色链接; 从跟节点到末节点的黑色链接数目相等; 红色节点向左倾斜; 用红黑树来表示 2-3 树例子: 红黑树的节点定义 节点定义 在二叉查找树节点的基础上增加一个 Color 字段, 相关代码如下: // Co... 阅读全文

二叉查找树 评论 2014-09-06

二叉查找树定义 二叉查找树 (Binary Search Tree) 是按照平衡顺序排列的二叉树, 也称二叉搜索树、 有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。 首先, 要符合二叉树的特性: 可以为空; 也可以拥有连个互不相交的子树, 即: 左子树和右子树。 平衡排序, 每个节点都有一个 key, 并且每个节点的 key 都符合: 大于左子树中所有节点的 key; 小于右子树所有节点的 key ; 二叉查找树节点必须包含四个字段: 一个 Key 和一个 Value ; ... 阅读全文

快速排序 (Quick Sort) 算法简介 快速排序是非常常用的排序方法, 采用分治法的策略将数组分成两个子数组, 基本 思路是: 从数组中取一个元素作为基准元素, 通常取数组的第一个或者最后一个元素; 分区, 即将数组中比基准元素小的元素放到基准元素的左边, 比基准元素大的元素放 到右边; 递归, 分别对比基准元素小的部分和比基准元素大的子数组用相同的方式进行排序; 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归 下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素 摆到它最后的位置去。 ... 阅读全文

OWIN 请求处理函数 在 OWIN 的最底层, 处理请求的函数定义的委托签名如下: Func<IDictionary<string, object>, Task> 这个函数接受类型为 IDictionary<string, object> 的 OWIN 环境, 返回一个 Task 对象。 通常可以为这个函数起这样的别名: using AppFunc = Func< IDictionary<string, object>, // OWIN 环境 Task>; // 任务 于是,请求处理函数可以... 阅读全文

ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动 设备)的 HTTP 服务。 ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。 ASP.NET Web API 是 OWIN 兼容的, 因此可以在 OWIN 服务器上运行。 接下来使用 Xamarin Studio 创建一个 OWIN 兼容的 C# 类库, 也就是 OWIN 中定义的“应 用 (Application)” , 然后在不同的 OWIN 服务器/宿主上运行。 创建 OWIN 兼容的 Web API 类库 打... 阅读全文

OWIN 初探 评论 2014-08-28

什么是 OWIN ? OWIN 的全称是 “Open Web Interface for .NET”, OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口, 其目的是为了实现服务器与应用之间的解耦, 鼓励为 .NET Web 应用开发简单模块。 OWIN 是一个开源开放的标准, 有助于建设 .NET 开发的开源生态环境, OWIN 定义了如下几个概念: 服务器 (Server) HTTP 服务器直接与客户端交互, 并用 OWIN 语义处理请求, 服务器需要一个适配层将客户请求转换 成 OWIN 语义。 支持 OWIN ... 阅读全文

Xamarin Studio 最近发布了 5.2 版本, 带来了一些相当棒的特性, 其中有一些特性甚至超越了 Visual Studio 2013, 接下来就介绍我认为最棒的并且比 VS2013 要好用的三个特性: NuGet 包管理 Visual Studio 对 NuGet 包的管理是通过对话框来管理的, 如下图所示: 对 NuGet 包的添加、 更新、 删除等操作都在这个对话框内完成, 不过缺点也是每次都得打开这个对话 框。 Xamarin Studio 提供一些更加人性化的管理方式, 一部分功能可以通过上右键下文菜单来管理, 不需要打开包管理对话框。 自动检查更新 ... 阅读全文