[MVC]跟踪真实世界里的ASP.NET MVC项目

mikel阅读(1008)

跟踪真实世界里的ASP.NET MVC项目

文/Robert Bazinet  译/赵劼  出处/InfoQ
微软ASP.NET MVC框架的第二个技术预览版已经在三月份的MIX08大会上发布,不过它在4月16日又更新了代码。这意味着微软和社区都给这个项目带来了不少有价值的事情。人们现在不仅仅在创建示例代码,而是在创建真实的项目。
开发人员能够使用这些应用程序,而有些还处于开发之中,也可以从中学习或者使用它们来开发自己的应用程序。
MVC StoreFront
Rob Conery记 录了使用MVC框架设计和创建一个店面(storefront)的过程,并且结合了测试驱动开发等敏捷开发实践,以及Repository Pattern等常用模式。Rob 在这个领域有许多经验,他是ASP.NET 2.0 Commerce Start Kit的最早开发者,也就是后来的dashCommerce
MVC Stroefront还是一个正在进行中的系列,这使读者能够经历一个从设计到开发一个ASP.NET MVC应用程序的完整过程。系列中的每部分都包含一个针对当前部分意图的描述,以及一个视频来展示代码。

项目最新的代码能够在CodePlex上找到
博客引擎
Keyvan Nayyeri有一个使用ASP.NET MVC开发一个博客引擎(Blog Engine)的系列。建立一个博客引擎似乎是一个向人们展示技术的流行方法,而这个项目做的不错。大部分开发人员与博客关系密切。

Kigg – Digg的克隆
这个Digg的克隆产品是一个使用MVC框架的优秀实现。这个程序属于Dotnetslackers站点的一部分。这份指南面向.NET开发人员工作中的几个重要部分:
   

项目最新的代码能够在CodePlex上找到
其他一些展示ASP.NET MVC的功能的项目还刚刚起步。请继续在InfoQ站点上关注新项目以及本文这些项目的进展。

[SQL]SQL Server2005分页查询

mikel阅读(910)

Select * FROM (
    select ROW_NUMBER()Over(order by cf_id desc) as rowId,* from T_Test 
) as mytable
where rowId between 21 and 40
每页20条,第2页
ROW_NUMBER是SQLServer2005中的新特性
以下是利用本方法和传统利用Set RowCount方法存储过程的效率比较结果:
未建索引情况下:
500w数据: 存储过程1分20秒 , 新方法1分18秒
400w数据:存储过程47秒,新方法41秒
300w数据:存储过程35秒,新方法30秒
200w数据:存储过程25秒,新方法20秒
100W数据:存储过程12秒,新方法10秒
 50W数据:存储过程 7秒,新方法 0秒

[FCKEditor]FCKeditor2.4的配置文件

mikel阅读(734)

FCKeditor确实是一款不错的网页在线编辑器,功能非常之强大,但是作为一个初学者,它的使用和配置还是比较复杂的,网上有关的介绍凌乱而复杂。为此我专门做一下介绍,希望对你有所帮助!

注:本文使用的FCKeditor是2.4版的,asp和js在配置上是一样的,但在调用上有一点区别

一、FCKeditor的配置

这些配置其实安默认的也可以,如果你不喜欢的话,就可以修改了,大多数配置在fckconfig.js文件中,此文件在FCKeditor文件夹的根目录下

1、常用设置

AutoDetectLanguage=true/false 自动检测语言

BaseHref="" 相对链接的基地址

ContentLangDirection="ltr/rtl" 默认文字方向

ContextMenu=字符串数组,右键菜单的内容

CustomConfigurationsPath="" 自定义配置文件路径和名称

Debug=true/false 是否开启调试功能,这样,当调用FCKDebug.Output()时,会在调试窗中输出内容

DefaultLanguage="" 缺省语言

EditorAreaCss="" 编辑区的样式表文件

EnableSourceXHTML=true/false 为TRUE时,当由可视化界面切换到代码页时,把HTML处理成XHTML

EnableXHTML=true/false 是否允许使用XHTML取代HTML

FillEmptyBlocks=true/false 使用这个功能,可以将空的块级元素用空格来替代

FontColors="" 设置显示颜色拾取器时文字颜色列表

