博客园博客程序架构设计图初稿

看着越来越乱的代码,想着不断增长的需求,我们该如何选择?
继续辛苦地写着重复、混乱的代码,救火似地满足用户的需求?
还是根据新的需求重新设计程序的架构,让以后的开发更加轻松、快乐、快速?
就这么凑合着过日子?
还是为了更好的生活艰苦奋斗?
博客园开发团队选择了后者,开始博客程序的重构之路,虽然这条路更艰苦、风险更大、荆棘丛生,但是为了博客园进一步发展,为了给用户提供更好的服务,我们别无选择。
让我们从这里开始。
let's start from here

下面是博客程序架构设计图初稿,欢迎大家多提建议!

欢迎大家到博客程序开发小组讨论。
posted @ 2008-03-20 10:49 dudu 阅读(5701) 评论(111)  编辑 收藏

  回复  引用  查看    
#1楼 2008-03-20 10:55 | 红尘中迷茫      
支持重构。。有些文本性描述就更好了。。
  回复  引用  查看    
#2楼 2008-03-20 10:59 | 笨笨的考拉熊      
没什么能帮忙的,从精神上支持一下吧!
重构的道路肯定是很艰辛的,各位辛苦啦

看了留下的留言,有几点想补充:
1、能不能写一些文字性的说明,让大家更加明白,不然理解起来可能有歧意。
2、支持多数据源,既然有这个想法,就做出来,确实费不了多少事。
3、数据库的架构模型有没有,能不能也发出来。是用一个库还是多个库协同。
  回复  引用  查看    
#3楼 2008-03-20 10:59 | 萧寒      
学习!
  回复  引用  查看    
#4楼 2008-03-20 11:05 | ithurricane      
先研究一下

  回复  引用    
#5楼 2008-03-20 11:09 | virusswb [未注册用户]
我现在每天都要来博客园看看大家的东西呢
学到了不少
谢谢
  回复  引用  查看    
#6楼 2008-03-20 11:09 | 三磊      
提个建议,可不可以将博客园重构的过程写成博客??
  回复  引用  查看    
#7楼 2008-03-20 11:10 | virus      
我现在每天都要来博客园看看大家的东西呢
学到了不少
谢谢
  回复  引用  查看    
#8楼 2008-03-20 11:10 | virus      
@三磊
好建议啊
  回复  引用  查看    
#9楼 2008-03-20 11:11 | Anders Cui      
@三磊
这是很好的重构实践啊
  回复  引用  查看    
#10楼 2008-03-20 11:14 | Jeffrey Zhao      
Service Layer这层是做什么的呢?
  回复  引用  查看    
#11楼 2008-03-20 11:16 | Dflying Chen      
1 为什么每一层都需要接口?
2 需要用SQL Server和Oracle两种数据库么?
3 是重购还是重写?个人感觉还是重写比较好一些,重构的遗留问题太多了
  回复  引用  查看    
#12楼 2008-03-20 11:18 | lovecherry      
架构也就这样了,细节更重要
  回复  引用    
#13楼 2008-03-20 11:21 | lzppcc [未注册用户]
数据库没必要支持oracle或xml,只接支持sql就好了.
  回复  引用  查看    
#14楼 [楼主]2008-03-20 11:21 | dudu      
@Jeffrey Zhao
Service Layer相当于业务外观层。
  回复  引用  查看    
#15楼 2008-03-20 11:29 | ppchen(陈荣林)      
懂得不多,纯支持一下!
  回复  引用  查看    
#16楼 2008-03-20 11:46 | Anders Cui      
@lovecherry
还有哪些细节,详细点?
  回复  引用  查看    
#17楼 2008-03-20 11:49 | 狼Robot      
支持.
  回复  引用  查看    
#18楼 [楼主]2008-03-20 11:56 | dudu      
@Dflying Chen
@lzppcc
现在考虑多数据库的支持,增加不了多少工作量。如果现在不考虑,以后要改为多数据库支持的成本就很高。
  回复  引用  查看    
#19楼 2008-03-20 11:56 | Clark Zheng      
重构,阵痛
  回复  引用  查看    
#20楼 2008-03-20 12:04 | Anders Cui      
Service Layer作为业务外观层
可减少表现层和业务逻辑层的耦合

