追光幾何前端可復(fù)用內(nèi)容體系簡(jiǎn)介
背景
用過(guò)追光幾何產(chǎn)品的朋友們應(yīng)該知道,追光幾何主打圖紙管理和在線看圖。
也許大家還沒(méi)注意,我們基于核心功能,默默地做了一些衍生應(yīng)用,在越來(lái)越多的企業(yè)落地。如用于圖紙審批流轉(zhuǎn)場(chǎng)景的審批應(yīng)用:


由于衍生應(yīng)用是基于核心功能開(kāi)發(fā)的,隨著衍生應(yīng)用的增多,必然會(huì)在不同應(yīng)用間出現(xiàn)相似的內(nèi)容,如文件標(biāo)注評(píng)論、文件列表、圖紙預(yù)覽等,既出現(xiàn)在了上述審批應(yīng)用場(chǎng)景,也出現(xiàn)在了追光幾何主應(yīng)用。
而相似內(nèi)容的復(fù)用問(wèn)題,不僅會(huì)影響研發(fā)的開(kāi)發(fā)效率,更會(huì)影響用戶的一致性體驗(yàn)。
一種辦法是復(fù)制粘貼,但這會(huì)導(dǎo)致代碼的可維護(hù)性變差,當(dāng)后續(xù)產(chǎn)生需求變更,有多少地方使用就得改多少地方,也產(chǎn)生了較大的測(cè)試回歸和體驗(yàn)一致性的風(fēng)險(xiǎn)。
另一種解法,對(duì)研發(fā)同學(xué)其實(shí)十分自然:把內(nèi)容抽成一個(gè)可引用的包(package)。
制作一個(gè)包,往往會(huì)涉及到一些研發(fā)流程,比如開(kāi)發(fā)、測(cè)試、demo 撰寫(xiě)、構(gòu)建、發(fā)布等,需要一套技術(shù)工具鏈的支撐。
如果僅僅制作一個(gè)包還好,但是前面也提到,有不少內(nèi)容是跨應(yīng)用間共用的,甚至在網(wǎng)頁(yè)端和桌面端,也存在許多共用內(nèi)容,比如項(xiàng)目列表、分支視圖等。若每個(gè)包都要維護(hù)一套單獨(dú)的技術(shù)工具鏈,其維護(hù)成本是可想而知的。因此,如何將技術(shù)工具鏈統(tǒng)一起來(lái),是一個(gè)問(wèn)題。
你可能會(huì)說(shuō),咱可以把不同內(nèi)容放到同一個(gè)倉(cāng)庫(kù)里,再把工具鏈放進(jìn)去共用不就行了?這樣會(huì)存在一些問(wèn)題,放進(jìn)去的內(nèi)容只是一個(gè)沒(méi)有版本記錄的文件,出問(wèn)題時(shí)無(wú)法快速回滾。并且外部依賴的時(shí)候,也無(wú)法做到有效的按需依賴,會(huì)導(dǎo)致依賴體積過(guò)大。
因此我們需要一種既能把內(nèi)容放在一起管理,又能針對(duì)某個(gè)內(nèi)容進(jìn)行獨(dú)立發(fā)包的技術(shù):monorepo。
簡(jiǎn)介
追光幾何基于 pnpm workspace(一種 monorepo 技術(shù)),在此基礎(chǔ)上搭建了統(tǒng)一的內(nèi)容研發(fā)工具鏈,開(kāi)發(fā)了一系列用于各類場(chǎng)景的 基礎(chǔ)內(nèi)容 及 業(yè)務(wù)內(nèi)容,進(jìn)而優(yōu)化了研發(fā)、測(cè)試效率,并提升了交互視覺(jué)的一致性。
我們先通過(guò)一張架構(gòu)圖,來(lái)對(duì)內(nèi)容復(fù)用體系建立一個(gè)整體的認(rèn)知。其中上層的 基礎(chǔ) 和 業(yè)務(wù) 聚焦內(nèi)容部分,最底層是研發(fā)工具鏈:

