華為云官網(wǎng)前端的技術(shù)演進(jìn)與低代碼實(shí)踐【全球軟件大會(huì)技術(shù)分享】
前端團(tuán)隊(duì)演進(jìn)往往會(huì)經(jīng)歷組件化、配置化、可視化的階段,而低代碼是團(tuán)隊(duì)演進(jìn)中的一個(gè)必然結(jié)果。
在第七屆全球軟件大會(huì)上,華為前端研發(fā)工程師郭曉,分享了華為云官網(wǎng)如何根據(jù)業(yè)務(wù)場景分階段構(gòu)建低代碼平臺(tái),提升頁面迭代效率的實(shí)踐心得, 以下是現(xiàn)場演講內(nèi)容速記。
前端團(tuán)隊(duì)面臨的三大難題
為什么低代碼一詞近期如此火熱,在日前的Qcon大會(huì)上也有5個(gè)以上低代碼相關(guān)的分享,根本原因還是近年來前端團(tuán)隊(duì)遇到的一些問題。
首先是頁面數(shù)量的激增, 根據(jù)IDC在2020年中國ICT市場趨勢論壇中發(fā)表的演講,近幾年,數(shù)字經(jīng)濟(jì)的發(fā)展將孕育出超過5億個(gè)新應(yīng)用/服務(wù),這與過去40年間出現(xiàn)的應(yīng)用數(shù)量相當(dāng)。數(shù)字經(jīng)濟(jì)的高速發(fā)展需要傳遞海量的信息,而前端頁面作為傳遞信息的一個(gè)重要途徑,數(shù)量也在激增。
其次是前端人力不足,早早聊大會(huì)近期針對(duì)535位團(tuán)隊(duì)主管進(jìn)行的一項(xiàng)調(diào)查顯示,這些團(tuán)隊(duì)年內(nèi)期望招聘總計(jì)超過9000名前端,但實(shí)際只招到了大約5000人,不到預(yù)期的60%,而且從人才市場的數(shù)據(jù)看,前端人力的增速從14年就開始逐步下降,前端的新鮮血液在逐年減少。需求變多,人力持平或減少,問題已經(jīng)非常明顯。
最后是需求激增帶來的運(yùn)維壓力, 前端業(yè)務(wù)需求大部分來自運(yùn)營和產(chǎn)品,和業(yè)務(wù)的強(qiáng)關(guān)聯(lián)性導(dǎo)致了需求的不穩(wěn)定性。 一個(gè)已上線的頁面很可能需要根據(jù)一個(gè)細(xì)微的調(diào)整重新走上線發(fā)布流程,耗時(shí)耗力。而且,頁面數(shù)量過多后,一些傳統(tǒng)的通過人力的內(nèi)容質(zhì)量檢查會(huì)非常吃力,上線頁面的質(zhì)量很難得到保障。
那么,在此背景下,團(tuán)隊(duì)如何進(jìn)行技術(shù)演進(jìn)?
技術(shù)演進(jìn)之路:從刀耕火種到可視化
最開始前端處于原始的“刀耕火種”階段,只要有html,css,js三大基座,頁面都能堆出來。漸漸的,我們開始把一些常用的方法抽成方法庫,通用的組件規(guī)整到組件庫,并且結(jié)合工程化思想進(jìn)行一些模塊的復(fù)用,即組件化階段。這個(gè)時(shí)期,雖然還是編寫代碼,但代碼的復(fù)用開始提升項(xiàng)目的效率。
組件化后期,我們發(fā)現(xiàn)在很多業(yè)務(wù)場景下,一些組件經(jīng)常組合在一起,組件庫中開始出現(xiàn)業(yè)務(wù)組件。比如頁面中經(jīng)常會(huì)有這樣的樓層,上方居中一個(gè)主標(biāo)題一個(gè)副標(biāo)題,下面幾個(gè)卡片,每個(gè)卡片有個(gè)背景圖然后一段描述。那我們就構(gòu)建這樣的大顆粒組件,方便復(fù)用。
隨著組件粒度的加大和業(yè)務(wù)組件的增多,新增簡單頁面需求所要寫的代碼會(huì)變的越來越少,經(jīng)常只需要引幾個(gè)組件,傳一些參數(shù)就行,因?yàn)楹芏噙壿嬕呀?jīng)封裝到組件里面。此時(shí),我們把組件和參數(shù)寫到配置文件中,再寫一套解析邏輯(渲染引擎),將配置文件中的內(nèi)容解析為目標(biāo)代碼。這樣,后續(xù)只需維護(hù)一個(gè)配置文件,初步進(jìn)入了配置化的階段。
在配置化階段,編寫DSL無需感知技術(shù)棧和業(yè)務(wù)流程,最終渲染的效果完全由渲染引擎控制。此時(shí)我們可以將配置文件的維護(hù)權(quán)限暴露出去給應(yīng)用側(cè)的開發(fā):我們維護(hù)渲染引擎,組件庫,由應(yīng)用側(cè)的開發(fā)維護(hù)配置文件。這樣就減少了團(tuán)隊(duì)和業(yè)務(wù)的耦合性,進(jìn)一步節(jié)約了人力。
考慮到應(yīng)用側(cè)不一定需要開發(fā),同時(shí)也為了應(yīng)用化的體驗(yàn),我們可以提供一個(gè)讓用戶拖拽組件并且編輯的頁面,將用戶在界面的操作結(jié)果轉(zhuǎn)為DSL,這樣最終用戶不需要感知DSL也能生成最終頁面。簡單的操作使得非開發(fā)也能掌握,于是漸漸形成了誰的需求誰自己實(shí)現(xiàn)的局面。
可以看到,我們?cè)陂_發(fā)流程中,不斷的抽取公共能力,并且抽象業(yè)務(wù)流程,最終達(dá)到了低代碼,無代碼的能力開放,極大的降低了前端團(tuán)隊(duì)的維護(hù)壓力。
業(yè)界有很多類似演進(jìn)的例子,至此,低代碼也慢慢進(jìn)入大家的視野。
低代碼平臺(tái)如何選型?
低代碼在海外起步較早,這個(gè)概念也是海外率先提出,outSystem和mendix等企業(yè)的低代碼平臺(tái)早已占據(jù)大半江山。國內(nèi)發(fā)展較晚,幾年前才有商用的低代碼平臺(tái),但如今已呈百家爭鳴之勢。
低代碼的“低”可以從兩方面理解:
一是應(yīng)用生產(chǎn)成本降低, 低代碼不僅是指開發(fā)過程中寫更少的代碼,也是指應(yīng)用部署成本等整體流程成本的降低。
二是應(yīng)用生產(chǎn)的技術(shù)門檻降低, 底層業(yè)務(wù)邏輯,技術(shù)棧的屏蔽使得非專業(yè)開發(fā)人員在簡單的IT培訓(xùn)后也能快速投入應(yīng)用生產(chǎn)。
那在低代碼浪潮中,一個(gè)前端團(tuán)隊(duì)如何選擇?
首先看前端團(tuán)隊(duì)是否一定需要低代碼平臺(tái)。據(jù)估計(jì),中小型企業(yè) 95%以上的場景可以用低代碼平臺(tái)搭建,而大中型企業(yè)也有70%以上的場景可以由低代碼平臺(tái)搭建。剛剛我們也提到,低代碼是前端團(tuán)隊(duì)技術(shù)演進(jìn)過程中一個(gè)必然結(jié)果,所以低代碼平臺(tái)是必須的。
問題隨之而來,是直接購買使用還是自研呢?我們從擴(kuò)展性、易用性和人力成本三個(gè)維度進(jìn)行了比較。
擴(kuò)展和易用性性方面,如果購買業(yè)界平臺(tái),只能使用它們暴露的平臺(tái)能力,雖然平臺(tái)會(huì)開放一些定制能力,但并不能滿足華為云官網(wǎng)復(fù)雜業(yè)務(wù)的需要。成本方面,從開發(fā)到上線整個(gè)流程的平臺(tái),包含了數(shù)據(jù)模型、UI、邏輯、流程的低代碼構(gòu)建,構(gòu)建的人力成本高。
如果團(tuán)隊(duì)規(guī)模較小或者業(yè)務(wù)場景較為統(tǒng)一或者團(tuán)隊(duì)還處于組件化階段,我建議使用業(yè)界平臺(tái),省時(shí)省力。
但如果團(tuán)隊(duì)較大,業(yè)務(wù)場景復(fù)雜,且團(tuán)隊(duì)演進(jìn)已經(jīng)在配置化或者可視化階段,那自研一套長久來看會(huì)更好。因?yàn)楫?dāng)企業(yè)或者組織發(fā)展到一定程度以后,一定會(huì)逐步放棄各種外購的部件,構(gòu)建自研能力,以適配自身組織的需要。
對(duì)于我們團(tuán)隊(duì)來說,考慮到擴(kuò)展性的重要性高于人力成本,因此我們選擇自研一套低代碼平臺(tái)。
那華為云官網(wǎng)是如何進(jìn)行低代碼實(shí)踐的?
華為云官網(wǎng)低代碼實(shí)踐
華為云官網(wǎng)主要包含三類頁面:
瀏覽類頁面, 如產(chǎn)品介紹頁、文檔頁,此類頁面的特點(diǎn)是以樓層為維度,頁面組件多以卡片、文字、圖片為主,樓層間相互獨(dú)立,交互也比較少,語言是基于xtpl的。
管理臺(tái)頁面, 如賬單中心,內(nèi)部管理頁,因?yàn)橐詧D表頁面為主,這類頁面的交互比較固定,包括搜索,增刪改查等,語言是vue。
購買類頁面, 如活動(dòng)頁、價(jià)格計(jì)算器,這類頁面多呈現(xiàn)產(chǎn)品規(guī)格,頁面交互比較復(fù)雜,語言同樣是vue的。
這其中,瀏覽類和管理臺(tái)類頁面大概占90%以上。
在低代碼實(shí)踐中,華為云官網(wǎng)的總體目標(biāo)是實(shí)現(xiàn)面向運(yùn)營和開發(fā)者的高效應(yīng)用生產(chǎn)平臺(tái),我們內(nèi)部稱作HPA,平臺(tái)的功能包含但不僅限于數(shù)據(jù)模型、邏輯、UI、流程的低代碼或者無代碼生成。
根據(jù)業(yè)務(wù)背景,我們將目標(biāo)初步分為兩個(gè)階段,首先是針對(duì)瀏覽類頁面,實(shí)現(xiàn)瀏覽類頁面的無碼化生成,同時(shí),構(gòu)建平臺(tái)能力,實(shí)現(xiàn)頁面從生產(chǎn)到發(fā)布的無碼化。
第二階段,針對(duì)管理臺(tái)類頁面,增強(qiáng)平臺(tái)的無碼化能力,將頁面的低代碼生成拓展到數(shù)據(jù)模型,邏輯和流程維度。
階段一:瀏覽類頁面低代碼化
最先低碼化的是瀏覽類頁面,因?yàn)檫@類頁面數(shù)量多,耗費(fèi)人力大,而且頁面構(gòu)成比較簡單,低代碼的成本相對(duì)較低。我們對(duì)于UI低代碼的構(gòu)建方式是先組件化,再配置化,最終實(shí)現(xiàn)可視化。
組件化
其中,組件化的關(guān)鍵在于處理頁面的共性和定制性。 瀏覽類頁面的共性是以樓層為維度,并且樓層間獨(dú)立。定制性在于部分頁面會(huì)有一些非樓層組件,比如浮窗或少許全局邏輯。
我們先按不同的定制性將頁面進(jìn)行分類,形成一些頁面模板,比如通用頁面模板以及其他一些產(chǎn)品頁面,新聞頁面的模板。頁面模板往往包含了頁頭頁尾,以及剛才提到的頁面定制邏輯,比如官網(wǎng)服務(wù)保障頁,用的就是只包含頁尾的通用頁面模板。
然后是處理共性部分,我們把頁面按樓層拆分,官網(wǎng)服務(wù)保障頁面可以由5類組件組成,組件2和3都是步驟條組件,可以復(fù)用。我們將頁面的定制性收編到不同的頁面模板中去,共性部分就是可以復(fù)用的一個(gè)個(gè)樓層組件。
配置化
組件化后,就是如何用配置化信息描述頁面。配置信息里包含頁面模板、頁面結(jié)構(gòu)、頁面數(shù)據(jù)和依賴信息。
頁面模板描述頁頭頁尾和頁面定制信息。頁面結(jié)構(gòu)描述用了哪些樓層組件以及組件的順序,用戶在畫布上拖拽組件或者刪除組件其實(shí)都是在修改頁面結(jié)構(gòu)文件。同時(shí),頁面結(jié)構(gòu)也記錄了樓層組件和頁面數(shù)據(jù)的關(guān)聯(lián)性。
頁面數(shù)據(jù)則是描述了樓層組件具體的配置數(shù)據(jù),用戶在畫布上的組件內(nèi)容編輯,就是在調(diào)整頁面數(shù)據(jù)。
最后加上樓層組件和三方件的版本依賴信息,再通過DSL渲染引擎就可以渲染出最終的html頁面
可視化
頁面配置化后,便是考慮最終用戶如何通過交互界面生成配置化信息。
下圖為頁面結(jié)構(gòu)編輯和頁面數(shù)據(jù)編輯的示意圖,頁面結(jié)構(gòu)編輯是從畫布左邊的組件市場中拖拽組件到頁面指定位置。其中組件市場的組件是通過本地IDE開發(fā)然后通過npm發(fā)布上傳。頁面數(shù)據(jù)編輯是點(diǎn)擊目標(biāo)組件后,在彈出的組件編輯框中進(jìn)行編輯操作,組件編輯框采用類似JSON-schema的語法定義在組件中,編輯完成后可以選擇發(fā)布,預(yù)覽等功能。
頁面訪問
發(fā)布時(shí),畫布會(huì)將頁面配置數(shù)據(jù)存放到后端數(shù)據(jù)庫,后續(xù)通過統(tǒng)一數(shù)據(jù)微服務(wù)調(diào)用。
在現(xiàn)網(wǎng)訪問時(shí),如果CDN失效回源,BFF會(huì)根據(jù)頁面url去統(tǒng)一數(shù)據(jù)微服務(wù)獲取當(dāng)前頁面的頁面配置,包含頁面模板,頁面數(shù)據(jù)以及依賴信息。然后根據(jù)依賴信息去OBS獲取對(duì)應(yīng)的樓層組件內(nèi)容,再根據(jù)BFF掛載的DSL渲染引擎渲染出最終頁面。
預(yù)覽態(tài)和運(yùn)行態(tài)的區(qū)別在于是否有CDN,然后這些數(shù)據(jù)信息都是前端傳給BFF的,不需要BFF去統(tǒng)一數(shù)據(jù)微服務(wù)取。
HPA平臺(tái)1.0
上面主要介紹了瀏覽類頁面從組件化到可視化過程以及最終運(yùn)行態(tài)的效果。但作為平臺(tái)能力,后臺(tái)和基礎(chǔ)設(shè)施的支撐也非常重要。
我們第一階段做出的HPA平臺(tái)的模塊圖主要有四層。
基礎(chǔ)設(shè)施層是華為云云服務(wù)、數(shù)據(jù)庫RDS、云搜索CSS、對(duì)象存儲(chǔ)OBS、Redis,分布式消息通知,一站式AI開發(fā)平臺(tái)ModelArts。
微服務(wù)層提供了用戶權(quán)限管理,配合工作流,消息通知指定該用戶可以編輯哪些頁面,編輯以后需要給誰審核;內(nèi)容質(zhì)量檢查和灰度測試作為頁面上線前的質(zhì)量和樣式風(fēng)格的報(bào)障;內(nèi)容管理就是上文提到的統(tǒng)一數(shù)據(jù)微服務(wù)接口。
數(shù)據(jù)中臺(tái)層是BFF根據(jù)url或者調(diào)用參數(shù)返回渲染好的頁面。
前端畫布層主要包含組件市場、資產(chǎn)管理、應(yīng)用管理、版本管理和頁面編輯。這里的應(yīng)用管理還比較狹義,只限于UI。版本管理功能主要提供了頁面的回退,對(duì)比等功能。
階段一總結(jié)
HPA1.0上線后,取得了顯著的效果。我們目前維護(hù)了大約100個(gè)樓層組件,也有些定制的樓層組件,基本上覆蓋了官網(wǎng)所有瀏覽類頁面。從運(yùn)營的使用量也可以看出對(duì)開發(fā)側(cè)的工作量減少,運(yùn)營人員平均大約在平臺(tái)中自助變更6000次。
而且,發(fā)布流程也大幅簡化,很多變更不需要再通過需求傳遞給開發(fā)再轉(zhuǎn)測上線,可以運(yùn)營自主操作,從天級(jí)下降到小時(shí)級(jí)。最后,自動(dòng)全面的內(nèi)容檢查也大幅提升了頁面的質(zhì)量。
在取得明顯成效的同時(shí),也必須注意到仍存在一些可優(yōu)化的點(diǎn)。比如DSL是為了渲染瀏覽類頁面,場景比較簡單,那后續(xù)處理管理臺(tái)類頁面會(huì)很吃力,需要增強(qiáng);其次,這100個(gè)樓層組件是需要開發(fā)在本地IDE維護(hù)的,相對(duì)發(fā)布周期依然較長;最后,缺乏無碼化的流程編排能力,如果新增權(quán)限組配置流程復(fù)雜。
因此,我們繼續(xù)進(jìn)入階段二,以管理臺(tái)頁面低代碼為業(yè)務(wù)目的,增強(qiáng)平臺(tái)能力。
階段二:管理臺(tái)類頁低代碼化
組件化
管理臺(tái)頁面是目前國內(nèi)低代碼平臺(tái)支持較多的一種頁面類型,下圖是一個(gè)簡單的管理臺(tái)頁面的例子,圖中部分信息做了隱藏。
主體是一個(gè)表格,下面有分頁組件,上面是新增和搜索,表格內(nèi)有查、改、刪的按鈕。頁面特點(diǎn)在于組件種類相對(duì)固定,一般有表格、搜索、分頁、彈窗、按鈕和圖組件。而且基礎(chǔ)邏輯比較固定,可以泛化為針對(duì)底層數(shù)據(jù)模型的增刪改查。它的定制性在于增刪改查接口的差異性和頁面的一些定制功能。
對(duì)于共性部分,我們可以提供上述提到的頁面組件,并且提供統(tǒng)一的數(shù)據(jù)處理方法;甚至可以按默認(rèn)邏輯組合起來形成一個(gè)大而全的業(yè)務(wù)組件。
對(duì)于定制性部分,如果定制較少,可以通過業(yè)務(wù)組件暴露一定的定制能力。較多的話,只能使用提供的獨(dú)立組件自行拼接邏輯。所以管理臺(tái)類頁面的組件化可以分為用統(tǒng)一的業(yè)務(wù)組件或者使用基礎(chǔ)頁面組件自行拼裝邏輯。
配置化
管理臺(tái)頁面所需要的配置信息和瀏覽類類似,只是將頁面結(jié)構(gòu)和頁面數(shù)據(jù)做了合并。為了增加渲染引擎的泛化性,我們將兩種不同場景的組件化在DSL層做統(tǒng)一。
首先,為了支持通用場景,我們引入了自定義布局,用于表達(dá)頁面的復(fù)雜樣式;其次,借鑒json-schema遞歸的數(shù)據(jù)結(jié)構(gòu),標(biāo)識(shí)組件的父子關(guān)系。然后引入了functionList去表達(dá)此組件會(huì)觸發(fā)的事件,建立組件關(guān)聯(lián)性;最后,除了components,我們還有jsapi模塊去表示頁面邏輯。
可視化
這么復(fù)雜的DSL肯定不能直接暴露給最終用戶,所以我們?cè)诳梢暬A段提供了組件設(shè)計(jì)器,可以先由業(yè)務(wù)側(cè)開發(fā)在組件設(shè)計(jì)器上設(shè)計(jì)出所需的大顆粒組件,再暴露給最終用戶。
在可視化階段,除了瀏覽類頁面階段構(gòu)建的頁面設(shè)計(jì)外,我們還提供了數(shù)據(jù)模型設(shè)計(jì)和組件設(shè)計(jì)。
數(shù)據(jù)模型設(shè)計(jì)整體是為了滿足實(shí)現(xiàn)統(tǒng)一的增刪改查接口。其中包含兩部分,一部分是數(shù)據(jù)模型的無碼化生成,一部分是邏輯的低碼化生成。它的構(gòu)建可以看做定義表單,對(duì)于一個(gè)表單,有通用的接口可以滿足增刪改查、排序過濾等接口能力,也可以通過邏輯構(gòu)建自定義。
這里需要強(qiáng)調(diào)一下組件設(shè)計(jì),對(duì)有定制訴求的業(yè)務(wù)可以自行修改組件,然后發(fā)布到組件市場中,供最終用戶在頁面設(shè)計(jì)時(shí)使用。
在設(shè)計(jì)器的場景中,數(shù)據(jù)模型創(chuàng)建可以填寫數(shù)據(jù)模型相關(guān)信息、表單信息,包含了表單字段,字段類型,是否必填等。新增按鈕以后就會(huì)在后臺(tái)數(shù)據(jù)庫創(chuàng)建此表單結(jié)構(gòu)。
另外,表格設(shè)計(jì)器中我們會(huì)先預(yù)置一個(gè)大而全的業(yè)務(wù)組件,業(yè)務(wù)側(cè)可以在此基礎(chǔ)上進(jìn)行修改,可能會(huì)存在需要自定義function的情況。
到頁面設(shè)計(jì)階段,組件市場除了本來的樓層組件外,又多了UI組件、流程組件、邏輯組件等其他選擇,在這里可以選取到從表格設(shè)計(jì)器發(fā)布的組件,也就是說組件的發(fā)布可以不僅僅通過本地IDE開發(fā),也可以在頁面配置生成,大大縮短了發(fā)布流程。
階段二總結(jié)
HPA2.0平臺(tái)整體還在需求迭代中,很多業(yè)務(wù)已經(jīng)接入,但具體數(shù)據(jù)目前還未放出。但是2.0階段我們?cè)鰪?qiáng)了我們的DSL渲染引擎,使得復(fù)雜的購買類頁面,比如價(jià)格計(jì)算器進(jìn)入了配置化階段,代碼量減少70%,變更時(shí)間也從天級(jí)降為小時(shí)級(jí)。
另外,我們?cè)跇?gòu)建管理臺(tái)類頁面低代碼生成的同時(shí),也實(shí)現(xiàn)了數(shù)據(jù)模型、邏輯等模塊的低代碼/無代碼生成,并發(fā)現(xiàn)這些能力可以獨(dú)立或者組合使用。
比如可以用全功能:新建一個(gè)應(yīng)用,從新建數(shù)據(jù)結(jié)構(gòu)開始,到配置頁面,選擇數(shù)據(jù)源直至發(fā)布;也可以只配API模塊,快速暴露后臺(tái)接口;或者對(duì)接自己的數(shù)據(jù)源,只配置頁面并發(fā)布,配置部分頁面并集成到已有工程中,暴露為組件,集成到單個(gè)頁面中。
結(jié)語
低/無碼化是前端團(tuán)隊(duì)演進(jìn)的一個(gè)必然結(jié)果,各團(tuán)隊(duì)?wèi)?yīng)根據(jù)自身團(tuán)隊(duì)需要自研或者購買業(yè)界低代碼平臺(tái)。并且在初期就明確好低代碼平臺(tái)的定位:是解決團(tuán)隊(duì)自身的業(yè)務(wù)痛點(diǎn)還是后續(xù)商用,前者重定制性,后者重通用性,結(jié)合業(yè)務(wù)各取所需。
福利
看完華為云官網(wǎng)的前端低代碼實(shí)踐,大家是否有收獲或者有問題想交流呢,歡迎在評(píng)論區(qū)留下你的問題或感想,我們將抽取3條,請(qǐng)專家與你1V1交流, 并且送出開發(fā)者大禮包一份。
本次,還有兩位華為的專家給大家?guī)怼度A為云官網(wǎng)智能化實(shí)踐的五大關(guān)鍵舉措》和《華為云官網(wǎng)高可用保障體系工程化方案及實(shí)踐》的分享,他們也回答了開發(fā)者關(guān)心的問題,例如內(nèi)容智能推薦的幾點(diǎn)心得、網(wǎng)站高可用保障的最佳方案等等。歡迎掃碼觀看視頻, 演講全文后續(xù)也會(huì)發(fā)布在云社區(qū),大家敬請(qǐng)期待。
最后,附上華為前端研發(fā)工程師郭曉在本次全球軟件大會(huì)上的技術(shù)分享PPT, 文末可點(diǎn)擊下載。
附件: 華為云官網(wǎng)前端低代碼實(shí)踐.pdf 1.62MB 下載次數(shù):49次
web前端
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。