另外业务逻辑层貌似不太用到接口
这个地方跟业务实体不用接口类似
  回复  引用  查看    
#21楼 2008-03-20 12:04 | yushih      
我的主意是搞成Facebook App那种,让用户自己满足自己的需求,网站提供基础服务就行了。
如果真能这样我愿意捐献几个man month,把豆瓣clone过来。
  回复  引用  查看    
#22楼 2008-03-20 12:27 | winzheng      
不错,早重构,早安心。。。
  回复  引用  查看    
#23楼 2008-03-20 12:29 | overred      
如果能把整个开发的过程单独开个版块给记录下来那就爽了
叫做:开发日志啥的。。。

  回复  引用    
#24楼 2008-03-20 12:29 | 反对方的反对 [未注册用户]
跟我现在做的eip差不多,但是我没有用到 service layer,cache,表现层没你那麽复杂,不过我的eip现在正在往上加workflow ,o(∩_∩)o...,加油吧,改好通知一下,好向你学习。
  回复  引用    
#25楼 2008-03-20 12:43 | 路过 [未注册用户]
如果要考虑多数据库的支持,不知道为什么不用Nhibernate,毕竟Ibatis虽然灵活,但是如果要更换数据库,工作量相比Nhibernate要多很多。
不知道DUDU是否有其他的考虑?
还有就是表现层与服务层的解耦,建议使用Castle.Net来管理。实现简单的依赖注入,我觉得Castle要比Spring.net要简洁一些。
  回复  引用    
#26楼 2008-03-20 12:43 | t [未注册用户]
使用wcf提供REST风格的 API供第三方调用 
另外建议可以使用db4o做中间缓存

  回复  引用    
#27楼 2008-03-20 12:44 | t [未注册用户]
多数据库支持用subsonic方便
  回复  引用  查看    
#28楼 2008-03-20 12:48 | 生鱼片      
怎么好像有点petshop的风格,过多的分层会不会有效率问题呢。
  回复  引用  查看    
#29楼 2008-03-20 12:59 | KevinLi      
嗯 和 微软的那个网上书店架构差不多!
多结合博客园自身需求来设计架构
  回复  引用  查看    
#30楼 2008-03-20 13:05 | Shiherpoo      
我个人认为重构比较好,毕竟要考虑博客长远的发展。
不然以后将会是一件更痛苦的事.........
然后就是不明白为什么每一层都有接口定义?
还有就是提个建议:如果可以的话,将整个博客的实施过程和开发日志做一个博客?
  回复  引用  查看    
#31楼 2008-03-20 13:05 | Shawn Ji      
不基于.Net3.5么
  回复  引用    
#32楼 2008-03-20 13:09 | 后台运行中 [未注册用户]
把service 单独成一个layer,是不是有点过了?要不就单独抽出来,要不就跟web layer平行了,放web layer下面,有点过了吧?
  回复  引用  查看    
#33楼 2008-03-20 13:09 | EricWen      
很关注
希望能给出更详细的说明。

  回复  引用  查看    
#34楼 2008-03-20 13:12 | 阿不      
感觉有些地方过于冗余了。
  回复  引用    
#35楼 2008-03-20 13:21 | 后台运行中 [未注册用户]
顺便问一下,这个图是用什么工具画的???
Web层可采用ASP.NET MVC,估计重构完它也Release了,中间层采用WCF比较好,WCF支持单台服务器的时候就是进城内的,多台的负载环境就是分布式的,而且WCF是一个统一的编程模型。
数据访问层用NBear不错,是cnblogs上的自有技术。
  回复  引用  查看    
#37楼 2008-03-20 13:48 | 高_超      
学到很多啊.......刚开始在架构上学习........受益..........
  回复  引用  查看    
#38楼 2008-03-20 13:57 | Da Vinci      
presentation层的winform能换成wpf么....
  回复  引用  查看    
#39楼 2008-03-20 13:57 | Zhuang miao      
有那时间不如重写!支持重写...重写个更强大的
  回复  引用  查看    
#40楼 2008-03-20 14:02 | airwolf2026      
呵呵.刷新看看.
  回复  引用  查看    