FontFormats="" 设置显示在文字格式列表中的命名

FontNames="" 字体列表中的字体名

FontSizes="" 字体大小中的字号列表

ForcePasteAsPlainText=true/false 强制粘贴为纯文本

ForceSimpleAmpersand=true/false 是否不把&符号转换为XML实体

FormatIndentator="" 当在源码格式下缩进代码使用的字符

FormatOutput=true/false 当输出内容时是否自动格式化代码

FormatSource=true/false 在切换到代码视图时是否自动格式化代码

FullPage=true/false 是否允许编辑整个HTML文件,还是仅允许编辑BODY间的内容

GeckoUseSPAN=true/false 是否允许SPAN标记代替B,I,U标记

IeSpellDownloadUrl=""下载拼写检查器的网址

ImageBrowser=true/false 是否允许浏览服务器功能

ImageBrowserURL="" 浏览服务器时运行的URL

ImageBrowserWindowHeight="" 图像浏览器窗口高度

ImageBrowserWindowWidth="" 图像浏览器窗口宽度

LinkBrowser=true/false 是否允许在插入链接时浏览服务器

LinkBrowserURL="" 插入链接时浏览服务器的URL

LinkBrowserWindowHeight=""链接目标浏览器窗口高度

LinkBrowserWindowWidth=""链接目标浏览器窗口宽度

Plugins=object 注册插件

PluginsPath="" 插件文件夹

ShowBorders=true/false 合并边框

SkinPath="" 皮肤文件夹位置

SmileyColumns=12 图符窗列数

SmileyImages=字符数组 图符窗中图片文件名数组

SmileyPath="" 图符文件夹路径

SmileyWindowHeight 图符窗口高度

SmileyWindowWidth 图符窗口宽度

SpellChecker="ieSpell/Spellerpages" 设置拼写检查器

StartupFocus=true/false 开启时FOCUS到编辑器

StylesXmlPath="" 设置定义CSS样式列表的XML文件的位置

TabSpaces=4 TAB键产生的空格字符数

ToolBarCanCollapse=true/false 是否允许展开/折叠工具栏    

2、文件上传

FCKeditor 的文件管理程序在fckeditor\editor\filemanager文件夹中,又分为浏览(browser)和上传(upload)两种。浏览指浏览服务器中的文件,上传指上传本地文件。

打开和关闭文件浏览和上传功能

首先是fckconfig.js文件,以下内容设为true为开,false则为关。

文件浏览和浏览中上传功能:

FCKConfig.LinkBrowser = false ;

FCKConfig.ImageBrowser = false ;

FCKConfig.FlashBrowser = false ;

文件快速上传功能:

FCKConfig.LinkUpload = true ;

FCKConfig.ImageUpload = true ;

FCKConfig.FlashUpload = true ;

其次设置两个asp文件:

editor\filemanager\browser\default\connectors\asp\config.asp

ConfigIsEnabled = False

表示文件浏览关闭

editor\filemanager\upload\asp\config.asp

ConfigIsEnabled = True

表示文件快速上传打开

文件上传或浏览的路径设置

注意FCKeditor是不支持虚拟目录的,您的所有路径都是针对网站根目录的绝对路径,这点对于在本地测试用虚拟目录,发布到远程用网站目录的开 发者不太方便。我的就是这样,WinXP系统只能一个站点,只有用虚拟目录表示不同的网站,在本地测试好了,上传前还要临时更改这个设置。

文件浏览路径,打开文件editor\filemanager\browser\default\connectors\asp\config.asp:

ConfigUserFilesPath = "/attachments/"

快速上传的路径,打开文件editor\filemanager\upload\asp\config.asp:

ConfigUserFilesPath = "/attachments/"

我的文件目录在http://127.0.0.1/temp/下面,就照以上设置。如果在本地测试这个网站在虚拟目录xxx中,则应该设置为:

ConfigUserFilesPath = "/127.0.0.1/temp/"

文件快速上传的一个源文件BUG

以上设置好后,文件浏览和浏览中上传可以顺利进行,但是你会发现“快速上传”不能用。现象就是当选择好本地文件后,点击“上传至服务器”的按钮后没有任何反应。这就是因为fckconfig.js文件中的一个bug所致。

