珂珂的个人博客 - 一个程序猿的个人网站

FYJ.Blogs开发系列(一)

FYJ.Blogs开发系列(一)

FYJ.Blogs开发系列(二)-后台文章列表页View

FYJ.Blogs开发系列(三)-后台文章编辑页View

FYJ.Blogs开发系列(四)-后台文章Controller

FYJ.Blogs开发系列(五)-前台基页Controller

FYJ.Blogs开发系列(六)-前台主页Controller

FYJ.Blogs开发系列(七)-前台文章Controller

FYJ.Blogs开发系列(八)-自定义路由

FYJ.Blogs开发系列(九)-查询文章函数

FYJ.Blogs开发系列(十)-主页查询存储过程

FYJ.Blogs开发系列(十一)-后记

   很早很早就想做个自己博客,觉得写实际东西的话能学到不少技术,起码应该比光看书要好。做是做了,现在来写点东西好像真不好写。最开始是从资讯类网站开始的,我的做法前台就只有3个页面,一个主页一个列表页一个详细页,后台就是典型的增删改查。那时候貌似还不会分层,也不会ORM也不懂依赖注入,基本的增删改查都是靠sql完成,当然也不会MVC 。

  知道有个出名的博客系统叫wordpress,不过受限于它是php,好像对多博客系统也不支持。看了下代码还是有点复杂,而且是想后台的数据按照自己的思路来做,所以就没采用。因为一直想做成多套风格,看到其确实有非常多漂亮的模板,就想可不可以用它的界面然后换成自己后台。想法是读取模板的php代码把某些特定的函数替换掉,后来发现不太现实。 后来发现其生成的html有一定规律,就想按照生产的html作为模板,然后替换掉相应数据,我又在它的后台生成一些规律的文章和分类,比如@文章1@ @分类1@  然后来替换,后来就不在受限于规律用正则表达式来替换的。事实证明还是可行,起码80% 的界面能替换过来,20% 用自定义的规则就可以了。当时做这个忙活了好几天,现在代码已删...

  前期,为了支持多种数据库,我用自己开发的FYJ.Data来做的。后来由于公司要我做一个架构,我就用最新的EF和MVC 来做,虽然没大接触过,不过新东西学起来还是挺有兴趣的,没过多久就感觉差不多会了,于是又想法把自己的博客改成EF+MVC,这次就只采用了SqlServer,以前写了那么久的asp.net代码也废了...不过移植到mvc好像就花了一周多。

  

这是整个项目,至于为什么有源码管理,我是用了vs2013的本地Git,之前用TFS这样的话能找回以前的代码。本来还想再分个业务层,后来却没有..直接写在数据层DAL里面。Blogs.Entity是EF的Model,因为我不是Code First而是DB First所以我不想动EF生成的Model。至于Blogs.Model是前期的,没用到,Blogs.ViewModel就是页面的模型了,还加一些特性什么的。我做了一个帮助类实现两个对象的互相拷贝,也就是用在Entity和ViewModel之间的,不过只是拷贝了基本数据类型。然后独立4个UI出来,Main是博客前台,Admin是后台管理,Service就是服务了,Static为一些静态资源的引用还有上传文件存放的地方,Passport是统一用户登录类似通行证的站点。我是十分不愿意把js,css之类的静态文件放在网站目录下,而是喜欢远程引用,不过这样好像用不到mvc的压缩js、css的功能,路径问题倒是不存在了。当然我觉得文件上传也必须得分离,不能上传到网站目录下,所以就分离出来个Static。之前的文件上传是用WCF,后来接触到百度云,就把文件存到百度云存储。于是又写了套Java的东东在百度BCS上,主要用来管理上次的文件和文件与对象关系。这个上传功能也是花时间比较多的,改了很多次。

  

   博客的关联感觉还是有点复杂的,其实我的想法不只是博客还能作为一个简单的CMS,所以后来由单用户改为多用户多博客。系统有多个用户,每个用户可以创建不同的博客,每个博客各自有自己的数据,分类、标签、专题、文章等。每个博客可以绑定不同的域名有不同的主题,每个分类也可以绑定独立域名设置不同的主题,单独的一篇文章也可以单独设置主题。

上面的是数据库,下面是EF

感觉是有点复杂了。

   至于前台界面就是http://kecq.com 和http://www.devblog.cn  了,后面是抄博客园的html,因为我本身对前台不是很在行。

后台采用的是Jquery EasyUI 

下面是文章管理

最复杂的就是这个和下面的文章编辑页了


   这个后台一般是只在我自己电脑运行的,虽然也可以部署到网络上让用户来创建博客..编辑器最开始用kindeditor,它的flash文件上传可以支持跨域,后来又改成百度编辑器,这时候我已经放弃跨域上传了,因为我的网络太差,我是先上传到本地,然后再做了个工具上传到百度云存储.

ps:我还做了一个采集工具...不过感觉功能很单一。

我的想法是kecq.com 和fyj.me 这两个域名作为个人使用全部放原创,其它域名收集一些精品文章。

    关于数据,因为我的做法是本地一份,网络一份,最开始是读取只读本地数据,保存的时候同时保存到网络一份,因为FYJ.Data是支持多数据库操作的,所以就没用EF的增删改。后来受限于网络速度实在太慢,就做了个同步工具,因为我是虚拟主机,所以SqlServer分发功能不好用。一开始我是用数据库自动递增的主键,但是对分布式数据库支持不太好,于是又改成Guid,后来觉得这个实在太长了,还是改回自定义生成的数字ID。 最开始是有分表的,用EF后就又改回来了,等数据量大些再分吧。前台的查询考虑到效率问题,我没有用EF 而是用的存储过程,因为一个主页要查询很多次,为此还写了一个表函数,然后视图再调用它。

这个表连接好像有点多...

然后是存储过程


还有非常关键是的伪静态,因为是支持多用户多博客的,必须做好各种Url和后台的对应,最开始是写了个HttpModule来处理,后来因为用了MVC就用了MVC自定义路由,这也是花时间比较多的。还有花时间多的就是评论系统,本来想做个无线级的,后来还是没实现。

   然后就是用户系统,之前做了个还算完整的用户系统,后来想用QQ登录懒得管理了,就没引用,不过用户登录还是做成了跨域名的单点登录。ps:为什么JAVA的CAS单点登录那么多....

   后来再优化了下效率,用MVC生成真正的静态html,每隔一定时间再重新生成,这样就不用每次都访问数据库然后做复杂的运算了,直接读取静态的html展示就行了。


上一篇:wordpress3.6 修改的地方

下一篇:个人代码全部开源


0 评论

查看所有评论

给个评论吧