#41楼 2008-03-20 14:04 | 老Q      
感觉还是重写比较好,重构中肯定会感觉束手束脚的。
其实大面积重构的工作量并不比重写小,制约却大了很多
  回复  引用  查看    
#42楼 2008-03-20 14:07 | Evernory      
工程浩大啊~
  回复  引用  查看    
#43楼 2008-03-20 14:10 | 电机拖动      
博客园又要向前发展了,呵呵
不过有几个地方没看明白
1、 Service Layer,什么叫业务外观?
2、 DAL中的,比如iBatis这样的东西对数据库的依赖很大的,如何用以实现数据库透明呢?
3、怎么到处都是接口?要工厂?还是准备日后做API?
  回复  引用    
#44楼 2008-03-20 14:22 | ludao [未注册用户]
真正等你换数据库的时候
估计 你的 整体 架构都得 再次 重构了...

支持多数据库 对于一个 网站项目 没有什么意义
  回复  引用  查看    
#45楼 2008-03-20 14:39 | Kai.Ma      
这图用什么软件画的,推荐个
  回复  引用    
#46楼 2008-03-20 14:45 | lxinxuan [未注册用户]
我们的网站从04年存在,经历了无数人的蹂躏,不管数据库和代码都是乱的一塌糊涂。。。号称最近要升级到2.0(目前是1.1),难啊。
  回复  引用  查看    
#47楼 2008-03-20 14:45 | Netprawn      
用WORD应该就可以画.支持一个
  回复  引用    
#48楼 2008-03-20 14:46 | lxinxuan [未注册用户]
补充:我们网站pv几百万,不是吹的,确实是这样。
  回复  引用  查看    
#49楼 2008-03-20 14:48 | lovecherry      
mvc+linq+ado.net ef+silverlight+asp.net ajax+wcf+wf+utility+一系列开源框架 爽阿
  回复  引用  查看    
#50楼 2008-03-20 14:57 | Dove.Net      
真是好消息支持
  回复  引用    
#51楼 2008-03-20 14:58 | alvin(我就是我) [未注册用户]
如果在博客园重构完成后发些相关的开发过程文章,这样是可以的,但是如果要边开发边发布开发过程文章,开发人员哪有那么多的时间和精力。
个人感觉,现在的架构基本上符合了,顶多关键是service layer怎样和表示层怎样分配结合了,到底是做成soa还是什么的形式,还有在各个层当中不见得就一定要用当前常用的ioc和orm框架,关键是考虑性能还是考虑后期维护。
  回复  引用  查看    
#52楼 2008-03-20 14:58 | Vincent Jiang‎      
@lovecherry
--引用--------------------------------------------------
lovecherry: mvc+linq+ado.net ef+silverlight+asp.net ajax+wcf+wf+utility+一系列开源框架 爽阿
--------------------------------------------------------
so great,so powerful.
  回复  引用    
#53楼 2008-03-20 15:25 | RandyTse [未注册用户]
建议DUDU使用Remoting...如果不考虑平台的话。
Remoting为前端Webform和Winform提供支持。
  回复  引用  查看    
#54楼 2008-03-20 15:25 | 不知如何爱你      
現在正在 研究架構,學習下,頂!!!
  回复  引用    
#55楼 2008-03-20 15:26 | RandyTse [未注册用户]
Remoting分布式布署是蛮不错的选择。如果cnblogs做大的话。
  回复  引用  查看    
#56楼 2008-03-20 15:32 | andy.wu      
强烈建议dudu开源,这样园子里的兄弟们都可以贡献一份自己的力量!

ps: 开源对项目管理和架构的要求很高(有点怕怕):)
  回复  引用  查看    
#57楼 2008-03-20 15:45 | lbq1221119      
海不错,就是感觉不够详细
这个图还是远远不够的
  回复  引用    
#58楼 2008-03-20 16:22 | vincent-shi [未注册用户]
我觉得service layout & Business logic layout不应该用interface来实现,应该用facade method(外观模式)来实现,interface只不过是method的抽象,如果你的business很复杂的话,这个interface岂不是太大了?日后的maintainence就会变得很麻烦.
  回复  引用  查看    