打开fckconfig.js文件,把FCKConfig.QuickUploadLanguage字样的地方,替换成_QuickUploadLanguage,一共要替换三个地方。前者没有定义就使用,所以有错,按代码意图应该和后者的值一样的。

上传文件名自动更名

FCKeditor 不支持中文文件名称,所以我们要让文件存入服务器时更改名称。由于有两个上传的地方,而且所用文件不同,所以两个文件应该同时改,我们先来看看快速上传的 文件,打开editor\filemanager\upload\asp\upload.asp,在文件最后添加以下函数:

Public Function GetNewFileName()

dim ranNum

dim dtNow

dtNow=Now()

randomize

ranNum=int(90*rnd)+10

GetNewFileName=year(dtNow) & right("0" & month(dtNow),2) & right("0" & day(dtNow),2) & right("0" & hour(dtNow),2) & right("0" & minute(dtNow),2) & right("0" & second(dtNow),2) & ranNum

End Function

我们用年月日时分秒和两位随机数字来作为文件名,这样既能够分辨出文件上传时间,也不容易重名。

然后仍然是这个文件,找到:

'' Get the uploaded file name.

sFileName = oUploader.File( "NewFile" ).Name

把它改为:

'' Get the uploaded file name.

sFileName = GetNewFileName() &"."& split(oUploader.File( "NewFile" ).Name,".")

上面说的是快速上传的文件,而文件浏览中上传则是更改另外一个文件(editor\filemanager\browser\default\connectors\asp\commands.asp),其修改方法和上面那个文件一样:添加一个函数,修改一行代码。

二、在asp中调用FCKeditor

1、 加上<!–#include file="FCKeditor/fckeditor.asp" –>

2、 使用

<%

Dim oFCKeditor

Set oFCKeditor = New FCKeditor

oFCKeditor.BasePath = "FCKeditor/" //设置编辑器的路径,我站点根目录下的一个目录

oFCKeditor.ToolbarSet = "Default"

oFCKeditor.Width = "100%"

oFCKeditor.Height = "600"

oFCKeditor.Value = "" //这个是给编辑器初始值

oFCKeditor.Create "logbody" //以后编辑器里的内容都是由这个logbody取得,命名由你定

%>

三、在js中调用

1,添加<script type="text/JavaScript" src="fckeditor/fckeditor.js"></script>

2,调用

<script type="text/JavaScript">

var oFCKeditor = new FCKeditor( 'logbody' ) ;

oFCKeditor.BasePath = ' FCKeditor/' ;

oFCKeditor.ToolbarSet = 'Basic' ;

oFCKeditor.Width = '100%' ;

oFCKeditor.Height = '400' ;

oFCKeditor.Value = '' ;

oFCKeditor.Create() ;

</script>

三、关于初始化FCKeditor中的一个问题

利用asp的时候,从数据库里取出的值已经是html语言,直接使用下面的方法初始化:

oFCKeditor.Value = show(“body”)

会产生错误。

解决办法:修改文件FCKeditor.asp

[资源]某人的开发工具助手

mikel阅读(1104)

前言:

    高效快速开发是每个程序员追求的目标,但如何做到既高效又能让客户满意呢?我想一个好的团队肯定可以,但如果水平一般,没有太多开发经验的 团队或者是独行侠之流就没有办法了吗?相信有人想到ORM工具,诚然ORM工具能帮助我们实现开发出高效质优的项目,但ORM自诞生之日便遭到很多人的质 疑,效率是ORM的硬伤。当然,在这里我无意评判ORM的功过或诋毁ORM,但至今还有很多人没有用ORM开发项目这是不争的现实。

    在我们开发的项目中,特别是以数据存储为基础的项目,数据访问层和业务层存在大量雷同的代码,用ORM工具则根本不需要写这方面的代码,而 如果不用ORM工具的话,写这样的代码既烦琐又无聊,于是代码生成器应运而生。运用代码生成器,以数据库的库表结构为基础,可以快速生成数据访问的相关代 码,极大的提高开发效率,于是代码生成器成了不使用ORM工具开发人员的手中利器,于是各种代码生成器忽如一夜春风来,千树万树梨花开,好不热闹。但很多 人开发的生成器都是为自己或公司的项目设计,无法适用他人。很多人将代码生成器开源,但既便有了源代码自己动手去改也是挺麻烦的,添加或修改生成代码的 类、菜单或按钮,调试、编译等一大堆问题接踵而至到最后不甚其烦。我们需要可自由扩展、架构开放的代码生成器,市面上有很多这样的工具,最常用的如 Code Smith等,只可惜是收费的。

    于是.net项目开发工具诞生了,采用插件式结构,可自由扩展而且完全免费。

