2008年8月30日
既然要开始做了,那就要先想好采用的架构,在我考虑再三下,我提出一种大胆的想法:就像开blog一样架站。本来想着买八台服务器,一个服务器上面挂50个站的,后来我提出把它们全部集合到一台服务器上面,就一个站点,每个站点有自己独立的数据库和文件夹,以方便该站大了以后,可以独立出去,也为了某些站点可能有自己的服务器。url上面采用url转发欺骗。数据库还是采用sqlserver,不过每个站点还有一个独立的数据库文件sqlite。当创建一个站点后,有一个总后台可以控制各个站点所具备的功能模块,当子站点登录进行操作后,将会保存二个地方,一份是自己的sqlite数据库,一份是sqlserver的总库,以达到备份的目的,当然,是否往sqlserver里面写数据是可以配置的。这样,只要定时备份一下sqlserver就可以保证几百个用户的数据不会丢了。其中文件信息,我没有提供备份方案。
基本确定方向后,就开始实施了。这个系统总共经历了三次重新推倒 开发。因为到底还是经验不足,程序的架构设计还是很缺的,只是我现在记住了一句话,发现可以重构的时候,一定要进行重构,一定不能等。当然,我的三次推倒都是在简单重构不合意的情况下发生的。第一次只是简单的参考了网上的自助建站系统,当我完成差不多的时候,发现还是有很多功能实现不了,补来补去,没办法。重新推了,连数据库全部重新设计。第二次,比第一次强点,数据库倒是没有重新设计了,只是写着写着,总感觉层次很乱,就又重新写了,不过这次只是做了一些大的层次上面的调整,很多代码还是可以重用的。就在我的第三版把页面显示模板基本完成后,接到通知,财政部款项延期。我哭啊。这时候也到八月份了,一向不存钱的我,资金链出现问题啦。(这个项目是我们自己先做的,因为这算是一个私单,只是金额比较大,为了有把握拿到这个项目,就先把程序给开发出来,原来预计七月份能签下合同的,现在还不确定结局会怎么样呢,还需再等一个月才能确定是否黄掉,对于政府的办事效率,大大失望。)
犹豫了一段时间,决定重新找份工作。还不错,晚上投的简历,第二天面试,第三天就叫我去上班了,公司是做教育软件的,刚进去就做老行当,仿淘宝做C2C交易平台,做了近三个星期,快完成了。
刚来这个公司不久,不做过多的评价。只是感觉我面试的时候保守了。钱又要少了(工作负荷比我预想的要大)。下次一定吸取教训,试用期不谈转正工资,试用期是双方试用的阶段,不只是公司考验员工,也是员工考验公司。都还没有工作,怎么知道公司有任务轻重呢,不知任务轻重,又怎么谈钱呢。等双方觉得试用期合格以后,再坐下来谈其它的,谈的好,签合同,谈不好,大家好聚好散。
写了二天时间,基本上写完了。最后总结一下。
由于之前记事本学习了java和c#,所有基础还算扎实,第一家公司就是看中我的c#基础扎实(自己猜的,那时候我觉得就这点强些)
看的书也还蛮多,范围也还蛮广。学java之前,就学过c,html,falsh等基本的东西,后来学习java,c#,jsp,及j2ee(那时候学习框架就有些想转平台了,因此j2ee很是初级,框架学得不深)其中也看过些关于linux,oracle等其它方面的书,后来就是转向.net了。
在 .net上面,对我影响比较大的就是用记事本学习了《C#和.NET核心技术》,还有就是《ASP.NET 2.0开发详解》,第一个让我有了一个比较扎实的c#基础,后者让我在asp.net开发上学习到了很多,也是我的第一本asp.net 2.0教程。
随后的工作中,将我的很多想法转换成了项目,同时也在网站学到了大量的新东西。较完整的有 Enterprise Library,Linq,asp.net mvc这些新东东,其它比较常见的一些小技巧和小知识就多不胜举了。
最初,可以说是就c#还算过关,其它都不咋的。到后来,有美工朋友向我请教css的问题。到现在,我看人家的存储过程写得很垃圾,性能低下。
感觉自己有时候 还是过于保守,就像这次面试,人家问我div和css怎么样?我回答说,马马虎虎,要真做项目的话,至少给我配个美工吧。(其实笔试题里面就有考到div和css的),问我存储过程会不会写?我回答说,我一般都不用存储过程的,因为之前做的项目没有那么高的性能要求,而且存储过程有时候管理不是很方便,甚至有不严谨的程序员在存储过程内部拼凑sql语句的,有sql 注入的隐患。(之前公司的项目里面都是存储过程,上千个,找起来头疼,我后面加的东西,能不用存储过程就都不用)
基本上通过这次的公司,我能给自己定一个位了,因为公司还有其它几个专业的程序员,还有二个老手,他们的水平,我基本上都有所了解了,我感觉,通过比较,最能体现价值了。
最后再附上点目前的不足:
系统的架构能力,这个可能真的是和经验直接挂钩的,看得再多,好像也没啥进步的。这个也是我现在最想要的。
底层特性,这个说重要也还是很重要的,能让自己看清很多东西。
理论基础,这个没办法,有机会慢慢补上吧。数据结构和算法,感觉就是永远都学不完的。
英语,26个字母发音都不准的我,哪一天能看明白英文文档啊。
随后又是一段时间的空闲,公司只要维护自己的网站就行了,也不对外接项目,每天任务基本上都很轻松,也不用花多少时间。我就踏踏实实的在cnblogs上面看文章学习了。很多的小知识点,小技巧,一些架构的讨论,还有N多的demo,让我又学到了不少的东西。
在我的记忆中比较深的有二个文章,一个是daizhj的discuz系统文章,让我好好的学习了一翻,紧接着后面的开源,让我好好的看了一回完整的代码(公司自己的站里面也有一个论坛,可是我看着总觉得别扭,于是就特意上网找了很多关于论坛的源码研究,最后觉得还是这个discuz不错,虽然当时没有开源,但是有daizhj的文章,足够了)。在那个时候,因为开发经验还是不足,也不知道自己到底有多少能力,在看完这个项目源码后,想着网上大大小小的站,多少地方在跑着,心中便多了一丝底气。因为我觉得这个项目,我基本上都搞懂了。给我时间,我也能给他仿出来。(也巧,就在其开源后不久,公司接了第一个对外的项目,其中就有一个论坛的,我就把discuz给搞上去了。)
还有另外一篇文章是 Jeffrey Zhao推荐的一个blog上面的,bloger好像是叫‘棕熊’来的,其有一篇讲其blog对ie6,ie7,ff2等浏览器支持的,看完了他的大作之后,我马上就把IE7给装上了。他给出的理由太充分了,至少我是这样认为了。(现在电脑上装的ff3和ie7,看有些页面很不方便,但我不后悔,他们连ie7和ff3都不支持,不看也罢。之前一直用的ie6,随后用了一段时间ie7,从ff3出来后,就一直用ff3了。)
这段期间,因为公司的页面常常要调整效果,也因为一直都有关注css这些东西。可能也是一个积累的过程,到年底的时候,我基本上已经习惯使用div了, 看着table,感觉代码太多,都有些不爽了。
其中还看了很多开源和没开源的,.net和非.net平台的cms,因为自己最初学习asp.net时,就是想写一个完善的新闻发布出来。也曾帮朋友做了几个小站,但是我明显的感觉到我还是少点什么东西,总觉得很是不完整。在随后5.1的一次面试过程中,他们一语说中了,我做的东西,不完整。我的东西,只能在功能上面勉强达标,页面显示,流程完整性上面 ,总是少一些东西的。就如我当初所说,我对设计效果不在行,搞来搞去也是丑得要死,对某些操作流程,都是以程序员的眼关去看。
话说到了5.1,那个时候公司经营了也有一年了,投了几十万,也没见一点效果,于是就准备开始散伙了。 虽然上头没说,但我看在眼里。
到了中旬,老板宣布解散,我便回家待业啦。刚好朋友有一个项目,要做几百个网站,金额达到几百万,还是国家单位的项目。我想着有些心虚,若是一个网站一个网站做,那只要花时间,倒也不复杂,可是他们要求能够快速建站,就是要写一个自助建站的程序出来。我想了想,还没有自己好好的建过一个系统呢(其实我一直有维护着自己的一个系统:也是一个购物网站,里面有完善的产品管理,附带新闻发布等其它简单的模块,可都不完善,前台页面基本没有效果。这个项目和公司没有半点关系,属于自己业余的一个爱好,因为当时家里不能上网,便只有写代码了,还有一个原因是因为一个朋友想拥有这样一个系统,此系统最初为一个新闻发布管理,随后添加了产品管理,还是复杂的产品管理,随后添加了用户管理,后来又添加了购物流程,最后一次添加了一个分类信息功能,随后就没有更新过了)。这也算是一次机会,好好锻炼一下自己,于是写信给5.1面试的公司,暂时先不考虑上班了。我想好好的努力,写一个像样的,能代表我的作品出来。
我的程序之路 asp.net 接触二年,工作一年总结 (2)
进了公司,是个做电子商务的网站,刚起步的,我当时去的时候连营业执照都还没有批下来,内部开发调试刚刚结束。过去先浏览网站,找其中的BUG,熟悉业务流程。还好,我本来对电子商务比较感兴趣,之前在淘宝上也玩过,没二天就把基本流程搞熟悉了。上面也没有给我分配任务,我就上csdn浏览网站了(之前家里不能上网)。随后装上了sqlserver,看他们的数据库架构,表很多,也很乱,大概了解了一下,也就没有往下看了。接着装VSS,看源码,之前都是写demo,自己一个人开发,从没接触过VSS等代码管理软件。上来就是一个新家伙,蛮好的,在网上找了一翻资料,还下了vss2005安装镜像和一些资料,晚上带回家学习了。(公司用的是vss6.0)
从VSS里面下下源码,乖乖,20多个项目。头一次见这么大的项目,编译都得有一会。看了一下代码,代码很乱,也没有分层,到处是数据库连接。虽然也有一个类似sqlhelper一样的助手类,但是页面还是其它的项目里面,到处是从数据库里面返回dataset的代码。还有用户控件,全部都是在.ascx.cs的页面后台代码里面拼凑出来的页面html源码。我那时候也搞不懂,为什么要这样做,因为我也着实是个新手,自己的一些想法也不确定是对还是错。只能先记着,回头有机会了再问。
第二个星期,任务下来,让我做几个页面上要显示的用户控件:自己调用sqlhelper返回结果集然后显示在页面上。还好,不难,之前类似的demo写过不少,只是之前都是用控件直接托出来的。我想着他们都是在后台自己写html源码的,可能是为了性能考虑。于是我就用asp风格的代码,在.ascx.cs里面取得结果集,并在.ascx页面前台拼凑出了页面源码,比他们之前的写法稍简单些,至少html源码不用在后台用字符串写了,“”号不用转译了。
第一次完成任务,我也表示了我这样写法比他们之前的写法简单(原来有二个程序员,一个美工,最多的时候有6个程序员,都是学生)
他们在看了我的代码以后,没做过多的评价。后来我知道了,他们也不是真正的程序员,都是学生,是老板和他们认识,叫他们来开发的,他们也表示这是他们第一次搞这样子的网站,是边学边做的。知道这个,我蛮佩服他们的,要是让我,我还真不知道能不能搭出来这么大一个网站来。
既然大家都是学习,那我就心里有底了,因为我一直觉得自己学得蛮好的(是和同学比较得来的 )
我随后就把petshop的分层模式告诉他们了, 告诉他们这么大一网站要好好设计。他们也很认同,也着实学习了petshop的源码,因为他们能写出这么一个大站出来,一些基础,一定是比我扎实的,所以也没花多大功夫,基本上也就搞清楚petshop的分层架构。在随后的网站开发中,确实有部分新模块就是使用分层架构去写的,不过大框架主功能都已经完成,大改动是不可能了,只能将就着开发了。
在随后的开发中,我因为是新来的,任务分配也较少,而且我总是会使用一些"偷懒"的方法去实现(他们不习惯使用控件,因为那有学习成本,他们还是习惯在页面后台拼凑html源码)。而我总是能够适当的使用控件来快速的完成。
习惯了公司的开发模式,开发上面也没什么顾虑,我总是用我自己的方式来实现。同时空闲下来的时间就在csdn上面逛。慢慢的,我发现csdn上面的.net频道总是转载一个网站的文章,于是就多上了几次这个网站,慢慢的,发现这是个好网站,正是我所需要的一个网站,上面的资源太多了。不用我多说,大家也一定是想到这个网站了,就是“专注于.net”的cnblogs。 至此,它成了我每天上班开机第一个要上的网站,先是看首页适合自己的文章,再慢慢的看各个不同的系列文章,从中系统的学习新技术。
由于我的开发总是比同事快一步,有时候不想看网上的文章了,就去自己找任务做。让我觉得有个跳跃性飞跃的一个任务是实现商品列表页。此页面能够按不同的条件进行检索,排序,还有不同的显示方式。开始我想用gridview 来实现,可是做了一半,发现要实现某些效果太难搞了,得写很复杂的绑定事件。于是上网苦苦搜索解决方法,网上大量的充斥的着一个列表控件Repeater。细细的看了文档,使用方式,觉得很是适合我使用,因为我最喜欢在前台写html源码了,不用在后台拼凑,而且性能很好,还有一个原因是大家都极立推荐的。搞了一天多,总算是把显示效果给弄出来了。其中底层的数据库读取是自己在页面上拼凑的sql语句,拼凑这个sql也花了不少时间。因为那时候存储过程我还是不习惯使用,要不一定把它扔存储过程里面去了,只要简单的处理一下参数就行了。
显示有了,那剩下来的就是分页了,分页也有不少的显示效果,参考了一个他们之前写的分页脚本代码, 大几百行,有数据绑定,逻辑判断,html效果拼凑的,看得真累。于是我又上网找,功夫不负有心人啊,AspNetPager给我找到了,还是开源的,爽。先是学习使用方式,完全能够实现效果。在完成任务之后,又研究了一下其源码,之前没有真正意义上的写过自定义控件,算是第一次学习。同时参考了cnblogs上面不少的好文。
这次的任务,让我学到了Repeater和AspNetPager这二个控件。
后面的开发,基本上就没啥让我印像深刻的了。要有的话,那就是开发blog时,使用了我提出的三层架构,用代码生成器生成了大量代码,花了一个星期时间,模仿sina,完美的交差了。那是我真正意义上的第一个分层架构,基于代码生成器的项目。(blog除了用户和老系统有关联,其它地方都是隔离的,所以是整个项目是独立出来开发的).不过最后在整合的时候,由于开发时没有考虑路径的问题,所以最后在路径的问题上面花了不少时间。总体来说,我还是比较满意的,尤其是blog管理后台,只是前台设计有些别扭了。
结束这blog开发,对于sqlservert和存储过程的应用,通过网上大量的讨论和自己的一些测试,也有了一定的心得提高。同时对于div和css,多了一些了解和使用。以前都是使用 table,对于div,不是很熟悉,css就更菜了。还有一个就是对于在线编辑器,之前也就是在《ASP.NET经典模块》接触过,知道几个常用的编辑器,从来没有深入的了解了。这次blog的开发,也着实好好的了解了一下fck,修改了其中的图片上传功能,以符合项目的需求。