本文将在技术层面挑战园子里的权威大牛们,言语不敬之处敬请包涵。本文旨为技术交流,欢迎拍砖。 园子里面分享和推荐Entity Framework(以下简称EF)的Repository(仓储)设计模式的文章真不少,其中还有很多大牛很详细描述怎么去实现。但是这些文章真是害人不浅。我现在想问问这些大牛们,你 Read More
posted @ 2014-01-10 12:03 Leo C.W Views(47756) Comments(296) Diggs(97) Edit
C#多继承的讨论似乎是个古老的问题了,但今天本文要向大家展示的C#多继承可能是大家闻所未闻见所未见的,甚至是发明C#语言的人也不曾想到我会这样去写代码,并且自得其乐。说起多继承,首先大家可以想想这个问题:你知道在C#中怎么实现多继承吗?主流的答案无非2种。答案一:用接口啊,一个类可以继承自多个接口的。答案二:C#不支持多继承,C++才支持多继承,多继承会让代码变得很乱,因此微软在设计C#的时候放弃了多继承。能够知道答案二的人显然懂的更多,我也在很长一段时间内相信C#不支持多继承,直到2013年5月的一个项目中,我偶然的发现自己的代码就完全实现了真正意义的多继承。先说说什么是真正意义的多继承。真 Read More
posted @ 2014-01-07 22:50 Leo C.W Views(50402) Comments(44) Diggs(13) Edit
今天终于有空把demo放到了RunJS上面去。请使用google chrome观看在线演示:http://sandbox.runjs.cn/show/pekbd9zb这个库本来是我们开发的phonegap框架中的一部分,后来有人想单独引用这个库,因此今天我就把它从phonegap框架中提出来了,成为一个独立的操作HTML5 SQLite的javascript库。英文文档以及live demo的源代码都放到了github上面:https://github.com/leotsai/html5sqlite这个库使用起来非常简单,跟entity framework非常类似,因为我们在一开始就是想完全模 Read More
posted @ 2014-01-03 16:56 Leo C.W Views(4107) Comments(5) Diggs(8) Edit
我们公司是做软件外包的,项目奖金对于每个程序员来讲是非常重要的一部分收入。我们现在的分配制度已经运行了两年多,经历了无数个项目的检查,在此分享给大家,也希望能抛砖引玉,得到大家的看法。首先,我们根据客户的资质对客户进行评级,分别为低级、中级、高级。如果客户跟我们签的合同比较大,也就是说每月给公司带来的收入比较多,那么这个客户就会被评为高级客户;相反,如果客户没有什么钱,合作的项目比较小,那么这个客户就被评为低级客户。然后,项目奖金的比例会跟客户的评级一一对应。如果客户评级为低级客户,那对不起,你们项目组的项目奖金比例为5%;如果客户评级为中级客户,你们项目组的奖金比例为6%;如果客户评级为高级 Read More
posted @ 2013-12-30 22:34 Leo C.W Views(23915) Comments(21) Diggs(2) Edit
Nova PhoneGap Framework 是完全针对PhoneGap应用程序量身定做的,在这个框架下开发的应用程序很容易实现高质量的代码,很容易让程序拥有很好的性能和用户体验。在经历了多个项目的考验和改进后,我们这个框架已日趋成熟。希望有更多的朋友使用我们这个框架进行PhoneGap程序的开发,让这个框架变得更加完善。参考资料:框架源码:http://cordova.codeplex.com官方博客:http://apachecordova.blogspot.com Read More
posted @ 2013-12-18 21:11 Leo C.W Views(727) Comments(0) Diggs(0) Edit
10.1 Visual Studio + ReSharperPhoneGap程序由HTML、CSS和JS编写而成,这3种语言的编写你都可以用记事本来完成,但显然效率比较低,出错的概率也比较大。一个强大的集成开发环境绝对能帮我们节约很多时间。这里我要推荐Visual Studio + ReSharper.如果你的PC已经安装了Visual Studio,那么请毫不犹豫的选择用Visual Studio来开发,同时安装最新版的ReSharper。没有其他任何工具比这两种工具的组合强大。在VisualStudio中,菜单栏选择 FILE > Open > Web Site打开你的Phon Read More
posted @ 2013-12-18 21:10 Leo C.W Views(761) Comments(0) Diggs(0) Edit
我们的框架中也提供了一些常用的控件,这些控件大多都依赖于我们的框架,也正是在我们的框架下才使得实现这些控件的变得更简单。但是我们的框架是不依赖与这些控件的,如果你用不上这些控件,你完全可以把相关的代码删掉。一些简单的控件,如listview,button等并没有包含在我们的框架中,这是因为这些控件是在是太简单,你更应该针对你的项目,用最简单的HTML和CSS去实现。下面我将详细介绍最常用的几款控件,这些控件的功能都是显而易见的,为了节省篇幅,我就不贴截图了。注意在我们控件的命名上遵循这样一个标准:首字母小写的命名代表了这个控件是单例的,首字母大写的代表了这个控件是需要先实例化的。9.1 nov Read More
posted @ 2013-12-18 21:09 Leo C.W Views(591) Comments(0) Diggs(0) Edit
你可能会疑惑为什么滚动条这么常见的功能会在这里单独列出,但如果你有过PhoneGap开发经验的话,你就会发现要在Android 2.3 里面实现滚动条那真不是一件容易的事。8.1 概述目前主流的PhoneGap框架或者库都花了很大的力气来实现滚动条,比如jQueryMobile, Sencha Touch,KendoUI,Intel App Framework (以前叫jqMobi),甚至还有一个专门只做滚动条而变得很出名的iScroll。出现滚动条百家争鸣的原因是,低版本的Android和iOS不支持CSS样式overflow: scroll。于是才会写JS来处理触摸三事件。我们的框架也处理 Read More
posted @ 2013-12-18 21:08 Leo C.W Views(674) Comments(0) Diggs(0) Edit
我们的框架包含了几种设备事件的处理,目的是为了让我们的程序员更容易的完成代码。这些事件包括:回退键(Android)和横竖屏切换事件。7.1 Android回退键首先来说说回退键的事件处理。当用户在Android设备上按下回退键时,用户可能会希望:l 应用程序能返回到上一页;l 取消正在执行的任务,比如正在下载或是提交数据;l 移除提示消息;l 或者更多。我们的框架正好解决了这些问题,让自定义的回退键事件变得异常简单。这是那些基于URL实现页面跳转的框架所望尘莫及的,比如基于jQuery Mobile的程序就很难处理特殊的回退键事件。我们的框架是怎么做到的呢?在应用程序启动的时候,我们就给An Read More
posted @ 2013-12-18 21:07 Leo C.W Views(718) Comments(0) Diggs(0) Edit
在我们的框架中引入了一个很重要的设计,那就是使用Mock。这里的mock是指cordova.mock.js文件,它模拟了PhoneGap(Cordova)的API,从而可以在浏览器中运行测试我们的程序,即使我们的程序使用到了联系人、摄像头、设备按键等API。由于写一个PhoneGap API的mock方法非常容易,我们现在的框架中只包含了少部分的mock,比如deviceready, backbutton, menubutton, 联系人,摄像头等。如果你要调用的PhoneGap API还没有包含在我们的mock里面,你可以参考PhoneGap官方文档对这个API的定义,然后mock一个一模一 Read More
posted @ 2013-12-18 21:06 Leo C.W Views(657) Comments(0) Diggs(0) Edit
一个好的项目架构必然有着合理的文件结构,如果一个项目的文件组织混乱,那么可以断言一定是项目架构有问题。合理的文件结构能够帮你更清晰的管理你的文件,并且当需要添加新的文件的时候,你的程序员很清楚应该加到哪里。总的来讲,我认为好的文件结构应该满足以下3条标准:每一个文件夹下面不应该有太多的文件,通常不超过30个;每一个文件里面的代码不应该超过300行,不管是HTML、CSS还是JS文件;所有的文件应该有层次感,属于同一层的文件应该放到一起。前面2条标准看上去非常简单,实际情况呢?确实很简单,并且做起来也不难。但事实是很少有人这样去要求他们的程序员,因为他们觉得这算不得什么标准,只是个人喜好而已。然 Read More
posted @ 2013-12-18 21:05 Leo C.W Views(534) Comments(0) Diggs(1) Edit
我一直想把EntityFramework(简称EF)的那一套搬过来,应用于HTML5 SQLite。 幸运的是,我几乎做到了,有些功能无法完成的那是因为SQLite本身不支持。至少从现在已经完成的功能来看,我们几乎可以像EF那样去操作数据库。在我们这个框架中,所有对数据库的访问都封装在了命名空间"nova.data"下面。其下主要包括了以下类:nova.data.DbContextnova.data.Entitynova.data.Repositorynova.data.Queryable下面我将逐一详细阐述。4.1 nova.data.DbContext这个类相当于是数据 Read More
posted @ 2013-12-18 21:04 Leo C.W Views(1166) Comments(3) Diggs(0) Edit
页面在项目架构中是一个很重要的概念,它让我们能够将一个功能复杂的项目拆分成一个一个功能比较独立的小区域,这极大的提高了代码的可读性和可维护性。在我们这个框架中,一个页面由JS和HTML两部分组成,首先让我们来看看JS部分吧。以上的这部分代码就是一个在命名空间“at.pages”下的“Details”页面的定义。你可能已经注意到了,在第2行代码,有一个“pages/details.html”。对,就是这样,HTML文件的相对路径在这个页面的构造函数中进行了指定。这样,这个页面的JS部分和HTML部分就联系起来了。在这个框架中,所有页面都应该继承自"nova.Page", 当然 Read More
posted @ 2013-12-18 21:01 Leo C.W Views(650) Comments(0) Diggs(0) Edit
跟绝大多数PhoneGap程序一样,Index.html是程序的入口。这个页面应该完成应用程序的初始化工作。首先,让我们来看看这个页面通常都长什么样子:下面我将一一解释这个页面都做了哪些初始化工作。2.1 引用所有的CSS所有的CSS都应该在放在index.html里面,这样做的好处是其他页面会变得很干净,不会到处都在引用CSS,使得CSS更容易管理。你可以使用SASS来编写CSS,但最后请一定把所有的CSS合并到一个文件。在我的试验中,当index.html引用了太多CSS和JS的时候,程序启动时间变长,并且容易崩溃。2.2 引用所有的Javascript跟CSS一样,所有的JS也需要合并到 Read More
posted @ 2013-12-18 21:00 Leo C.W Views(1003) Comments(0) Diggs(0) Edit
Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验。一直以来我们也持续更新这个框架,使其不断完善。到现在,这个框架已比较稳定了,对于中小型项目可以直接拿来用,对于大型项目,也只需稍加改造就能够完美支持。 目前该框架实现的核心功 Read More
posted @ 2013-12-18 20:59 Leo C.W Views(2452) Comments(11) Diggs(2) Edit
如下图:需求:1. 如图2. 可以从任意div标签开始。 1 2 3 4 5 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ... Read More
posted @ 2013-11-12 17:28 Leo C.W Views(733) Comments(2) Diggs(0) Edit
如下图:需求:1. 如图2. 可以从body标签开始。3. 页面内容高度设置高点,把窗口的滚动条显示出来,但是busy indicator不滚动。 1 2 3 4 5 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 Loading...67 ... Read More
posted @ 2013-11-12 16:29 Leo C.W Views(504) Comments(3) Diggs(0) Edit
如下图:需求:1. 如图2. 可以从body标签开始。 1 2 3 4 5 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 View Code Read More
posted @ 2013-11-12 16:26 Leo C.W Views(634) Comments(2) Diggs(0) Edit
如下图:需求:1. 如图2. 可以从body标签开始。 1 2 3 4 5 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 View Code Read More
posted @ 2013-11-12 16:25 Leo C.W Views(547) Comments(2) Diggs(0) Edit
如下图:需求:1. 如图2. 可以从body标签开始。 1 2 3 4 5 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 View Code Read More
posted @ 2013-11-12 16:24 Leo C.W Views(577) Comments(4) Diggs(1) Edit
如下图:需求:1. 如图2. 可以从body标签开始。 1 2 3 4 5 12 13 14 15 16 17 18 19 20 21 22 23 View Code Read More
posted @ 2013-11-12 16:22 Leo C.W Views(781) Comments(6) Diggs(1) Edit
晚上看比赛不太现实,第二天下班回来看回放吧,一打开网页,偌大的比分让你不想知道结果都不行。于是,写了个简单的html页面,用javascript抓取全场回放的视频地址。这样你就看不到比分了,看比赛才有那种未知的惊喜。目前测试了西甲,德甲,欧冠。其他甲级联赛应该都是支持的。说不定NBA都支持。下面是完整的代码: 腾讯体育全场回放抓取 腾讯体育全场回放抓取 第1步:在比赛之前获取 competitionId 和 matchId 在比赛之前,可以进入看比赛的页面。页面URL包含了这2个参数。如: ... Read More
posted @ 2013-10-02 11:49 Leo C.W Views(2070) Comments(1) Diggs(2) Edit
今天收到一包同事带来的东北特产——泡菜。泡菜看上去很有食欲,更值得一提的是,塑料包装边缘有多个锯齿口,方便用户撕开,而不是像很多食品包装只留了一个锯齿口。设计这个包装的人,肯定得是站在用户的角度才能想到多设计一些锯齿,而这个小小的改变方便了用户很多。放下泡菜,打开电脑,看到任务栏上的窗口。感觉微软设计的用户体验真是差。请看下方截图:outlook的图标是不是看上去很像word的图标?两个图标颜色相近,那只能靠形状来区分了,对于这么小的图标,那真不是一件容易的事情。微软在最近一两年更新的软件,那个用户体验,真是差。比如VS 2012的图标,全是黑色,长的又小,每次看半天,还经常点错。 Read More
posted @ 2013-09-23 13:00 Leo C.W Views(1005) Comments(6) Diggs(1) Edit
第一步:文件夹上点击右键 -> Add -> Existing Item,单击选中文件,不要点击“Add”按钮,而是在“Add”按钮右边有个向下的小箭头,点击这个箭头,再点击“Add As Link”。如果要链接整个文件夹,那么按住alt键,再把主工程的文件夹拖到子工程想要的地方即可。第二步:第一步完成之后,如果发布web程序,那么链接的文件会随之发布,但是在debug模式,却看不到,那是因为文件系统上并没有这个文件。解决方案很简单:修改子项目的工程文件(.csproj),在最后之前,添加如下代码: Read More
posted @ 2013-08-21 16:28 Leo C.W Views(403) Comments(0) Diggs(0) Edit
在phonegap的开发中,有时需要知道对象的所有属性,就简单的写了个序列化的方法。序列化方法如下: 1 function serialize(obj, name) { 2 var result = ""; 3 function serializeInternal(o, path) { 4 for (p in o) { 5 var value = o[p]; 6 if (typeof value != "object") { 7 result += "\n" + path + "."... Read More
posted @ 2013-07-24 19:07 Leo C.W Views(1203) Comments(1) Diggs(0) Edit