.NET项目开发工具简介:

    .NET项目开发工具是一款采用开放式架构,允许使用者开发和加载不同的插件,以实现操作不同类型的数据库和生成各种风格的代码等。以下为主界面:

        

    我们看一下插件开发和使用的流程:
    1.实现相关接口(数据访问、生成SQL代码或生成代码任选)创建插件。
    2.加载插件。依次打开 主界面 –> 工具箱 –> 安装新插件 — > 选择插件文件(*.dll) 或 直接将插件文件复制到系统的插件目录(PlugIns),系统会自动监测到新的插件并提示是否载入,选择“是”将载入所有插件,然后打开 系统配置,然后新建或打开某一配置方案,可在相关插件列表中预览插件相关信息。选择插件完成配置后,打开刚刚创建或修改的配置方案。以下为相关图示:
        

        

        

        

        

    如果你对插件开发感兴趣的话,请往下看。

相关接口简介

1.数据访问接口。
    .数据查询接口(PlugInInterface/IDataAccess),目的以实现不同类型、版本的数据库访问(如支持SQLServer2000,SQLServer2005,SQLServer2008,MySql,Oracle等)。

2.生成SQL代码接口。
    .生成SQL脚本接口(PlugInInterface/IGenSQL),目的以实现针对不同类型、版本的数据库生成SQL脚本(如支持SqlServer2000,SqlServer2005,SqlServer2008,MySql,Oracle等)。

3.生成代码的接口。
    .生成程序代码接口(PlugInInterface/IGenSymLanguage),目的以实现生成各种风格的代码(如简单三层,PetShop结构或其它架构的代码)。

点击查看原图

4.数据库实体对象接口。
    .数据库实体对象接口(PlugInInterface/IEntities目录中一系列实体对象接口),用于描述数据库对象的基本特征(如数据 库、表、视图、存储过程、自定义函数等),现已经实现了默认的对象实例(PlugInInterface/Entities目录中)。可根据数据库异同, 从默认的对象实例继承重写相关属性和方法。

点击查看原图

插件开发:

    1.数据访问插件。
        实现IDataAccess接口创建数据访问插件。有关IDataAccess接口详细介绍,请查看IDataAccess类注释。

    2.生成SQL插件。
        实现IGenSQL接口创建生成SQL插件。有关IGenSQL接口详细介绍,请查看IGenSQL类注释。

    3.生成代码插件。
        实现IGenSymLanguage接口创建生成代码插件。有关IGenSymLanguage接口详细介绍,请查看IGenSymLanguage类注释。

    4.数据库实体对象运用。
        数据库实体对象描述数据库对象的基本特征,所以在开发插件前,请详细了解实体对象及实体之间的关系,才能方便的开发相关插件。         

    5.插件开发与解决方案。
        .相关工程采用C#,VS2008,.net 3.5开发,请配置相关开发环境先。
        .打开VS2008,创建一个空白的解决方案。
        .添加现有项目Common和PlugInInterface加入解决方案中,在项目PlugInInterface中添加Common的引用(点击下载插件项目源代码)。
        .创建一个新的项目,作为开发插件之用(如项目名称为PlugIns2),添加项目Common和PlugInInterface的引用,编译通过即意味着可以开发插件了。
        .开发相关插件,请先查看相关接口详细说明及相关文档资料,特别强调一定要设置新插件的自定义属性PluginInfo的GUID号,点此查看。
        .项目PlugIns仅用作开发插件的示例参考,开发不同类型的插件,请参考PlugIns中相关的插件示例。
        .插件开发完成且发布成功后,需要安装插件并重新创建或修改某一配置方案。
        .如开发过程遇到麻烦,可直接联系本人

