ROW_NUMBER 是 SQL 2005 中新增的函数, 显示结果的行号, 多用于分页, 基本的语法为 ROW_NUMBER() OVER({<partition_by_clause>}<order_by_clause>) 其中, 分区语句是可选的, 排序语句是必须的, 比如这样的语句: SELECT ROW_NUMBER() OVER(ORDER BY ProductID), CategoryID, ProductName, UnitPrice FROM Products 返回的结果为: 也可以按照 CategoryID ... 阅读全文

介绍 MvvmCross (Mvx) 框架中的 ViewModel 之间的导航以及 ViewModel 的生命周期。 在 ViewModel 之间导航 Mvx 框架中, 用一个页面跳转到另一个页面, 对应的也会从一个 ViewModel 跳转到另外的 ViewModel , 页面间的跳转由 ViewModel 发起, 通常会调用 ShowViewModel 方法来完成 ViewModel 之间的导航, 这个方法提供了一下几个重载版本: protected bool ShowViewModel<TViewModel>( IMvxBundle parameterBu... 阅读全文

程序员应该要爱惜生命,做有用有意义的事情。做有用的事情,有两种方式,一、做一个对用户真正有价值的项目,这个项目是真正有意义有用的;二、朝正确的方向以正确的方式做项目。但是程序员会遇到很多失败的项目,这些系统要么是没有人用没有真正价值,要么是以不正确的方式做项目,使用不当的技术,例如,用报表工具代替查询、用ESB企业总线当作海量数据传输用,或者做一些没有实际用途的功能,如做一个万能的用户自定义查询系统、做用户自定义工作流工具、做用户自定义报表工具,这些项目无疑在浪费程序员的生命。笔者试图总结程序员浪费生命的几种方式,如下。 1、开发一个质量和性能很差的系统 程序员经常会碰到这样的项目,... 阅读全文

结构 说明 Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. 封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改,接受这个操作的数据结构可以保持不变。 适用条件 访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合解... 阅读全文

MvvmCross 的特点 尽量使用可移植类库进行编码, 可以包括 视图模型 (ViewModel) 、 模型 (Model) 、 服务 (Service) 甚至界面 (View) 使用 MVVM 模式和数据绑定 (Data Binding) 技术 使用目标平台的本地化界面 框架的任何部分都可以被重写 准备使用 MvvmCross 推荐的方式是建立自己的 git 库, 然后将 MvvmCross 添加为 SubModule , 有自己 github 账户的话就更方便了。 我的是:MvvmCross-Learning MvvmCross 的文档主要是它在 github 上面的 ... 阅读全文

结构 说明 Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure. 模板方法模式准备一个抽象类,将部分逻辑以具体方法及具体构造子类的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,... 阅读全文

结构 说明 Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it. 定义一个算法的系列,将其各个分装,并且使他们有交互性。策略模式使得算法在用户使用的时候能独立的改变。 适用条件 算法有多个变体可供使用; 多个相似的类仅仅因为行为不同, 这时可以将这些类合并并采用行为模式处理这些行为; 一个类中的某个行为有... 阅读全文

插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过 构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插 入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从 后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 使用插入排序为一列数字进行排序的过程 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元... 阅读全文

冒泡排序的基本概念是: 依次比较相邻的两个数, 将小数放在前面, 大数放在后面。 即在第一趟, 首先比较第1个和第2个数, 将小数放前, 大数放后。 然后比较第2个数和 第3个数, 将小数放前, 大数放后, 如此继续, 直至比较最后两个数, 将小数放前, 大 数放后。 至此地一趟结束, 将最大的数放到了最后。 在第二趟:仍从第一对数开始比较 (因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前, 大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在 倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重... 阅读全文

结构 说明 Allow an object to alter its behavior when its internal state changes. The object will appear to change its class. 让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。 适用条件 一个对象的行为取决于其状态, 并且它必须在运行时根据状态改变自己的行为。 一个操作中包含大量的分支, 并且这些分支取决于对象的状态。 实现 public i... 阅读全文

结构 说明 Define a one-to-many dependency between objects where a state change in one object results with all its dependents being notified and updated automatically. 在对象间定义一个一对多的联系性,由此当一个对象改变了状态,所有其他相关的对象会被通知并且自动刷新。 适用条件 当抽象个体有两个相互依赖的层面时。 封装这些层面在单独物件内将可允许程序设计师单独地去变更与重复使用这些物件, 而不会产生两者之间的交互问... 阅读全文

结构 说明 Without violating encapsulation, capture and externalize an object’s internal state allowing the object to be restored to this state later. 在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。 适用条件 需要保存对象在某一时刻的状态, 并在以后需要将对象恢复到这个状态; 同时又不希望暴露对象的实现细节, 破坏对象的封装性, 这是需要使用备忘录模式。 实现 ... 阅读全文