漫谈社区架构
現(xiàn)在Web最火的是什么?Web 2.0?Web 2.0最火的是什么?論壇和博客。論壇和博客以及諸如SNS等等,又可以合稱(chēng)為社區(qū)(Community)。
?
一直以來(lái),做一個(gè)屬于自己的論壇就是我的夢(mèng)想,一個(gè)可以想怎么擴(kuò)展就怎么擴(kuò)展的論壇,一個(gè)內(nèi)部架構(gòu)與表現(xiàn)層完全分離的論壇,一個(gè)稍加改動(dòng)就可以變成博客或者你所能想到的所有的東西的論壇。
?
這個(gè)東西如何才能從夢(mèng)想變成一個(gè)切實(shí)的東西。最重要的便是,抽象架構(gòu)。本文試圖從筆者自己對(duì)論壇和博客的理解,談?wù)勆鐓^(qū)的抽象架構(gòu)。
?
?
首先社區(qū)是由用戶發(fā)布的東西所構(gòu)成的,這個(gè)東西可以是帖子、博文、照片等等等等,所有的這些,我通稱(chēng)為文檔。文檔被定義為,用戶可以發(fā)布的最小單位。也就是說(shuō),用戶最少一次只能發(fā)布一個(gè)文檔(Document),而不能是一個(gè)文檔片段或者其他的什么。文檔這個(gè)東西,在論壇中,就是一個(gè)帖子,一個(gè)回復(fù),一個(gè)BT種子(BitTorrentFileDocument)。而在博客中,便是一篇博文,一個(gè)評(píng)論,一個(gè)圖片(PictureDocument),或者其他任何可以發(fā)布的東西。
?
一個(gè)東西被發(fā)布(Publish)后,用戶就必須舍棄一部分權(quán)利。比如說(shuō),一個(gè)帖子如果被發(fā)布到一個(gè)重要的板塊(如投訴、建議、公告),就不能隨便修改。從法理上來(lái)說(shuō),一個(gè)文檔一旦被發(fā)布,其發(fā)布者就必須對(duì)發(fā)布時(shí)的狀態(tài)負(fù)責(zé),而無(wú)論這個(gè)文檔是不是被人看過(guò)(比如說(shuō)其中包含不實(shí)或詆毀他人的言論,或者一幅包含XX內(nèi)容的圖片)。所以,一個(gè)文檔的發(fā)布與否,是非常重要的一件事情。所以我必須引入另一個(gè)概念,“已發(fā)布的文檔”(PublishedDocument)。
?
文檔發(fā)布后想要讓大家看到,就必須有個(gè)地方來(lái)展示。這個(gè)展示文檔的東西,我暫時(shí)就叫它話題(Topic)吧。如果你想要發(fā)布一個(gè)東西引起大家的討論,這就叫發(fā)起一個(gè)話題(LunchTopic)。如果你對(duì)這個(gè)話題有話要說(shuō),那么就叫做參與這個(gè)話題(AttachTopic),而你要說(shuō)的話,還是必須被先包裝成文檔(Document),并發(fā)布(Publish)。
?
話題其實(shí)是很多東西的一個(gè)抽象表達(dá),因?yàn)槲覀儎偛耪f(shuō)了,Document本身就是一個(gè)抽象的東西,可以是一個(gè)文本文檔(TextDocument),一個(gè)照片(PhotoDocument)。那么顯然,話題除了可以是一篇博文和它的評(píng)論或者一個(gè)帖子和它的回復(fù),還可以是一個(gè)照片和它的評(píng)論,一個(gè)投票和他的參與以及評(píng)論,一個(gè)問(wèn)題和大家的回答,一個(gè)相冊(cè)和大家的評(píng)價(jià),等等等等……總而言之,一個(gè)“發(fā)布的文檔”的集合。當(dāng)然,話題也可以僅僅就是一個(gè)公告,它就只有一個(gè)文檔。
?
但是話題又顯然不是一個(gè)文檔集合這么簡(jiǎn)單,這是因?yàn)樵掝}包含了“已發(fā)布的文檔”的關(guān)系和狀態(tài)。一個(gè)顯而易見(jiàn)的關(guān)系就是回應(yīng)關(guān)系,我這個(gè)回復(fù)是針對(duì)哪個(gè)回復(fù)的,或者說(shuō)我這個(gè)評(píng)論是針對(duì)哪個(gè)評(píng)論的。這是論壇上一個(gè)非常常見(jiàn)的功能。雖然這個(gè)關(guān)系可以用引用回復(fù)來(lái)解決,但這只是一種實(shí)現(xiàn)手段卻不是說(shuō)抽象模型中沒(méi)有這個(gè)東西。
?
話題中文檔的另一個(gè)關(guān)系或狀態(tài)我將它稱(chēng)為覆蓋或者叫遮蓋,在談這個(gè)關(guān)系之前,我必須說(shuō)說(shuō)“已發(fā)布的文檔”不可修改原則。
?
顯然,一個(gè)文檔的修改與發(fā)布一個(gè)新的文檔在本質(zhì)上是沒(méi)有任何不同的,而且在實(shí)際操作中,修改功能已經(jīng)凸現(xiàn)出越來(lái)越多的弊端了。比如說(shuō)“占樓”,意思就是指,先把位置占住,然后再利用修改功能將要發(fā)布的東西放到那個(gè)位置去。所以,文檔的修改版本是不是要與原來(lái)的文檔版本相同或者是在其上修改,這完全是一個(gè)良心問(wèn)題。修改在很多時(shí)候也可以當(dāng)作刪除功能來(lái)使用,將回復(fù)修改成:“已被作者刪除”,就完成了與刪除回復(fù)雷同的功能。并且,很多人都習(xí)慣用修改來(lái)逃避應(yīng)有的責(zé)任,雖然說(shuō)這也是論壇上避免爭(zhēng)端的一個(gè)方法(刪除自己頭腦發(fā)熱的言論)。但是一個(gè)已經(jīng)發(fā)布的東西改來(lái)改去帶來(lái)的扯皮遠(yuǎn)比好處多。
?
綜上所述,不如干脆直接屏蔽“已發(fā)布的文檔”的修改功能,這個(gè)功能的替代是“重發(fā)布”(Republish)。這不僅僅是改個(gè)名字而已,而是在架構(gòu)上重新設(shè)計(jì)了。重發(fā)布的意思是,再發(fā)布一個(gè)文檔到話題,以替換掉原先的文檔。這個(gè)原先的文檔(HistoricalDocument)的狀態(tài),就叫做被被覆蓋(Shadowed)。這樣修改后,至少在架構(gòu)上,所有已發(fā)布的文檔都會(huì)一直在話題中存在,至于被覆蓋的文檔,是不是被顯示出來(lái),這完全是UI的問(wèn)題。
?
這樣設(shè)計(jì)的好處是相當(dāng)多的,“已發(fā)布的文檔”的版本關(guān)系不再是文檔本身的屬性,而是話題的屬性。這樣恰好避免了另一個(gè)問(wèn)題:“管轄權(quán)限沖突”。這個(gè)沖突其實(shí)是比較麻煩的,也就是說(shuō),一個(gè)“已發(fā)布的文檔”的所有者(作者、發(fā)布者)所擁有的權(quán)限(如修改,刪除)會(huì)和這個(gè)文檔所處的話題的管理者的權(quán)限相沖突。簡(jiǎn)單的說(shuō),你在一個(gè)板塊發(fā)了一個(gè)帖子,版主修改了你的帖子,你不滿意版主的做法,把帖子又擅自改回,版主又改過(guò)去。然后版主刪掉你的帖子,使得你的成果丟失,你非常氣惱,離開(kāi)論壇。或者,一個(gè)菜鳥(niǎo)在他的博客上發(fā)表了一個(gè)問(wèn)題,你覺(jué)得這個(gè)問(wèn)題不怎么樣,但是延伸開(kāi)來(lái)有很多有價(jià)值的東西可以說(shuō),你去發(fā)表一篇很長(zhǎng)的回復(fù),結(jié)果那個(gè)菜鳥(niǎo)不明就里的把你的回復(fù)給刪掉了,你氣惱,你苦悶,你無(wú)助,離開(kāi)這個(gè)博客。
?
或者反過(guò)來(lái),某人發(fā)表了一個(gè)詆毀你的言論,你氣惱,你回應(yīng)了一篇長(zhǎng)篇大論來(lái)駁斥這個(gè)胡說(shuō)八道,但是,那個(gè)家伙把他的帖子刪掉了,這下子大家只看到你一個(gè)人在那里被當(dāng)猴耍。
?
OK,其實(shí)上面這些問(wèn)題都是私有權(quán)限和公有權(quán)限不明確所造成的。一個(gè)已發(fā)布的文檔不可以被修改(允許修改就等于允許刪除),已發(fā)布的文檔不能被所有者刪除。就能徹底的解決上面這些亂七八糟的問(wèn)題。
?
事實(shí)上我考慮清楚重發(fā)布的問(wèn)題后,很多問(wèn)題都變得清晰起來(lái)了。
?
一個(gè)文檔沒(méi)有被發(fā)布之前,這個(gè)東西是用戶的私有財(cái)產(chǎn),可以隨便亂改,隨便亂刪。但是一旦被發(fā)布,就會(huì)出來(lái)一個(gè)“已發(fā)布的文檔”的副本,不再是你的私有財(cái)產(chǎn),必須受到話題的管轄。話題可以賦予用戶修改(重發(fā)布)和刪除的權(quán)利,也可以不賦予。并且,你發(fā)布后也可以對(duì)文檔進(jìn)行修改,或者別的操作,不過(guò)這些操作都是對(duì)你的私有副本的操作,而不是那個(gè)“已發(fā)布的文檔”的副本。
?
而且,以前那些糾纏不清操作和權(quán)限,一下子全清楚了。
?
文檔顯然是可以被修改(Modify)的,也可以被刪除(Delete)。但是一個(gè)話題里面的文檔要被修改就叫做重發(fā)布(Republish),要?jiǎng)h除一個(gè)話題里面的文檔叫做從話題中移除(RemoveFromTopic)。
?
這樣梳理后,話題也可以被賦予一個(gè)新的定義,也就是管理權(quán)限的最小單位,所有的管理權(quán)限都可以被當(dāng)成是對(duì)話題結(jié)構(gòu)的修改(重發(fā)布、移除、拆分、合并、添加精華標(biāo)記)。自此,話題成為公有區(qū)域和私有區(qū)域交接處。
轉(zhuǎn)載于:https://www.cnblogs.com/Ivony/archive/2008/10/31/1323388.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 全年月平均工作时间和工资折算办法
- 下一篇: perl里字符串取长度,比较等一些操作