这个论坛程序折腾了我一个暑假,本来暑假就短……现在第一个版本终于全部封装完毕了,准备内部测试。
我想开发中应当没有什么,一切都很顺。但到后期时间一紧就容易出乱子,眼看暑假就要OVER了,开发自然要逼快一下了,很重要的后期工作中出了些麻烦,在这里分享下顺便发点牢骚~~
顺便提一下,LiteBlaster采用ASP.NET 1.1(毕竟.NET 2.0的服务器少啊……)作为服务器技术,页面采用传统Table布局和DIV混合的方式,用CSS和JS定位,并用AJAX给绝大部分模块作了个外壳。数据库设计兼容MS Access,MS SQL Server以及MySQL。
这样形成了一个免费一条龙的开发、使用流程:开发主要用SharpDevelop、ASP.NET Matrix、Dreamweaver,使用的时候挂上Access或者MySQL,的确是免费……不过Dreamweaver是个麻烦事(要好多米啊)……不过也好替代,比如高级记事本之类的,我用的是EmEditor。因为这个项目的确用不到什么界面设计的地方,关键的用于元素定位js和css都是服务器动态分发的,Dreamweaver显然找不到这些文件,所以设计模式没啥用,一直就用代码模式在写……平时只修改一个文件的时候就直接用EmEditor了。其它的辅助工具像NUnit、FxCop等也是免费的。
兼容多个数据库是比较头疼的地方,不过相信也是优势。需要加个中间层再作一些特殊处理。另外由于针对SQL Server和MySQL作了一些优化,再加上起初程序底层架构过于垂直化,所以中间层以上部分仍然有些地方需要跨过中间层之间访问数据模块。这铁定是今后重构的重点。
在这里,我要把大多数的牢骚送给MySQL。
这个暑假是我第一次使用MySQL,所以有很多都不大了解。当然MySQL的SQL语法自然是清楚了,其中最喜欢的就是LIMIT子句,分页太方便了。
不过我在开发过程中一直使用Access来进行简单的单元测试和阶段测试,到最后一块测试的时候发现连接不上MySQL。仔细一查,发现OLE-DB连接服务MySQLProv要自己安装……我想没有哪个论坛管理者愿意到服务器上装点什么吧。
那就找其它连接方式吧……ByteFX比较有名,不过主页上已经人去楼空,用它的老版本已经和MySQL 5.0不兼容了;CoreLabs商业化产品,和免费宗旨不合。最后只好用MySQL官方基于GPL的Connector/.NET,貌似它是利用ODBC连接的,稳定是好事,不过这效率……铁定打折扣。
牢骚继续……Connector/.NET没有提供布尔类型,让人郁闷不已。毕竟后台中大量用了强制转换成布尔的代码。MySQL内部提供BOOL类型,看作TINYINT(1),这个Connector还真偷懒,一个整型传回来。改吧……强制转换全变成Convert.ToBoolean。
然后说说TINYINT,Connector最后传给我一个SByte类型。它也真够可以的。SByte不是CLS兼容类型,偏偏多此一举。.NET官方都对应到Byte,这下好了,再改:Convert.ToByte。
本以为这样可以了事了,论坛也跑起来了,谁知道每次到ExecuteScalar那里就挂。再检查下,MySQL果然和MS不是一个风格,MS对COUNT之类聚集函数返回的都是Int32,Connector给了我一个Int64。从中间层都转换掉吧……不是省油的灯。
不过值得夸奖的是,mysqldump和phpMyAdmin都能很方便的导出脚本,省得我写代码,备份功能就好办了。而另一边SQL Server,我无语了……
不过唯一的遗憾是目前测试了三个浏览器,只有Opera和IE完美兼容,Firefox存在一个兼容问题:由于AJAX运用,经常往DIV塞东西,innerHTML一塞多了,它就显示不出来了,把下部内容截断了,不像另外两个那样可以自动伸缩。如果有哪位老大知道如何解决,麻烦告诉我一声。
对了,那个索引服务我都很服气了,平时容易出现删除文件之后仍然留在那里的现象,我忍了,现在边开发边测试论坛,DLL经常变动,索引一出问题,DLL就拒绝访问了,建议把ASP.NET Temporary Files文件夹放到索引服务不编录的行列中。
虽然MySQL给我搞了N多大头,不过通过这个项目完全可以考虑一下ASP.NET+MySQL架构了,PHP+MySQL不再是不二之选。希望MS哪天考虑一下在.NET中官方支持MySQL。
评论