#59楼 2008-03-20 16:46 | Wind Snail      
1,BL interface layer有什么作用?似乎有点多余。
2,各个模块/子系统间如何进行交互/集成。你的架构图太简单了,只有纵向层次结构,没有横向模块结构。
3,同上,图画的太简单了,没有表现出层次间的通信。主要是service consumer和service provider之间的通信,有哪些通信方式?各针对什么类型的consumer,应该画清楚。
4,cache画这么大?意思所有对business的访问都要经过cache?
  回复  引用  查看    
#60楼 2008-03-20 16:53 | Wind Snail      
#36楼 2008-03-20 13:24 自由、创新、研究、探索……
Web层可采用ASP.NET MVC,估计重构完它也Release了,中间层采用WCF比较好,WCF支持单台服务器的时候就是进城内的,多台的负载环境就是分布式的,而且WCF是一个统一的编程模型。

=======================
“WCF支持单台服务器的时候就是进城内的,多台的负载环境就是分布式的“这个话何解?统一的编程模型主要含义还是统一的"远程"访问编程模型。

关于这个我觉得dudu的设计就足够好了,有了一个service interface就有了足够的灵活性,至于具体的是in-proc的 实现还是wcf的实现都是可扩展的。
  回复  引用  查看    
#61楼 2008-03-20 17:37 | A.Z      
如果我写的话就一定用MVC fw了,之前要准备拉一批美工和专门写js的人才。
至于数据库lz的设计显然有些迷茫,xml不能作为一个数据库。
还有一个至关重要的一点,lz把层分的这么细致,代码的严谨要求会指数式的增加,到最后会很难控制代码质量,直到得到一个可用却不理想的重构版。
工期多长?


  回复  引用  查看    
#62楼 2008-03-20 17:56 | 蛙蛙池塘      
做个网站可真不容易,我觉得性能不成问题的话,就优化一下可读性就OK了。
  回复  引用    
#63楼 2008-03-20 19:00 | whoami [未注册用户]
先给出一个能用的版本,然后在这之上一点点给出进步,别一下想太多,过度设计跟没有设计带来的后果差不多,可能更甚之。

至于数据库我觉得你真的想太多了,sql server难道不够你用?等不够用的时候,真正应该操心的可能就不是数据库了。
  回复  引用  查看    
#64楼 2008-03-20 19:24 | 破曉之陽      
加油。。
  回复  引用  查看    
#65楼 2008-03-20 20:32 | 针式个人知识库管理      
COM+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
高性能、分布式网站的不二选择
  回复  引用  查看    
#66楼 2008-03-20 20:40 | 没剑      
歌太好听了~~
dudu努力
  回复  引用    
#67楼 2008-03-20 21:27 | 酷勤网 [未注册用户]
很好,比csdn好多了,csdn对服务好像不是很讲究,经常用的很不爽
  回复  引用  查看    
#68楼 2008-03-20 22:22 | Jeffrey Zhao      
WCF、COM+什么都不需要。博客园有多少业务运算呢?为什么要多加一个应用层?直接Web服务器+数据库服务器对于大部分互联网应用来说就可以了,多加一层反而降低性能,本来就没有什么计算任务,还增加了通信成本。
当然,如果博客源想释放API的话,那么WCF是不二的选择。
  回复  引用  查看    
#69楼 2008-03-20 22:26 | Jeffrey Zhao      
还有就是,分布式数据库是可以考虑进去的,但是我也觉得多种类型数据库倒真没有什么必要……
  回复  引用  查看    
#70楼 2008-03-20 22:43 | 预备役中尉      
渐渐离开WEB了.还是关注中.
  回复  引用  查看    
#71楼 2008-03-20 23:45 | 光影传说      
@Jeffrey Zhao
多库分布是必须要考虑进去的,如果没有多库,则没有必要搞的那么复杂。最终的难题,我估计应该会在多库分布这个核心点上面。
  回复  引用  查看    
#72楼 2008-03-21 00:03 | 坏人      
多数据库支持完全没必要做,一开始选好要用什么库就好了.

分库通常也没意义,做好数据库的负载就好,再把缓存做好就足够.
  回复  引用  查看    
