我构想中的 Pache 第一版的大部分功能都实现了,还有什么呢?
特性/功能是永远都加不完的,就比如吧,这个Editor需要个 classSelector。嗯,这个不难,先在article表里加个className什么的,获取类的话就用DISTINCT什么的就可以了。加了过后又需要个 tagSelector……嗯,这回有点麻烦了,要新建一个表,然后这个表要跟article表对照起来……然后又要改改这个bug、加一加那个CSS、F5几下……好,除了后台没实现外别的都完成啦!睡目睡目………………zzz
其实这样子,并不好。因为是想做就做的心态,对于系统的考量可能就没那么多,于是乎代码会写的很混乱,各种乱用语……
比如这样,我要写一个 文章管理器,首先它需要一个读取文章的方法,嗯,写下来,噢,发现文章列表都没有怎么得到文章信息呢,遂又写了个getList方法,噢,又发现获取过来的数据可能还要渲染什么的……再写个process……………………
12345678910111213141516171819202122232425262728293031323334353637383940/* demo Article Manager. */ var manager = { loadArticle: function (id){ //do something...... }, getList: function (page, limit){ //do something...... var url = 'load.php?'+ $.stringifyRequest({'page': page, 'limit': limit}); $.get(url, function (d){ process(d); }, function (){ throw new Error('get fail'); } ); }, process: function (d){ $.json2obj(d, function (obj){ var articleList = $('#articlelist')[0]; articleList.innerHTML = ''; obj.list.forEach(function (item){ articleList.appendChild( function (){ var a = document.createElement('a'); a.innerText = item.title; return a; }() ); }); }, function (){ throw new Error('process fail'); } ); //...... } };
oh,shit,然后又发现需要个编辑器来编辑文章,然后又需要什么classSelector什么鬼的东西,问题接踵而至,我的天Oh my god![1]
到底要怎么解决这种情况呢?其实定个目标就可以了
比如想个大体的,嗯,我需要一个 文章管理器,然后这个文章管理器有个列表,而且还有个编辑器……嗯,这个编辑器可以指定文章的class、tag、type等等各种数据……
123456789101112131415161718192021222324252627282930313233343536373839404142/* demo Article Manager v2 */ var Editor = new function (){ this.tagSelector = function (){ //do something }; this.classSelector = function (){ //do something }; /* do anything */ }; var manager = new function(){ var my = this; this.renderingList = function (articleList){ $articleListEle = $('#articlelist')[0]; articleList.forEach(function (item){ articleListEle.appendChild(function (){ var li = document.createElement('li'); li.textContent ? (li.innerText = item.title) : ( li.textContent = item.title ); return li; }()); }); }; this.getArticleById = function (articleInfo){ }; this.list = new function (){ this.getFail = function (err){ alert('get fail QAQ'); throw new Error(err); }; this.getArticleList = function (page, limit){ var url = 'load.php?'+ $.stringifyRequest({'page': page, 'limit': limit}); $.get(url, function (d){ $.json2obj(d, my.renderingList, this.getFail); }, function (){} ); } } };
嗯,写完了(没有必要去仔细研读),目标达成了,再也不会出现之前的那个问题了。
所以万事要计划
三思而后行,这对于编程来说是至关重要的[2],没有想好,问题就会各种烦你,到最后代码也没写好,开的坑也就这么坑掉了……
回过头来
那么这次究竟在思兼什么呢?“还有什么?”,嗯可以说的是还有很多东西呢,就算实现了大体的功能,细节部分依旧要补完[3],嗯……又得坑了orz……
当然新功能也是要有的,诸如 Editor 的 HTML预览,Markdown预览,tag选择器……等等
在Pache上写文章是一种享受 :-)