底層研發(fā)工具鏈
為什么需要研發(fā)工具鏈支撐呢?前文也提到過(guò),一方面是因?yàn)閮?nèi)容的研發(fā)本身有一定的流程,需要技術(shù)工具支撐;另一方面因?yàn)閮?nèi)容涉及到協(xié)同開(kāi)發(fā),需要一些技術(shù)支撐讓整個(gè)研發(fā)協(xié)同鏈路更加順暢和高效。
這里簡(jiǎn)單介紹一下追光幾何可復(fù)用內(nèi)容研發(fā)流程以及對(duì)應(yīng)的底層技術(shù)支撐:

可復(fù)用內(nèi)容
可復(fù)用內(nèi)容是指:可以被多處使用的同一份視圖、邏輯或兩者的結(jié)合(組件)。為了方便理解,以下主要以組件展開(kāi)。
一般來(lái)說(shuō),依賴越少,職責(zé)越單一,則越便于復(fù)用。拿現(xiàn)實(shí)世界舉例,金屬可以被用在海量場(chǎng)景,生產(chǎn)為剪刀后可以用于剪紙、拆快遞等少量場(chǎng)景,組裝為火箭后則只能用于航天這一場(chǎng)景。
同樣,組件也可以按照復(fù)用性的程度來(lái)劃分,分為基礎(chǔ)組件(可復(fù)用度高)和業(yè)務(wù)組件(可復(fù)用度低)。
一個(gè)頁(yè)面就是由若干基礎(chǔ)組件+業(yè)務(wù)組件組成的,基礎(chǔ)組件和業(yè)務(wù)組件之間有單向依賴性:業(yè)務(wù)組件 依賴 基礎(chǔ)組件。這種依賴關(guān)系原則,本質(zhì)是因?yàn)榛A(chǔ)組件具有更好的可復(fù)用性,如果倒過(guò)來(lái)依賴業(yè)務(wù)組件,業(yè)務(wù)是易變的,就會(huì)使其喪失易復(fù)用的特性。
為了平衡研發(fā)成本和設(shè)計(jì)體驗(yàn),追光幾何基于 ant design 定制了一套風(fēng)格及組件。


與追光幾何產(chǎn)品調(diào)性相輔相成,秉承清晰、一致、多元、高效的設(shè)計(jì)價(jià)值觀。一個(gè)有效的組件庫(kù),有利于提高設(shè)計(jì)師和開(kāi)發(fā)人員的工作效率以及團(tuán)隊(duì)協(xié)作效率,提升設(shè)計(jì)專業(yè)度的同時(shí)讓產(chǎn)品本身的體驗(yàn)更加一致、易學(xué)、易用,它具備一致的、高效的、靈活的特征。
而業(yè)務(wù)組件則基于基礎(chǔ)組件,結(jié)合追光幾何的特色業(yè)務(wù)場(chǎng)景,做了深度定制開(kāi)發(fā)。例如分享彈窗,就在云端、審批、知識(shí)庫(kù)多處場(chǎng)景出現(xiàn),共用同一個(gè)業(yè)務(wù)組件,提升了代碼的可維護(hù)性,并穩(wěn)固了一致的交互體驗(yàn):

總結(jié)
可以看到,通過(guò)可復(fù)用內(nèi)容體系,在研發(fā)層面大大提升了效率和可維護(hù)性,在應(yīng)用層面也提升了體驗(yàn)一致性和功能穩(wěn)定性,為追光幾何的穩(wěn)步發(fā)展保駕護(hù)航。
未來(lái),我們會(huì)繼續(xù)迭代優(yōu)化該系統(tǒng),補(bǔ)充更多的優(yōu)質(zhì)內(nèi)容,給研發(fā)和用戶帶來(lái)更好的體驗(yàn)。敬請(qǐng)期待!