#73楼 2008-03-21 01:15 | RicCC      
这种分层只是形式,接口/类/代码量会带来无谓的复杂性和工作量,并不见得维护性能得到改善
大型网站程序这样做的应当比较少,性能(包括缓存方案)、伸缩性是两大关键,把这两项设计好就OK,其它用最快捷的方式实现,中间每引入一个框架可能意味着开发过程以及维护阶段要面临很多问题

两个想法
1. dotext好像把文章存数据库了,这样带来的性能瓶颈太大,可以考虑文章只存为文件,用lucence做搜索
2. blog系统比较好实现线性伸缩,可以在这方面多考虑
  回复  引用  查看    
#74楼 2008-03-21 01:35 | 一抹微蓝      
进来学习,现在还插不上话。
希望有朋友可以介绍一下多库分布
  回复  引用  查看    
#75楼 2008-03-21 08:24 | 小哈      
關注
重構是一項大的工程
需求會一直變動,技術也在不斷翻新,或者在目前的專案上去精簡代碼,實現可擴展性的新需求
  回复  引用    
#76楼 2008-03-21 08:53 | yangaska [未注册用户]
背景音乐不错挺好听
  回复  引用  查看    
#77楼 2008-03-21 09:11 | appleseeker      
@dudu
可以将文章以xml形式存放,然后用xslt,xsd对xml进行约束、修饰、展现。
  回复  引用  查看    
#78楼 2008-03-21 09:42 | Anytao      
如果是大刀阔斧的重构,考虑多数据库支持还是必要的,要不然以后的维护会有更多麻烦。
整体的架构还是很经典的,在传统三层架构上,隔离出服务层,我认为基于以后的需求扩展考虑也是应该,WCF绝对是不错的选择。不过正如老赵所说,增加通信成本是无疑的。
  回复  引用    
#79楼 2008-03-21 09:54 | aysun168 [未注册用户]
你这歌曲很好听!
  回复  引用  查看    
#80楼 2008-03-21 10:13 | JackMa      
开发团队你们辛苦了!致敬!
  回复  引用    
#81楼 2008-03-21 10:14 | none11 [未注册用户]
简单
  回复  引用  查看    
#82楼 2008-03-21 10:16 | KidYang      
如果有可能,觉得还是重写好一点
  回复  引用  查看    
#83楼 2008-03-21 10:24 | Tony Zhou      
某些精妙的实现可以考虑部分开源,我喜欢service layer
  回复  引用  查看    
#84楼 2008-03-21 11:15 | Tristan(Guozhijian)      
业务外观层有没有必要?
难道所有业务都需要外观?

业务层也要全部抽象出Interface吗?有什么用?这点我比较奇怪
  回复  引用  查看    
#85楼 2008-03-21 11:17 | Mainz      
复杂了点,有点过度设计

针对用户体验和性能多设计一下吧,博客园业务倒不是那么复杂的!
  回复  引用  查看    
#86楼 2008-03-21 12:24 | Ryan Yu      
向开发团队致敬
  回复  引用  查看    
#87楼 2008-03-21 12:56 | deerchao      
建议别搞这么重量级,轻一点,敏捷一点..
  回复  引用  查看    
#88楼 2008-03-21 13:07 | 早班火车      
感觉鲜果的模式还不错,有自己的一套digg机制,
好文章看的人多顶的人也多,自然而然就区分出精华了。
前期的需求分析真的重要。
可扩展性,伸缩性,性能,用户体验很多都需要考虑的很清楚。
博客园开发团队辛苦了~一如既往的支持博客园~

  回复  引用    
#89楼 2008-03-21 14:01 | test0012008 [未注册用户]
--引用--------------------------------------------------
lxinxuan: 我们的网站从04年存在,经历了无数人的蹂躏,不管数据库和代码都是乱的一塌糊涂。。。号称最近要升级到2.0(目前是1.1),难啊。
--------------------------------------------------------

比你惨!

我的一个OA系统是一个大工厂集团03年上线的,.net 1.1的,历经公司N代程序程序员的修改,里面的功能早就脱离的 OA系统的范畴,系统没有分层,没有架构,所有的逻辑杂到一起,就着个烂系统,支撑这一个上百千亿营业额的工厂,,
目前就我一个人维护,,最近猛然听说要重写,但要保持原有的数据和所有功能,,,我的娘,我一听头就大,浑身冒