其它说明:

        .本着开放与分享的精神,建议与他人共享你的开发成果,惠已以及他人,唯有如此,才能形成一套完整的插件体系。
        .以下为目前计划将要开发的插件(打√者为已经实现的插件):

        数据查询插件系列:
        SqlServer 2000(√),SqlServer 2005(√),SqlServer 2008(√)
        MySql 5.1(√)
        Access
        SqlLite(开发中..)
        Oracle
        DB2
        其它数据库…

        生成SQL脚本插件:
        SqlServer 2000(√),SqlServer 2005(√),SqlServer 2008(√)
        MySql 5.1(√)
        Oracle
        DB2
        其它数据库…

        生成程序代码插件:
        PetShop三层架构(√)
        其它架构代码…

相关下载:

[FCKEditor]FCKeditor2.2中行间距过大

mikel阅读(945)

今天下午在遇到了一个页面行间距过大的问题,解决过程有点曲折,现把过程记下
页面内容为动态抓取,编辑器使用的是FCK
首先自然是想到了,FCK的回车换行为P的问题,找到了FCK的配置文件:fckconfig.js

找到以下字段:
FCKConfig.EnterMode = 'p' ;  
FCKConfig.ShiftEnterMode = 'br' ;
表示当使用回车换行时,默认使用p断行(使用shift+回车为br 断行)
改为如下方式:
FCKConfig.EnterMode = 'br' ;      
FCKConfig.ShiftEnterMode = 'p' ;
以为大功告成,甚至都没测试,就告诉别人已经ok,正准备吹嘘之际,同事告知问题依旧,有点傻眼
进入数据库,发现新存进去的内容确实已经变成了br 断行,可为什么还会有问题呢
打开页面,浏览页面源文件,发现每个断行都使用了两个br
不禁奇怪,于是拿来其页面模板一看,笑了
原来使用的是smarty,而为了使内容不至于撑破表格,给长内容增加了nl2br格式,于是就产生了上述问题
删除nl2br 问题解决
可是又带来了新问题:当自己手动疯狂输入不断行时,会出现撑破表格,致使整个页面布局变乱的问题,解决方案晚上再发:》
有时候经常会遇到文字太长表格被撑破的状况
如果是自己输入的话,还可以自己来控制每行长度,但对于有些显示留言的地方,如果不做处理可能就有些捣乱的客人故意输入长文字来撑破表格了
一种方法当然是设置输入框每行长度,让其到了长度自动换行了,但此时如果捣乱客人故意输入不段行的连续的字母就不行了

另外一种比较好的解决办法是在表格中加入:style="word-break:break-all;word-wrap:break-word",这样即便是连续的英文字母也不得不乖乖老实呆在表格里啦:)

[Jquery]将Canvas转换为Flash

mikel阅读(963)

I'm trying to write a simple web application for iPhone/iPod touch.
The application have a dynamic grid of color.. like color picker.
My first implement is using JavaScript with DIVs but the performance is too slow.

That makes me learn how to draw the grid in "Canvas".

"Canvas" similar to flash's drawing API (Graphics class) but with different drawing procedure. Actually, it's 90% same as Quartz2D which invent before flash have drawing API.

for example,
flash set the stroke style, fill style before draw.
Quartz2D draw the path first, then stroke or fill it.

To reuse my drawing code, I make an adapter for it in AS3.
here's how it work:

code in html:

var ctx = canvas.getContext('2d');
// Draw shapes
ctx.beginPath();
ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
ctx.moveTo(110,75);
ctx.arc(75,75,35,0,Math.PI,false); // Mouth
ctx.moveTo(65,65);
ctx.arc(60,65,5,0,Math.PI*2,true); // Left eye
ctx.moveTo(95,65);
ctx.arc(90,65,5,0,Math.PI*2,true); // Right eye
ctx.stroke();

code in flash:

var ctx:Canvas = canvas.getContext("2d");
// Draw shapes
ctx.beginPath();
ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
ctx.moveTo(110,75);
ctx.arc(75,75,35,0,Math.PI,false); // Mouth
ctx.moveTo(65,65);
ctx.arc(60,65,5,0,Math.PI*2,true); // Left eye
ctx.moveTo(95,65);
ctx.arc(90,65,5,0,Math.PI*2,true); // Right eye
ctx.stroke();

here's the examples in MDC:
http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes

