阿里前端開發(fā)規(guī)范_第1頁
阿里前端開發(fā)規(guī)范_第2頁
阿里前端開發(fā)規(guī)范_第3頁
阿里前端開發(fā)規(guī)范_第4頁
阿里前端開發(fā)規(guī)范_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

阿里前端開發(fā)規(guī)范前端代碼規(guī)范 3 (一)命名規(guī)范 31.1.1項(xiàng)目命名 31.1.2目錄命名 31.1.3JS、CSS、SCSS、HTML、PNG文件命名 41.1.4命名嚴(yán)謹(jǐn)性 4(二)HTML規(guī)范(VueTemplate同樣適用) 41.2.1HTML類型 41.2.2縮進(jìn) 51.2.3分塊注釋 51.2.4語義化標(biāo)簽 51.2.5引號 5(三)CSS規(guī)范 61.3.1命名 61.3.2選擇器 61.3.3盡量使用縮寫屬性 71.3.4每個(gè)選擇器及屬性獨(dú)占一行 71.3.5省略0后面的單位 81.3.6避免使用ID選擇器及全局標(biāo)簽選擇器防止污染全局樣式 8(四)LESS規(guī)范 91.4.1代碼組織 91.4.2避免嵌套層級過多 9(五)Javascript規(guī)范 101.5.1命名 101.5.2代碼格式 121.5.3字符串 121.5.4對象聲明 131.5.5使用ES6+ 131.5.6括號 131.5.7undefined判斷 141.5.8條件判斷和循環(huán)最多三層 141.5.9this的轉(zhuǎn)換命名 141.5.10慎用console.log 14Vue項(xiàng)目規(guī)范 14(一)Vue編碼基礎(chǔ) 142.1.1.組件規(guī)范 152.1.2.模板中使用簡單的表達(dá)式 192.1.3指令都使用縮寫形式 192.1.4標(biāo)簽順序保持一致 202.1.5必須為v-for設(shè)置鍵值key 202.1.6v-show與v-if選擇 202.1.7script標(biāo)簽內(nèi)部結(jié)構(gòu)順序 202.1.8VueRouter規(guī)范 20(二)Vue項(xiàng)目目錄規(guī)范 232.2.1基礎(chǔ) 232.2.2使用Vue-cli腳手架 232.2.3目錄說明 232.2.4注釋說明 272.2.5其他 27前端代碼規(guī)范規(guī)范的目的是為了編寫高質(zhì)量的代碼,讓你的團(tuán)隊(duì)成員每天得心情都是愉悅的,大家在一起是快樂的。引自《阿里規(guī)約》的開頭片段:現(xiàn)代軟件架構(gòu)的復(fù)雜性需要協(xié)同開發(fā)完成,如何高效地協(xié)同呢?無規(guī)矩不成方圓,無規(guī)范難眾的人身安全,試想如果標(biāo)準(zhǔn)絕不是消滅代碼內(nèi)容是盡可能少踩坑,杜絕踩重復(fù)的坑,切實(shí)提升系統(tǒng)穩(wěn)定性,碼出質(zhì)量。一.編程規(guī)約(一)命名規(guī)范全部采用小寫方式,以中線分隔。正例:mall-management-system反例:mall_management-system/mallManagementSystem全部采用小寫方式,以中劃線分隔,有復(fù)數(shù)結(jié)構(gòu)時(shí),要采用復(fù)數(shù)命名法,縮寫不用復(fù)數(shù)。正例:scripts/styles/components/images/utils/layouts/demo-styles/demo-scripts/img/doc反例:script/style/demo_scripts/demoStyles/imgs/docs【特殊】VUE的項(xiàng)目中的components中的組件目錄,使用kebab-case命名。正例:head-search/loading/authorized/notice-icon【特殊】VUE的項(xiàng)目中的除components組件目錄外的所有目錄也使用kebab-case命名。正例:one/shopping-car/user-managementoppingCarUserManagement全部采用小寫方式,以中劃線分隔。正例:render-dom.js/signup.css/index.html/company-logo.png反例:renderDom.js/UserManagement.html代碼中的命名嚴(yán)禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。說明:正確的英文拼寫和語法可以讓閱讀者易于理解,避免歧義。注意,即使純拼音命名方式也要避免采用正例:henan/luoyang/rmb等國際通用的名稱,可視同英文反例:DaZhePromotion[打折]/getPingfenByName()[評分]/int某變量=3杜絕完全不規(guī)范的縮寫,避免望文不知義:反例:AbstractClass“縮寫”命名成AbsClass;condition“縮寫”命名成condi,此類隨意縮寫嚴(yán)重降低了代碼的可閱讀性。(二)HTML規(guī)范(VueTemplate同樣適用)1.2.1HTML類型推薦使用HTML5的文檔類型申明:application/xhtml+xml在瀏覽器中的應(yīng)用支持與優(yōu)化空間都十分有限)。規(guī)定字符編碼IE兼容模式規(guī)定字符編碼doctype大寫正例:<<!DOCTYPEhtml><html><head><metahttp-equiv="X-UA-Compatible"content="IE=Edge"/><metacharset="UTF-8"/><title>Pagetitle</title></head><body><imgsrc="images/company-logo.png"alt="Company"></body></html>1.2.2縮進(jìn)縮進(jìn)使用2個(gè)空格(一個(gè)tab);嵌套的節(jié)點(diǎn)應(yīng)該縮進(jìn)。在每一個(gè)塊狀元素,列表元素和表格元素后,加上一對HTML注釋。1.2.4語義化標(biāo)簽HTML5中新增很多語義化標(biāo)簽,所以優(yōu)先使用語義化標(biāo)簽,避免一個(gè)頁面都是div或者p標(biāo)簽。正例<<header></header><footer></footer>反例<<div><p></p></div>使用雙引號("")而不是單引號(’')。正例:<divclass=”box”></div>反例:<divclass=’box’></div>(三)CSS規(guī)范1.3.1命名類名使用小寫字母,以中劃線分隔id采用駝峰式命名scss中的變量、函數(shù)、混合、placeholder采用駝峰式命名ID和class的名稱總是使用可以反應(yīng)元素目的和用途的名稱,或其他通用的名稱,代替表象和晦澀難懂的名稱。不推薦:..fw-800{font-weight:800;}.red{color:red;}推薦:..heavy{font-weight:800;}.important{color:red;}1.3.2選擇器1)css選擇器中避免使用標(biāo)簽名從結(jié)構(gòu)、表現(xiàn)、行為分離的原則來看,應(yīng)該盡量避免css中出現(xiàn)HTML標(biāo)簽,并且在css選擇器中出現(xiàn)標(biāo)簽名會存在潛在的問題。2)使用直接子選擇器很多前端開發(fā)人員寫選擇器鏈的時(shí)候不使用直接子選擇器(注:直接子選擇器和后代選擇器的區(qū)別)。有時(shí),這可能會導(dǎo)致疼痛的設(shè)計(jì)問題并且有時(shí)候可能會很耗性能。然而,在任何情況下,這是一個(gè)非常不好的做法。如果你不寫很通用的,需要匹配到DOM末端的選擇器,你應(yīng)該總是考慮直接子選擇器。不推薦:..content.title{font-size:2rem;}推薦:..content>.title{font-size:2rem;}1.3.3盡量使用縮寫屬性不推薦:borderborder-top-style:none;font-family:palatino,georgia,serif;font-size:100%;line-height:1.6;padding-bottom:2em;padding-left:1em;padding-right:1em;padding-top:0;推薦:borderborder-top:0;font:100%/1.6palatino,georgia,serif;padding:01em2em;1.3.4每個(gè)選擇器及屬性獨(dú)占一行不推薦:buttonbutton{width:100px;height:50px;colorcolor:#fff;background:#00a0e9;}推薦:buttonbutton{width:100px;height:50px;color:#fff;background:#00a0e9;}不不推薦:div{padding-bottom:0px;margin:0em;}推薦:divdiv{padding-bottom:0;margin:0;}ID及全局標(biāo)簽選擇器防止污染全局樣式不推薦:##header{padding-bottom:0px;margin:0em;}推薦:..header{padding-bottom:0px;margin:0em;}(四)LESS規(guī)范1.4.1代碼組織例://color.less,common.less2)按以下順序組織t2、變量聲明;3、樣式聲明;@@import"mixins/size.less";@default-text-color:#333;.page{width:960px;margin:0auto;}1.4.2避免嵌套層級過多將嵌套深度限制在3級。對于超過4級的嵌套,給予重新評估。這可以避免出現(xiàn)過于詳實(shí)的CSS選擇器。避免大量的嵌套規(guī)則。當(dāng)可讀性受到影響時(shí),將之打斷。推薦避免出現(xiàn)多于20行的嵌套規(guī)則出現(xiàn)。不推薦:..main{.title{.name{color:#fff;}}}推薦:..main-title{.name{color:#fff;}}(五)Javascript規(guī)范1.5.1命名不能以下劃線或美元符號結(jié)束反例:_name/name_/name$,必須遵從駝峰形式正例:localValue/getHttpMessage()/inputUserId*其中method方法命名必須是動詞或者動詞+名詞形式*正例:saveShopCarData/openShopCarInfoDialog反例:save/open/show/go*特此說明,增刪查改,詳情統(tǒng)一使用如下5個(gè)單詞,不得使用其他(目的是為了統(tǒng)一各個(gè)端)addadd/update/delete/detail/get常用的動詞:get獲取/set設(shè)置,add增加/remove刪除,create創(chuàng)建/destory銷毀,start啟動/stop停止,open打開/close關(guān)閉,read讀取/write寫入,load載入/save保存,begin開始/end結(jié)束,backup備份/restore恢復(fù),import導(dǎo)入/export導(dǎo)出,split分割/merge合并,injectinject注入/extract提取,attach附著/detach脫離,bind綁定/separate分離,view查看/browse瀏覽,edit編輯/modify修改,select選取/mark標(biāo)記,copy復(fù)制/paste粘貼,undo撤銷/redo重做,insert插入/delete移除,add加入/append添加,clean清理/clear清除,index索引/sort排序,find查找/search搜索,increase增加/decrease減少,play播放/pause暫停,launch啟動/run運(yùn)行,compile編譯/execute執(zhí)行,debug調(diào)試/trace跟蹤,observe觀察/listen監(jiān)聽,build構(gòu)建/publish發(fā)布,input輸入/output輸出,encode編碼/decode解碼,encrypt加密/decrypt解密,compress壓縮/decompress解壓縮,pack打包/unpack解包,parse解析/emit生成,connect連接/disconnect斷開,send發(fā)送/receive接收,download下載/upload上傳,refresh刷新/synchronize同步,update更新/revert復(fù)原,lock鎖定/unlock解鎖,checkout簽出/checkin簽入,submit提交/commit交付,push推/pull拉,expand展開/collapse折疊,enter進(jìn)入/exit退出,abort放棄/quit離開,obsolete廢棄/depreciate廢舊,collect收集/aggregate聚集達(dá)完整清楚,反例:MAX_COUNT1.5.2代碼格式1)使用2個(gè)空格進(jìn)行縮進(jìn)正例:ifif(x<y){x+=10;}else{x+=1;}說明:任何情形,沒有必要插入多個(gè)空行進(jìn)行隔開。統(tǒng)一使用單引號(‘),不使用雙引號(“)。這在創(chuàng)建HTML字符串非常有好處:正例:letletstr='foo';lettestDiv='<divid="test"></div>';反例:letletstr='foo';lettestDiv="<divid='test'></div>";1.5.4對象聲明1)使用字面值創(chuàng)建對象反例:letuser=newObject();2)使用字面量來代替對象構(gòu)造器正例:varvaruser={age:0,name:1,city:3反例:varvaruser=newObject();user.age=0;=0;user.city=0;1.5.5使用ES6+必須優(yōu)先使用ES6+中新增的語法糖和函數(shù)。這將簡化你的程序,并讓你的代碼更加靈活和可復(fù)1.5.6括號下列關(guān)鍵字后必須有大括號(即使代碼塊的內(nèi)容只有一行):if,else,for,while,do,switch,try,catch,finally,with。正例:ifif(condition){doSomething();}反例:ifif(condition)doSomething();1.5.7undefined判斷永遠(yuǎn)不要直接使用undefined進(jìn)行變量判斷;使用typeof和字符串’undefined’對變量進(jìn)行判斷。正例:ifif(typeofperson==='undefined'){...}反例:ifif(person===undefined){...}1.5.8條件判斷和循環(huán)最多三層條件判斷能使用三目運(yùn)算符和邏輯運(yùn)算符解決的,就不要使用條件判斷,但是謹(jǐn)記不要寫太長的三目運(yùn)算符。如果超過3層請抽成函數(shù),并寫清楚注釋。1.5.9this的轉(zhuǎn)換命名對上下文this的引用只能使用’self’來命名。1.5.10慎用console.log因console.log大量使用會有性能問題,所以在非webpack項(xiàng)目中謹(jǐn)慎使用log功能。二、Vue項(xiàng)目規(guī)范(一)Vue編碼基礎(chǔ)vue項(xiàng)目規(guī)范以Vue官方規(guī)范(/v2/style-guide/)中的A規(guī)范為基礎(chǔ),在其上面進(jìn)行項(xiàng)目開發(fā),故所有代碼均遵守該規(guī)范。請仔仔細(xì)細(xì)閱讀Vue官方規(guī)范,切記,此為第一步。2.1.1.組件規(guī)范1)組件名為多個(gè)單詞組件名應(yīng)該始終是多個(gè)單詞組成(大于等于2),且命名規(guī)范為kebab-case格式。這樣做可以避免跟現(xiàn)有的以及未來的HTML元素相沖突,因?yàn)樗械腍TML元素名稱都是單個(gè)單詞的。正例:exportexportdefault{name:'TodoItem'//...反例:exportexportdefault{name:'Todo',//...}exportdefault{name:'todo-item',//...}2)組件文件名為pascal-case格式正例:components/my-component.vue反例:components/myComponent.vueMyComponent.vue3)基礎(chǔ)組件文件名為base開頭,正例:使用完整單詞而不是縮寫components/base-button.vue|-|-base-table.vue|-base-icon.vue反例:componentscomponents/|-MyButton.vueVueTablevueconvue4)和父組件緊密耦合的子組件應(yīng)該以父組件名作為前綴命名正例:componentscomponents/|-todo-list.vue|-todo-list-item.vue|-todo-list-item-button.vue|-user-profile-options.vue(完整單詞)反例:componentscomponents/Listvue-TodoItem.vue|-TodoButton.vue|-UProfOpts.vue(使用了縮寫)5)在Template模版中使用組件,應(yīng)使用PascalCase模式,并且使用正例:<!--在單文件組件、字符串模板和JSX中--><<MyComponent/><Row><table:column="data"/></Row>反例:<<my-component/><row><table:column="data"/></row>6)組件的data必須是一個(gè)函數(shù)當(dāng)在組件中使用data屬性的時(shí)候(除了newVue外的任何地方),它的值必須是返回一個(gè)對象的函數(shù)。因?yàn)槿绻苯邮且粋€(gè)對象的話,子組件之間的屬性值會互相影響。正例:exportexportdefault{data(){return{name:'jack'}}}反例:exportexportdefault{data:{name:'jack'}}7)Prop定義應(yīng)該盡量詳細(xì)必須使用camelCase駝峰命名必須指定類型必須加上注釋,表明其含義必須加上required或者default,兩者二選其一如果有業(yè)務(wù)需要,必須加上validator驗(yàn)證正例:propsprops:{//組件狀態(tài),用于控制組件的顏色status:{type:String,dtruevalidator:function(value){return['succ','info','error'].indexOf(value)!==-1}//用戶級別,用于顯示皇冠個(gè)數(shù)rLeveltype:String,}}8)為組件樣式設(shè)置作用域正例:<<template><buttonclass="btnbtn-close">X</button></template><!--使用`scoped`特性--><stylescoped>.btn-close{background-color:red;}</style>反例:<<template><buttonclass="btnbtn-close">X</button></template><!--沒有使用`scoped`特性--><style>.btn-close{background-color:red;}</style>9)如果特性元素較多,應(yīng)該主動換行正例:<<MyComponentfoo="a"bar="b"baz="c"foo="a"bar="b"baz="c"foo="a"bar="b"baz="c"/>反例:<MyComponentfoo="a"bar="b"baz="c"foo="a"bar="b"baz="c"foo="a"bar="b"baz="c"foo="a"bar="b"baz="c"/>2.1.2.模板中使用簡單的表達(dá)式組件模板應(yīng)該只包含簡單的表達(dá)式,復(fù)雜的表達(dá)式則應(yīng)該重構(gòu)為計(jì)算屬性或方法。復(fù)雜表達(dá)式會讓你的模板變得不那么聲明式。我們應(yīng)該盡量描述應(yīng)該出現(xiàn)的是什么,而非如何計(jì)算那個(gè)值。而且計(jì)算屬性和方法使得代碼可以重用。正例:<<template><p>{{normalizedFullName}}</p></template>//復(fù)雜表達(dá)式已經(jīng)移入一個(gè)計(jì)算屬性omputednormalizedFullName:function(){returnthis.fullName.split('').map(function(word){returnword[0].toUpperCase()+word.slice(1)}).join('')}}反例:<<template><p>fullName.split('').map(function(word){returnword[0].toUpperCase()+word.slice(1)}).join('')</p></template>2.1.3指令都使用縮寫形式指令推薦都使用縮寫形式,(用:表示v-bind:、用@表示v-on:和用#表示v-slot:)正例:<<input@input="onInput"@focus="onFocus">反例:<<inputvv-on:input="onInput"@focus="onFocus">2.1.4標(biāo)簽順序保持一致單文件組件應(yīng)該總是讓標(biāo)簽順序保持為`正例:<<template>...</template><script>...</script><style>...</style>反例:<<template>...</template><style>...</style><script>...</script>2.1.5必須為v-for設(shè)置鍵值key2.1.6v-show與v-if選擇如果運(yùn)行時(shí),需要非常頻繁地切換,使用v-show;如果在運(yùn)行時(shí),條件很少改變,使用v-if。2.1.7script標(biāo)簽內(nèi)部結(jié)構(gòu)順序name>components>mixins>props>data>computed>watch>filter>鉤子函數(shù)(鉤子函數(shù)按其執(zhí)行順序)>methods2.1.8VueRouter規(guī)范1)頁面跳轉(zhuǎn)數(shù)據(jù)傳遞使用路由參數(shù)頁面跳轉(zhuǎn),例如A頁面跳轉(zhuǎn)到B頁面,需要將A頁面的數(shù)據(jù)傳遞到B頁面,推薦使用路由參數(shù)進(jìn)行傳參,而不是將需要傳遞的數(shù)據(jù)保存vuex,然后在B頁面取出vuex的數(shù)據(jù),因?yàn)槿绻贐頁面刷新會導(dǎo)致vuex數(shù)據(jù)丟失,導(dǎo)致B頁面無法正常顯示數(shù)據(jù)。正例:letletid='123';this.$router.push({name:'userCenter',query:{id:id}});2)使用路由懶加載(延遲加載)機(jī)制{{path:'/uploadAttachment',name:'uploadAttachment',meta:{title:'上傳附件'component:()=>import('@/view/components/uploadAttachment/index.vue')3)router中的命名規(guī)范path、childrenPoints命名規(guī)范采用kebab-case命名規(guī)范(盡量vue文件的目錄結(jié)構(gòu)保持一致,因?yàn)槟夸?、文件名都是kebab-case,這樣很方便找到對應(yīng)的文件)name命名規(guī)范采用kebab-case命名規(guī)范且和component組件名保持一致!(因?yàn)橐3謐eep-alive特性,keep-alive按照component的name進(jìn)行緩存,所以兩者必須高度保持一致)///動態(tài)加載exportconstreload=[{path:'/reload',name:'reload',component:Main,meta:{title:'動態(tài)加載',icon:'iconiconfont'children:[{path:'/reload/smart-reload-list',tReloadListmeta:{title:'SmartReload',childrenPoints:[{title:'查詢',name:'smart-reload-search'{titletitle:'執(zhí)行reload',name:'smart-reload-update'{title:'查看執(zhí)行結(jié)果',name:'smart-reload-result'component:()=>import('@/views/reload/smart-reload/smart-reload-list.vue')4)router中的path命名規(guī)范path除了采用kebab-case命名規(guī)范以外,必須以/開頭,即使是children里的path也要以/開hparent和children組成的,可能經(jīng)常需要在router文件里搜索多次才能找到,而如果以/開頭,則能立刻搜索到對應(yīng)的組件。{{path:'/file',name:'File',component:Main,meta:{title:'文件服務(wù)',icon:'ios-cloud-upload'children:[{path:'/file/file-list',name:'FileList',component:()=>import('@/views/file/file-list.vue'){path:'/file/file-add',name:'FileAdd',component:()=>import('@/views/file/file-add.vue'){path:'/file/file-update',|--|--role-list.vuenamename:'FileUpdate',component:()=>import('@/views/file/file-update.vue')}(二)Vue項(xiàng)目目錄規(guī)范2.2.1基礎(chǔ)vue項(xiàng)目中的所有命名一定要與后端命名統(tǒng)一。比如權(quán)限:后端privilege,前端無論router,store,api等都必須使用privielege單詞!2.2.2使用Vue-cli腳手架使用vue-cli3來初始化項(xiàng)目,項(xiàng)目名按照上面的命名規(guī)范。目錄名按照上面的命名規(guī)范,其中components組件用大寫駝峰,其余除components組件目錄外的所有目錄均使用kebab-case命名。srcsrcssets|--componentsonfig|--constants|--directivesrsock|--pluginster|--themess||源碼目錄所有api接口靜態(tài)資源,images,icons,styles等公用組件配置信息常量信息,項(xiàng)目所有Enum,全局常量等自定義指令過濾器,全局工具模擬數(shù)據(jù),臨時(shí)存放外部引用的插件存放及修改文件模擬接口,臨時(shí)存放插件,全局使用路由,統(tǒng)一管理vuex,統(tǒng)一管理自定義樣式主題視圖目錄role模塊名role列表頁面|||||||--|--role-add.vue|--|--role-update.vue|--|--index.less|--|--components|--employeerole新建頁面role更新頁面role模塊樣式role模塊通用組件文件夾employee模塊文件、變量命名要與后端保持一致。此目錄對應(yīng)后端API接口,按照后端一個(gè)controller一個(gè)api.js文件。若項(xiàng)目較大時(shí),可以按照業(yè)務(wù)劃分子目錄,并與后端保持一致。api中的方法名字要與后端apiurl盡量保持語義高度一致性。對于api中的每個(gè)方法要添加注釋,注釋與后端swagger文檔保持一致。正例:/employee/add/employee/delete/{id}/employee/update//添加員工functionaddEmployee(data){returnpostAxios('/employee/add',data)}//更新員工信息functionupdateEmployee(data){returnpostAxios('/employee/update',data)}//刪除員工functiondeleteEmployee(employeeId){returnpostAxios('/employee/delete/'+employeeId)}//獲取員工信息functiongetEmployee(data){returnpostAxios('/employee/get/',data)}//獲取員工信息列表functiongetEmployeeList(data){returnpostAxios('/employee/getlist/',data)}assets為靜態(tài)資源,里面存放images,styles,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論