demo of the canvas port in flash:
http://www.gamemeal.com/canvas/

the source will release after I finish the implement of transform matrix and arcTo.

In the meanwhile, I found some issue in flash cannot 100% compatible with canvas.
* fill – flash use even odd fill, canvas using non-zero winding rule
* autoClosePath – flash will close path if 2 point is too close.
* antiAlias – it's slightly different from canvas. Flash make verticle and horizontal line sharp by shifting 0.5px.

and,
gecko's canvas draw slightly different from safari's canvas.
* default color of gecko is "#000000" and safari is "Black"
* lineTo
eg:
context.beginPath();
context.lineTo(100,200);
context.lineTo(200,0);
context.strokeStyle = "#FFFFFF"
context.stroke();

gecko draw a line from 100,200 to 200,0
safari draw nothing.

* arcTo
gecko seems not implement arcTo properly and I'm hard to find a example using arcTo in MDC

here's illustrate the parameters of arcTo(x1,y1,x2,y2,radius);

If you want to learn more about quartz2D, I'm recommend the book from R.Scott Thompson: Quartz2D Graphics for Mac OSX developer.

[JQuery]HTML5的Canvas

mikel阅读(891)

1.Canvas 是甚么?
下面网址可以找到html5 Canvas的完整定义
http://www.whatwg.org/specs/web-apps/current-work/#the-canvas
现在Firefox 2,safari 都直接支持Canvas,IE 需要一个ExCanvas 的js代码库转换。
下面网址可以找到 ExCanvas[此js库尚未提供对arcto(),clip()的支持,因此基于其上的各种chart组件天然的不能生成pie图]
http://excanvas.sourceforge.net/
Mozilla的Canvas入门
http://developer.mozilla.org/en/docs/Category:HTML:Canvas
Mininova的Canvas入门
http://labs.mininova.org/canvas/
2.Canvas 能做甚么?
(1)Msx模拟器
It emulates the underlying Z80 CPU, TMS9918 Video Display Processor (VDP), PPI, RAM slots and Megaram. In its present form, it should be able to run any program or game developed for MSX 1.0.
用js模拟Z80等硬件,读取rom信息,无声游戏
http://jsmsxdemo.googlepages.com/jsmsx.html
(2)Painter
假如性能允许,发展成Web photo也是可能的事情。
http://caimansys.com/painter/index.html
(3)效果
水波纹
http://timelessname.com/canvas/experiment01/
某个模糊理论视觉模型
http://timelessname.com/canvas/experiment02/
(4)3D
多面体
http://www.polyhedra.org/poly/
3D地图
Mozilla的例子,RayCaster 就是一个。
Canvascape – 3D walker,比上面例子更完善些,还提供纹理贴图功能
一个类似CS的界面
http://www.abrahamjoffe.com.au/ben/canvascape/
(5)chart组件
成形的有 WebFx Chart,Flot等,需要可自行搜索。
3.Canvas 的发展
(1)Canvas代码转换到flash(porting canvas to flash)
http://team.mixmedia.com/index.php?title=porting_canvas_to_flash&more=1&c=1&tb=1&pb=1
(2)支持Canvas的框架
mootools支持Canvas 的调用,并有一个mocha的基于mootools的组件提供一个窗体功能。

[游戏]Javascript制作的吃豆子游子

mikel阅读(1652)

我不知道有多少人还记得这个古老经典的电玩游戏,这需要你的手指不停歇的做运动。
通过YUI 的博客,Kris Cieslak 使用YUI JavaScript库重新改造了这个游戏:
“警告!这些Ghosts是很聪明的,他们花费了大部分的时间试图去寻找你躲藏在什么地方,一旦他们发现了你的踪迹,他们就会立即采取行动。”(一个A.I. bug!)
对它的智能只进行了轻描淡写!只要我的手指速度少有缓慢,这些ghosts就会出击。

点击图片进入游戏

来自:ajaxian.com

[C#]在Google上创建了个项目Kiwing

mikel阅读(860)

最近想把自己.net下的持久层开发框架开源一下,于是在google上建了个开源项目
KiWing
地址:http://code.google.com/p/kiwing/
开发语言:C#
数据库:SQL Server 2005
概述:
基于C#语言的持久层开发框架,底层数据库基于SQL Server 2005