數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第1頁
數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第2頁
數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第3頁
數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第4頁
數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)中心產(chǎn)品開發(fā)規(guī)范

XXXX公司

XX業(yè)務(wù)部

XXXX年XX月

文檔說明

本文檔所涉及到的文字、圖表等,僅限于內(nèi)部使用,未經(jīng)雙方書面許可,請(qǐng)勿擴(kuò)散到

第二方。

文檔屬性

屬性內(nèi)容

客戶名稱:

項(xiàng)目名稱:

文檔主題:

文檔編號(hào):

文檔版本:

版本日期:

文檔狀態(tài):

文檔變更

版本修訂日期修訂人描述

文檔送呈

單位姓名目的

批閱

參閱

目錄

1概述........................................................................5

1.1最根本原則..........................................................5

2Java技術(shù)規(guī)范...............................................................6

2.1平臺(tái)使用的有關(guān)技術(shù)..................................................6

2.1.1基本核心框架包..................................................6

2.1.2其他框架包......................................................6

2.2程序設(shè)計(jì)標(biāo)準(zhǔn)........................................................7

2.2.1命名約定........................................................8

2.2.2包名,類名,方法名,屬性名,常量名命名約定....................9

2.2.3注釋約定.......................................................10

2.2.4快速瀏覽JavaDoc...............................................................................................10

2.3開發(fā)規(guī)范............................................................12

2.3.1項(xiàng)目結(jié)構(gòu)說明...................................................12

2.3.2整體包結(jié)構(gòu)說...................................................12

2.3.3項(xiàng)目模塊包結(jié)構(gòu)及命名...........................................13

2.3.4各子項(xiàng)目模塊功能包結(jié)構(gòu)........................................14

2.3.5配置文件包結(jié)構(gòu).................................................14

2.4命名規(guī)則............................................................14

2.4.1共用類.........................................................14

2.4.2業(yè)務(wù)層.........................................................14

2.4.3展現(xiàn)層.........................................................15

2.4.4模型層.........................................................15

2.4.5持久層.........................................................16

2.4.6XML配置......................................................16

2.4.7資源文件.......................................................18

2.4.8JSP文件.......................................................19

2.4.9事務(wù)命名約束...................................................20

2.4.10JS命名約束...................................................20

3數(shù)據(jù)庫技術(shù)規(guī)范.............................................................21

3.1概述...............................................................21

3.2命名基本規(guī)則.......................................................21

3.3數(shù)據(jù)庫表空間.......................................................21

3.3.1命名基本規(guī)則..................................................21

3.4默認(rèn)用戶方案.......................................................21

3.5表的命名規(guī)則、約定.................................................21

3.6視圖的命名規(guī)則、約定...............................................22

3.7字段命名規(guī)則、約定.................................................22

3.8存儲(chǔ)過程的命名規(guī)則、約定..........................................22

3.9序列對(duì)象的命名規(guī)則、約定..........................................22

3.10觸發(fā)器命名規(guī)則、約定..............................................23

4HIVE技術(shù)規(guī)范.............................................................24

5HBase設(shè)計(jì)規(guī)范.............................................................25

5.1Namespace命名空間設(shè)計(jì)一............................................25

5.21.2.Table表設(shè)計(jì).....................................................26

5.2.1理想HBase表..................................................26

5.2.2預(yù)創(chuàng)建分區(qū).....................................................27

5.2.3列族數(shù)量.......................................................27

5.2.4可配置的數(shù)據(jù)塊大小.............................................27

5.2.5數(shù)據(jù)塊緩存.....................................................28

5.2.6激進(jìn)緩存.......................................................28

5.2.7布隆過濾器(Bloomfilters)............................................................................29

5.2.8生存時(shí)間(TTL)..............................................................................................30

5.2.9數(shù)據(jù)壓縮.......................................................31

5.2.10數(shù)據(jù)分割.......................................................32

5.2.11單元時(shí)間版本...................................................33

5.3ColumnFamily列族設(shè)計(jì)..............................................34

5.4Qualifier列設(shè)計(jì).....................................................35

5.5版本設(shè)計(jì)...........................................................35

5.6HBase命名規(guī)范36

1概述

本文提供一整套編寫高效可靠的Java代碼的標(biāo)準(zhǔn)、約定與指南。它們以安全可靠的軟

件工程原則為基礎(chǔ),使代碼易于懂得、保護(hù)與增強(qiáng)。而且,通過遵循這些程序設(shè)計(jì)標(biāo)準(zhǔn),

你作為一個(gè)Java軟件開發(fā)者的生產(chǎn)效率會(huì)有顯著提高。經(jīng)驗(yàn)證明,若從一開始就花時(shí)間編

寫高質(zhì)量的代碼,則在軟件開發(fā)階段,對(duì)代碼的修改要容易很多。最后,遵循一套通用的

程序設(shè)計(jì)標(biāo)準(zhǔn)將帶來更大的一致性,使軟件開發(fā)團(tuán)隊(duì)的效率明顯提高。

1.1最根本原則

□運(yùn)用常識(shí)

當(dāng)找不到任何規(guī)則或者指導(dǎo)方針,當(dāng)規(guī)則明顯不能適用,當(dāng)所有的方法都失效的時(shí)侯:

運(yùn)用常識(shí)并核實(shí)這些基本原則。這條規(guī)則比其它所有規(guī)則都重要。

□駝峰命名法

駝峰命名法(Camel-Case):就是當(dāng)變量名或者函式名是由一個(gè)或者多個(gè)單字連結(jié)在

一起,而構(gòu)成的唯一識(shí)別字時(shí),第一個(gè)單字以小寫字母開始;第二個(gè)單字的首字母大寫或

者每一個(gè)單字的首字母都使用大寫字母,比如:myFirstName、myLastName,這樣的

變量名看上去就像駱駝峰一樣此起彼伏,故得名。

駝峰命名法的命名規(guī)則可視為一種慣例,并無絕對(duì)與強(qiáng)制,目的是增加識(shí)別與可讀性。

2Java技術(shù)規(guī)范

2.1平臺(tái)使用的有關(guān)技術(shù)

平臺(tái)使用的框架包分核心框架包與其他務(wù)必的框架包,各框架包本身所依靠的開源包

不做列舉,由框架包本身的信息來定。

2.1.1基本核心框架包

平臺(tái)使用Spring+Struts2+myBatis的三層架構(gòu)作為基本框架。(JDK1.6+)。參考如下:

名稱版本備注

Struts22.2.1

Spring3.0.5

mybatis-core3.1.1不支持跨數(shù)據(jù)庫建議,目前

開發(fā)在mysql上,現(xiàn)網(wǎng)環(huán)境

在db2上

mybatis-spring1.1.1

MySQL5.0

Tomcat7.0

jQuery1.8

2.1.2其他框架包

除基本框架外,平臺(tái)其他將使用的一些框架包,參考如下:(JDK1.5+)

名稱版本備注

SpringSecurity2.0.4

ApacheCommons2.6常用的工具包等

SLF4J1.6.1

ApacheLoggingIog4j1.2.15

ApacheAnt1.7.1

Oscache2.4.1

XMemcache1.2.5

C3P00.9.1

Dom4j2.0

commons-beanutils1.8.3

Mybatis-spring1.1.1

Hadoop-core0.20.2-cdh3u5

Hive-cli0.7.1-cdh3u5

Hbase0.90.6-cdh3u5

2.2程序設(shè)計(jì)標(biāo)準(zhǔn)

Java的程序設(shè)計(jì)標(biāo)準(zhǔn)很重要,原因在于它將提高開發(fā)團(tuán)隊(duì)各成員的代碼的一致性。一

致性的提高會(huì)使代碼更易懂得,這意味著它更易開發(fā)與保護(hù)。從而降低了應(yīng)用程序的總開

發(fā)成本。

你務(wù)必牢記的是:你的Java代碼在你已離開并開始另一個(gè)項(xiàng)目之后,會(huì)保留相當(dāng)長(zhǎng)的

一段時(shí)間。因此開發(fā)過程中一個(gè)很重要的目標(biāo)就是要確保在開發(fā)成員或者開發(fā)團(tuán)隊(duì)之間的

工作能夠順利交接,不必花很大的力氣便能懂得已編寫的代碼,以便繼續(xù)保護(hù)與改進(jìn)往常

的工作。假如代碼難以懂得,很有可能被廢棄與重寫。S

2.2.1命名約定

我們將在整個(gè)標(biāo)準(zhǔn)中討論命名約定,下列是幾個(gè)基本點(diǎn):

□使用能夠準(zhǔn)確說明變量/字段/類的完整的英文描述符

比如,使用類似firstName,grandTotal或者CorporateCustomer?這樣的名

字。盡管象xLyl或者fn這樣的名字很簡(jiǎn)短,輸入起來容易,但是我們難以明白它

們代表什么、結(jié)果是什么含義,因而使代碼難以懂得、保護(hù)與改進(jìn)。

□使用該領(lǐng)域的術(shù)語

假如用戶稱他們的''客戶"(clients)為''顧客"(customers),那么就使用術(shù)語

Customer來命名這個(gè)類,而不用Client。許多程序開發(fā)者會(huì)犯的一個(gè)錯(cuò)誤是,不去

使用工業(yè)或者領(lǐng)域里已經(jīng)存在著很完美的術(shù)語時(shí),卻生造出一些普通詞匯。

□使用大小寫混合,提高名字的可讀性

通常應(yīng)該使用小寫字母,但是類與接口的名字的首字母,與任何中間單詞的首字

母應(yīng)該大寫。

□盡量少用縮寫,但假如一定要使用,就要慎重地使用

這意味著應(yīng)該保留一個(gè)標(biāo)準(zhǔn)縮寫的列表,明智地從中選取,同時(shí)在使用時(shí)保持一

致。比如,想對(duì)單詞"number”使用縮寫,那么可從nbr,no或者者num中選取

一個(gè),說明一下使用了哪一個(gè)(具體是哪個(gè)倒無所謂),同時(shí)只使用這一種形式。

□避免使用長(zhǎng)名稱(不超過15個(gè)字母)

比如:PhysicalOrVirtualProductOrService看起來大概是個(gè)不錯(cuò)的類名,但

是名字太長(zhǎng),應(yīng)該考慮重新給它起個(gè)短一點(diǎn)的名字,比如象Offering。

□避免使用相似或者者僅在大小寫上有區(qū)別的名字

比如,不應(yīng)同時(shí)使用變量名persistentObject與persistentObjects及

anSqlDatabase與anSQLDatabase這樣的名稱

□避免使用下劃線作為名字的首末字母

下列劃線為首末字母的名字通常為系統(tǒng)保留,除預(yù)處理定義之外,通常不用作用

戶命名。更重要的是,下劃線經(jīng)常造成煩惱而且難輸入,因此盡量避免使用。

2.2.2包名,類名,方法名,屬性名,常量名命名約定

□包命名

包命名全部使用小寫英文字母,中間不同意有數(shù)字下劃線等特殊字符。

□類,接口命名

類,接口名開頭使用大寫英文字母,多單詞使用駝峰命名法。類名中不要使用下

劃線與數(shù)字等特殊字符,正確的寫法示例:HibernateDaoSupporto

假如表示特殊功能的類,在類名的末尾加上所要表示的功能英文名稱,如:

****Listener,表示監(jiān)聽器等。

□方法命名

方法命名使用駝峰命名法,方法名中間不要使用下劃線與數(shù)字等特殊字符,正確

的示例:processing。。

方法的參數(shù)與方法內(nèi)部的局部參數(shù)可自定,符合要求就行。

□特殊Bean類的屬性命名約定

Bean的屬性命名規(guī)則嚴(yán)格使用駝峰命名法,不同意使用下劃線,名字長(zhǎng)度最長(zhǎng)不

要超過15個(gè)字符,確實(shí)需要長(zhǎng)名字時(shí),適當(dāng)縮寫部分英文字母。

□常量屬性命名

常量的命名規(guī)則通常為常量名全部使用大寫字母,多單詞之間使用下劃線隔開,

不同意使用數(shù)字等特殊字符,同時(shí)常量的聲明一定要是staticfinal的。

□普通類的屬性命名

普通類的屬性命名除常量依照常量命名法外,其他的屬性的名字使用“英文名字

(首字母大寫)”命名,多單詞可使用駝峰命名法或者用下劃線隔開。

2.2.3注釋約定

本文還會(huì)對(duì)注釋進(jìn)行約定,有關(guān)注釋風(fēng)格能夠在eclipse中導(dǎo)入codetemplates.xm

文件?下列是幾個(gè)基本點(diǎn):

□注釋應(yīng)該增加代碼的清晰度

代碼注釋的目的是要使代碼更易于被同時(shí)參與程序設(shè)計(jì)的開發(fā)人員與其他后繼開

發(fā)人員懂得。

□假如你的程序不值得注釋,那么它也很可能也不值得運(yùn)行。

□保持注釋的簡(jiǎn)潔

最好的注釋應(yīng)該是簡(jiǎn)單明了的注釋。注釋不必洋洋灑灑,只需提供足夠的信息,

使別人能夠懂得你的代碼。

□先寫注釋,后寫代碼

寫代碼注釋的最好方法是在寫代碼之前就寫注釋。這使你在寫代碼之前能夠想想

代碼的功能與運(yùn)行。而且這樣確保不可能遺漏注釋。另一種方法是邊寫代碼邊寫注釋。

由于注釋能夠使代碼更易懂得,因此在程序開發(fā)的過程中,也能夠利用這一點(diǎn)。假如

打算花些時(shí)間寫注釋,那么至少你應(yīng)從這個(gè)過程中獲得些什么。

□注釋信息不僅要包含代碼的功能,還應(yīng)給出原因

比如,下面例1中的代碼顯示金額在$1,000以上(包含$1,000)的定單可給

予5%的折扣。為什么要這樣做呢?難道有一個(gè)商業(yè)法則規(guī)定大額定單能夠得到折扣

嗎?這種給大額定單的特殊是有的時(shí)候限的呢,還是一直都這樣?最初的程序設(shè)計(jì)者

是否只是由于慷慨大度才這樣做呢?除非它們?cè)谀硞€(gè)地方(或者者是在源代碼本身,

或者者是在一個(gè)外部文檔里)被注釋出來,否則你不可能明白這些。

2.2.4快速瀏覽JavaDoc

Sun公司的JavaDevelopmentKit(JDK)中有一個(gè)名為javadoc的程序。它能

夠處理Java的源代碼文件,同時(shí)為Java程序產(chǎn)生HTML文件形式的外部注釋文檔。

Javadoc支持一定數(shù)目的標(biāo)記,標(biāo)識(shí)注釋文檔中各段起始位置的保留字。詳情請(qǐng)參考JDK

javadoc文檔。

標(biāo)記用于目的

說明特定某一段程序代碼的作者。每一個(gè)作者

@authorname類、接口

各有一個(gè)標(biāo)記。

說明該類的應(yīng)用程序編程接口(API)已被廢

?deprecated類、成員函數(shù)。

棄,因此應(yīng)不再使用。

?exceptionname說明由成員函數(shù)發(fā)出的特殊。一個(gè)特殊使用一

成員函數(shù)

description個(gè)標(biāo)記,并要給出特殊的完整類名?

用來說明傳遞給一個(gè)成員函數(shù)的參數(shù),其中包

@paramname

成員函數(shù)含參數(shù)的類型/類與用法。每個(gè)參數(shù)各有一個(gè)標(biāo)

description

記。

若成員函數(shù)有返回值,對(duì)該返回值進(jìn)行說明。

@returndescription成員函數(shù)

應(yīng)說明返回值的類型/類與可能的用途。

說明自從有JDK1.1以來,該項(xiàng)已存在了多長(zhǎng)

@since類、成員函數(shù)

時(shí)間。

類、接口、成員函在文檔中生成指向特定類的超文本鏈接。能夠

@seeClassName

數(shù)、字段同時(shí)應(yīng)該使用完全合法的類名。

@see

類、接口、成員函在文檔中生成指向特定成員函數(shù)的超文本鏈

ClassName#member

數(shù)、字段接。能夠同時(shí)應(yīng)該使用完全合法的類名。

functionName

?versiontext類、接口說明特定一段代碼的版本信息。

你注釋代碼的方式很大地影響著你的工作效率與所有保護(hù)改進(jìn)代碼的后繼開發(fā)者的工

作效率。在軟件開發(fā)過程中及早注釋代碼,會(huì)促使你在開始撰寫代碼之前認(rèn)真考慮這些代

碼,從而帶來更高的工作效率。而且,當(dāng)你重新閱讀數(shù)天前或者者數(shù)星期前所寫的代碼時(shí),

你能夠很容易地推斷出當(dāng)時(shí)你是怎么想的,由于這一切都有記錄。

2.3開發(fā)規(guī)范

2.3.1項(xiàng)目結(jié)構(gòu)說明

數(shù)據(jù)中心FDC項(xiàng)目使用多module式項(xiàng)目結(jié)構(gòu),其中包含如下項(xiàng)目,各項(xiàng)目模塊功能

說明如下:

父模塊模塊依靠模塊要緊業(yè)務(wù)功能描述

FDCFdc-commonnone提供FDC項(xiàng)目中公用框架包及公用工具包

FDCFdc-monitorFdc-common提供FDC項(xiàng)目中監(jiān)控告警功能

FDCFdc-computeFdc-monitor,提供FDC項(xiàng)目中核心數(shù)據(jù)運(yùn)算功能(包含

Fdc-commonETL,匯總,分發(fā))。

FDCFdc-reportFdc-monitor,提供FDC項(xiàng)目中數(shù)據(jù)展現(xiàn)功能(報(bào)表展現(xiàn),

Fdc-common短信、郵件展現(xiàn),數(shù)據(jù)導(dǎo)出等)

2.3.2整體包結(jié)構(gòu)說

包結(jié)構(gòu)整體遵循按功能不一致分包,要緊表達(dá)出平臺(tái)的整體架構(gòu)。

1.常用的包結(jié)構(gòu)如2.3.2常用包結(jié)構(gòu)及命名。

2.各個(gè)模塊包結(jié)構(gòu),如業(yè)務(wù)層,操縱層,持久層,特殊,模型POJO,常量類,工具類等.

這里的常用類與公共里的不一樣假如各大模塊在公共類里沒有找到,能夠在自己的

模塊中自行擴(kuò)展。達(dá)到遵循''開一閉"原則。

3.常用xml配置文件結(jié)構(gòu),如2.3.4配置文件包結(jié)構(gòu)。

4.平臺(tái)核心的配置文件,存放在包的根目錄,如國(guó)際化,數(shù)據(jù)庫連接,日志配置,緩存

配置,系統(tǒng)級(jí)配置等。

5.自定義xml的scheme,dtd,與tld文件存放于Web根目錄的WEB-INF文件夾下,

文件名全部使用小寫字母。

2?3.3項(xiàng)目模塊包結(jié)構(gòu)及命名

1.Fdc-common

說明:所有的緩存結(jié)構(gòu)。比如平臺(tái)所使用的Oscache與Ehcache緩存技術(shù)。

說明:各個(gè)技術(shù)層框架類。如下子包

controller:操縱層提供的共有框架類。

Module:數(shù)據(jù)bean公共基礎(chǔ)類。

Business:業(yè)務(wù)層公共業(yè)務(wù)操縱類,提供通用功能。

Persistence:數(shù)據(jù)持久層公共數(shù)據(jù)操作類。

說明:存放基本常用的類。比如文件類,字符串類等。

2.Fdc-moniter,Fdc-compute,Fdc-report

□configs

說明:該包存放所有關(guān)于讀取配置信息的類

□Controller

說明:存放在操縱層下面的業(yè)務(wù)類。比如登陸,登出,角色切換等。

□Module

說明:存放各個(gè)業(yè)務(wù)數(shù)據(jù)bean類。下分各個(gè)子業(yè)務(wù)包。

□Busines

說明:存放個(gè)業(yè)務(wù)層公共業(yè)務(wù)操縱類。下分各個(gè)子業(yè)務(wù)包。

□Persistence

說明:數(shù)據(jù)持久層數(shù)據(jù)操縱類。下分各個(gè)子業(yè)務(wù)包。

□extends

說明:平臺(tái)擴(kuò)展功能類?下分子包,第一級(jí)子包名表示擴(kuò)展功能模塊名。

□Exceptions

2.3.4各子項(xiàng)目模塊功能包結(jié)構(gòu)

按照各個(gè)層次結(jié)構(gòu)包分完:功能包基本分為2個(gè)包:

1.各個(gè)層次的接口包。

2.關(guān)于接口的實(shí)現(xiàn)包。

2.3.5配置文件包結(jié)構(gòu)

配置文件夾命名為configs,可存放在Web根目錄下的WEB-INF文件夾下,也可放

在與javaclass文件根目錄同級(jí)的目錄下。configs目錄下要緊包含下列目錄結(jié)構(gòu):

□commons

存放公共的Xml配置文件,如:struts,spring,mybatis等的xml配置文件。

□core/*

存放平臺(tái)核心模塊,各功能模塊,擴(kuò)展功能模塊的所需的配置文件。如各模塊的

spring,struts,mybatis配置文件。

2.4命名規(guī)則

2.4.1共用類

公共用類要求以“功能英文名稱(首字母大寫)+Utils”駝峰命名。比如:日期的英文

名為date,按照規(guī)則要求,命名為:DateUtils。

2.4.2業(yè)務(wù)層

□業(yè)務(wù)層接口要求以I+''模塊英文名稱(首字母大寫)”+Manager命名。比如:導(dǎo)

航菜單的英文名為navigator,按照規(guī)則要求,命名為:INavigatorManager;

□接口的實(shí)現(xiàn)類要求以''模塊英文名稱(首字母大寫)”+Managerlmpl命名。比如:

導(dǎo)航菜單的英文名為navigator,按照規(guī)則要求,命名為:

NavigatorManagerlmpI;

2.4.3展現(xiàn)層

□基類要求以''模塊英文名稱(首字母大寫)”+ActionBase命名。比如:導(dǎo)航菜單的

英文名為navigator,按照規(guī)則要求,命名為:NavigatorActionBase;

□查詢模塊列表類要求以List+''模塊英文名稱(首字母大寫)”+s+Action命名。

比如:導(dǎo)航菜單的英文名為navigator,按照規(guī)則要求,命名為:

ListNavigatorsAction;

□創(chuàng)建模塊對(duì)象類要求以Create+''模塊英文名稱(首字母大寫)"+Action命名。比

如:導(dǎo)航菜單的英文名為navigator,按照規(guī)則要求,命名為:

CreateNavigatorAction;

□修改模塊對(duì)象類要求以Modify+''模塊英文名稱(首字母大寫)”+Action命名。比

如:導(dǎo)航菜單的英文名為navigator,按照規(guī)則要求,命名為:

ModifyNavigatorAction;

□刪除模塊對(duì)象類要求以Remove+''模塊英文名稱(首字母大寫)"+Action命名。

比如:導(dǎo)航菜單的英文名為navigator,按照規(guī)則要求,命名為:

RemoveNavigatorAction;

□對(duì)模塊對(duì)象的操作類要求以''模塊英文名稱(首字母大寫)”+Operator+Action

命名。比如:導(dǎo)航菜單的英文名為navigator,按照規(guī)則要求,命名為:

NavigatorOperatorAction。

2.4.4模型層

□模型層存放的是實(shí)體類,要求以''模塊實(shí)體英文名稱(首字母大寫)”命名。比如:導(dǎo)

航菜單的英文名為navigator,按照規(guī)則要求,命名為:Navigator;

□屬性字段參照Bean屬性命名規(guī)則。

2.4.5持久層

□dao接口要求以I+''模塊英文名稱(首字母大寫)”+DAO命名。比如:導(dǎo)航菜單

的英文名為navigator,按照規(guī)則要求,命名為:INavigatorDAO;

□接口的實(shí)現(xiàn)類要求以''模塊英文名稱(首字母大寫)"+DAOImpI命名.比如:導(dǎo)航

菜單的英文名為navigator,按照規(guī)則要求,命名為:NavigatorDAOImpI。

2.4.6XML配置

要緊配置文件包含spring.xml,struts.xml,mybatis.xml等。

由于這些文件都是分包存放,因此配置文件統(tǒng)一為spring.xml,struts.xml,

mybatis.xml,假如模塊內(nèi)的spring,struts,mybatis配置較多時(shí),需要分文件來寫,

那么可直接在spring,struts,mybatis的后面直接加連接號(hào)+名字來命名。如

spring-common.xmlo

各模塊的mybatissqlmap配置文件放到相應(yīng)模塊的Model包下,一個(gè)域模型對(duì)應(yīng)一

個(gè)sqlMap配置文件,如域模型名為Item,則與域模型相對(duì)應(yīng)的sqlMap文件名為

Item.xmL

1、spring.xml平臺(tái)Spring有關(guān)組件配置。

Module

□需要新建一個(gè)用戶管理模塊managerUserModule,設(shè)置其父節(jié)點(diǎn)是后臺(tái)管理樹

的根節(jié)點(diǎn),也就是設(shè)置parentModeulId為#號(hào),然后它的子節(jié)點(diǎn)能夠設(shè)置相應(yīng)的

父節(jié)點(diǎn)為managerllserModule,?

□ationURL:指用來訪問這個(gè)有關(guān)模塊的命名空間。

□viewType:查看類型,是指要說明此模塊節(jié)點(diǎn)是要在前臺(tái)顯示還是后臺(tái)管理的。

□imgURL:指當(dāng)我們把這些模塊展示在有關(guān)樹上顯示的圖標(biāo)鏈接。

Fuction

□確定包含的功能,如增加用戶:addUsero

Method

□增加用戶的入口方法:saveAddUsero

□actionUR:指這個(gè)入口方法在當(dāng)前模塊命名空間下的訪問地址createllser.加一個(gè)

點(diǎn)是用來推斷最后的后綴,假如是點(diǎn)結(jié)尾程序會(huì)自動(dòng)補(bǔ)齊訪問鏈接的后綴,假如是

其他后綴直接訪問這個(gè)鏈接。

□isDefault:是否默認(rèn)入口,一個(gè)模塊功能只能有一個(gè)方法作為默認(rèn)入口。

2、struts.xml平臺(tái)struts組件有關(guān)配置,開發(fā)有關(guān)模塊的時(shí)候注意有關(guān)規(guī)范

□package:我們能夠在模塊中定義包以避免命名空間重復(fù),命名規(guī)則:

struts-xxx(模塊名層)。

□namespace:有關(guān)模塊的命名空間。這里涉及幾個(gè)需要注意的地方:這個(gè)鏈接會(huì)

與權(quán)限關(guān)聯(lián)由過濾器推斷命名空間管理權(quán)限功能。凡是命名空間在

/public/common這個(gè)路徑下的系統(tǒng)定義為前臺(tái)沒有權(quán)限管理的訪問鏈接,凡是

命名空間在/manage/common這個(gè)路徑下的系統(tǒng)定義為后臺(tái)沒有權(quán)限管理的訪

問鏈接。在這個(gè)兩個(gè)路徑下面訪問的地址,過濾器不作權(quán)限推斷。其它訪問地址會(huì)

根據(jù)rights中配置定義的權(quán)限進(jìn)行過濾。

□extends:在struts配置中需要考慮各類攔截器與錯(cuò)誤處理跳轉(zhuǎn),配置在

struts-interceptor.xml這個(gè)文件。

Action

□name:定義action被訪問的id命名規(guī)范與定義java變量同樣的規(guī)范。

□class:就是我們?cè)趕pring.xml文件已經(jīng)配置了注入actionspringbean的id。

□result:struts處理跳轉(zhuǎn),兩種跳轉(zhuǎn)方式dispatcher轉(zhuǎn)向與redirect重定向。

□interceptor-ref:所使用的攔截器。在struts-interceptor.xml這個(gè)文件有有關(guān)

注釋。

3、mybatis.xml,平臺(tái)myBATIS有關(guān)組件配置

□配置sqlMap元素的resource屬性,指示域模型對(duì)應(yīng)的SQL配置文件的包全路徑。

4、myBATIS的SQLMap文件

配置域模型的增刪改查SQL語句,存儲(chǔ)過程等;配置文件名與域模型同名。

□sqlMap根元素的namespace屬性,設(shè)置成域模型的本身的名字。如域模型名字

為Item.java,那么namespace屬性名就為Item。

□typeAlias,resultMap,cacheModel,select,insert,delete,update等元

素的id屬性名以“自定英文名字(首字母小寫)”命名,多單詞使用駝峰命名法。

□在使用select,insert,update,delete元素配置增刪改查時(shí),id屬性的名字規(guī)

貝為,select的id屬性名以get***開頭,insert的以add***開頭,update的

以u(píng)pdate***開頭,delete的以delete***開頭,配合事務(wù)中的配置,多單詞使

用駝峰命名法。可在這些元素中使用復(fù)合查詢配置。

□procedure元素,的id屬性名以“功能英文名(首字母小寫)+Procedurew命

名,使用駝峰命名法。

□sql元素的id屬性名以“自定義英文名字(首字母小寫)”命名。多個(gè)單詞可使用

下劃線或者使用駝峰命名法。

□statement元素的id屬性名與sql元素命名規(guī)則一致。statement要緊配置復(fù)合

查詢。

5、ehcache.xml平臺(tái)ehcache緩存實(shí)現(xiàn)配置文件

6、system-config.xml平臺(tái)系統(tǒng)配置文件

2.4.7資源文件

平臺(tái)properties與國(guó)際化資源配置文件

□perties公共日志配置文件。

□perties平臺(tái)數(shù)據(jù)連接,基本參數(shù)配置等。

□Iperties平臺(tái)日志輸出儲(chǔ)存等有關(guān)設(shè)置的配置文件。

□perties平臺(tái)調(diào)度組件有關(guān)設(shè)置的配置文件。

□perties平臺(tái)oscache緩存實(shí)現(xiàn)配置文件

□perties平臺(tái)struts組件有關(guān)系統(tǒng)配置文件(國(guó)際化、上傳等)。

國(guó)際化資源文件使用標(biāo)準(zhǔn)JSTL標(biāo)簽綁定。通過不一致的local讀取不一致語言的有關(guān)

資源,國(guó)際化資源文件中key的定義規(guī)則:模塊名稱.功能名稱.key描述,但此全部小寫,

多個(gè)單詞之間用下劃線分割。國(guó)際化資源配置文件進(jìn)行分割處理,屬于本功能模塊的國(guó)際

化資源文件放到本模塊的根包下,在JSP中使用JSTL標(biāo)簽的<fmt:messagebundle*'"

/>調(diào)用,在文件開頭處加上<fmt:setBundlebasename='"'/>設(shè)置。

全局國(guó)際化配置文件如下(直接設(shè)置在perties文件中):

□messages開頭的資源文件包含有關(guān)的國(guó)際化資源內(nèi)容。

□exceptionMessages開頭的資源文件包含特殊處理描述的國(guó)際化資源內(nèi)容。

各功能模塊的國(guó)際化配置文件使用如下:

口文件名使用“功能模塊名+"_”+messages”命名,如

search_message.properties.,

□在JSP文件最開頭處使用標(biāo)簽<fmt:setBundlebasename=""/>設(shè)置全局

bundle,其中basename屬性名為模塊資源文件所在的包全路徑,scope為使用

范圍。

□在位于setBundle設(shè)置后使用<fmt:messagekey="">標(biāo)簽可直接使用該資源

文件中的key屬性。

2.4.8JSP文件

□JSP文件統(tǒng)一存放在應(yīng)用的Web根目錄下,即與WEB-INF文件夾同級(jí)。

□文件夾名按照java關(guān)于的功能模塊名來設(shè)置,文件夾名全部使用小寫字母。

□JSP文件名以“自定英文名(首字母小寫)++功能名”命名,多單詞英文可

使用駝峰命名法。

2.4.9事務(wù)命名約束

平臺(tái)中,所有關(guān)于事務(wù)處理的,務(wù)必遵循下列命名規(guī)則:

□儲(chǔ)存/填加:以save開頭。

□修改:以u(píng)pdate開頭。

□刪除:以delete開頭。

□獲?。阂詆et開頭。

□查找:以find開頭。

2.4.T0JS命名約束

與Java命名一致,但JS文件名可小寫,甚至能夠加下劃線等特殊符號(hào)。

3數(shù)據(jù)庫技術(shù)規(guī)范

3.1概述

本規(guī)范目前只適合部分?jǐn)?shù)據(jù)庫的有關(guān)定義。

3.2命名基本規(guī)則

針對(duì)不一致工程模塊使用不一致的數(shù)據(jù)命名。

開發(fā)時(shí)數(shù)據(jù)庫:dev+系統(tǒng)名。如:devcomputeo

試運(yùn)行數(shù)據(jù)庫:test+系統(tǒng)名。如:testcompute。

正式運(yùn)行數(shù)據(jù)庫:系統(tǒng)名。$n:computeo

3.3數(shù)據(jù)庫表空間

3.3.1命名基本規(guī)則

表空間:tbs_+系統(tǒng)名。如:tbs_computeo

臨時(shí)表空間:tbs_+系統(tǒng)名+tempspace。如:tbs_computetempspaceo

3.4默認(rèn)用戶方案

Username:raysdata/root

Password:raysdata/root

3.5表的命名規(guī)則、約定

命名基本規(guī)則

按照表在當(dāng)前數(shù)據(jù)倉(cāng)庫內(nèi)不一致數(shù)據(jù)職能劃分,所有字母均大寫:

字典定義類表以D開頭;如:DDIM。

關(guān)系定義類表以P開頭,當(dāng)前表示關(guān)系類名稱中間以“”分割,表示兩者關(guān)系;如:

P_ITEM_IDT?

數(shù)據(jù)匯總類表以6_開頭,擁有數(shù)據(jù)維度的,將維度名稱使用"」’分割,拼合在表名稱

中;如:G_ITEM_VSN

對(duì)前端報(bào)表支持表以R_開頭,名稱使用各報(bào)表業(yè)務(wù)名稱定義,如:R_CONFIG_LOG

3.6視圖的命名規(guī)則、約定

命名基本規(guī)則

Vi一視圖的類型(模塊名)一英文單詞一英文單詞一

比如:vi_base_message<>

3.7字段命名規(guī)則、約定

命名基本規(guī)則

英文單詞一英文單詞一英文單詞一...

比如:message_id>message_nameo

3.8存儲(chǔ)過程的命名規(guī)則、約定

命名基本規(guī)則

USP一英文單詞一英文單詞一...

比如:usp_message

3.9序列對(duì)象的命名規(guī)則、約定

命名基本規(guī)則

seq英文單詞英文單詞

如:seq_base_message。

3.10觸發(fā)器命名規(guī)則、約定

命名基本規(guī)則

trigger.英文單詞—英文單詞_

如:trigger_message。

4HIVE技術(shù)規(guī)范

i.按照表在當(dāng)前數(shù)據(jù)倉(cāng)庫內(nèi)不一致數(shù)據(jù)職能劃分,所有字母均大寫:

字典定義類表以D_開頭;如:D_DIM?

關(guān)系定義類表以P一開頭,當(dāng)前表示關(guān)系類名稱中間以“,分割,表示兩者關(guān)系;如:

P_ITEM_IDTo

數(shù)據(jù)集成類表以FACTJf頭,使用有關(guān)業(yè)務(wù)定義名稱,如:FACT_

數(shù)據(jù)匯總類表以GJf頭,擁有數(shù)據(jù)維度的,將維度名稱使用“.“分割,拼合在表名稱

中;如:G_ITEM_VSN

對(duì)前端報(bào)表支持表以R_開頭,名稱使用各報(bào)表業(yè)務(wù)名稱定義,如:R_CONFIG_LOG

2.數(shù)據(jù)路徑

數(shù)據(jù)路徑內(nèi)全部按照大寫定義路徑字符。

5HBase設(shè)計(jì)規(guī)范

介紹了HBase應(yīng)用開發(fā)時(shí)建議遵循的設(shè)計(jì)規(guī)范,要緊是針對(duì)開發(fā)

層面的。

Hbase中與表結(jié)構(gòu)有關(guān)的邏輯模型涉及到下列幾個(gè)詞匯:命名空

間、表、列族、歹h行鍵、版本等,這些是構(gòu)建hbase表的所有元素。

下文就根據(jù)這幾個(gè)關(guān)鍵詞匯,陳述下有關(guān)的規(guī)范。

5.1Namespace命名空間設(shè)計(jì)

HBase默認(rèn)的命名空間是default,默認(rèn)情況下,假如在創(chuàng)建表時(shí)沒有

顯式地指定命名空間,那么表將創(chuàng)建在default命名空間下。假如表隸

屬于某個(gè)非默認(rèn)的命名空間,那么在引用表(譬如讀取表數(shù)據(jù))時(shí),就

務(wù)必指定命名空間,否則將出現(xiàn)類似''無法定位到表〃的錯(cuò)誤,完整表名

的格式為''命名空間名稱:表名稱〃,譬如"DLQX:SYSTEM_USER〃;假

如是默認(rèn)的命名空間,則完整表名也能夠省略掉''default:",直接拼寫

表名SYSTEM_USER即可。

命名空間與表的關(guān)系,能夠用下圖表示:

NameSpace

命名空間

命名空間與表之間是一對(duì)多的關(guān)系,即一個(gè)命名空間下面能夠包含多個(gè)

hbase表,但一個(gè)hbase表只能屬于一個(gè)命名空間。在創(chuàng)建表時(shí),假

如沒有指定命名空間(或者者命名空間為空),則系統(tǒng)會(huì)將此hbase

表放置在默認(rèn)命名空間(default)下。

另外,刪除命名空間之前,務(wù)必先刪除掉此命名空間下的所有hbase

表,否則將無法刪除此命名空間。

5.21.2.Table表設(shè)計(jì)

HBase有幾個(gè)高級(jí)特性,在你設(shè)計(jì)表時(shí)能夠使用。這些特性不一定聯(lián)

系到模式或者行鍵設(shè)計(jì),但是它們定義了某些方面的表行為。

5.2.1理想HBase表

Hbase作為列數(shù)據(jù)庫,根據(jù)官方的說法,在性能與效率上更擅長(zhǎng)處理

''高而瘦〃的表,而非''矮而胖"的表。所謂''高而瘦",是指表的列的數(shù)量

較少,但是行的數(shù)量極大,從而使表展現(xiàn)出一種又高又瘦的形象。所謂

''矮而胖",是指表的列的數(shù)據(jù)居多,但是行的數(shù)量卻有限,給人一種又

矮又胖的形象,盡管hbase表號(hào)稱可容納百萬列,但是那也僅僅限于

理論上的極限,在實(shí)際應(yīng)用中,請(qǐng)盡量構(gòu)建''高而瘦〃的表,同時(shí)需要對(duì)

列的數(shù)量進(jìn)行測(cè)試,以避免過度影響讀寫性能。

522預(yù)創(chuàng)建分區(qū)

默認(rèn)情況下,在創(chuàng)建HBase表的時(shí)候會(huì)自動(dòng)創(chuàng)建一個(gè)region分區(qū),

當(dāng)導(dǎo)入數(shù)據(jù)的時(shí)候,所有的HBase客戶端都向這一個(gè)region寫數(shù)據(jù),

直到這個(gè)region足夠大了才進(jìn)行切分。一種能夠加快批量寫入速度的

方法是通過預(yù)先創(chuàng)建一些空的regions,這樣當(dāng)數(shù)據(jù)寫入HBase時(shí),

會(huì)按照region分區(qū)情況,在集群內(nèi)做數(shù)據(jù)的負(fù)載均衡。

523列族數(shù)量

不要在一張表里定義太多的columnfamilyo目前Hbase并不能很

好的處理超過2~3個(gè)columnfamily的表。由于某個(gè)columnfamily

在flush的時(shí)候,它鄰近的columnfamily也會(huì)因關(guān)聯(lián)效應(yīng)被觸發(fā)

flush,最終導(dǎo)致系統(tǒng)產(chǎn)生更多的I/O。因此,根據(jù)官方的建議,一個(gè)

HBase表中創(chuàng)建一個(gè)列族即可。

5.2.4可配置的數(shù)據(jù)塊大小

HFile數(shù)據(jù)塊大小能夠在列族層次設(shè)置。這個(gè)數(shù)據(jù)塊不一致于HDFS數(shù)

據(jù)塊。其默認(rèn)值是65,536字節(jié),或者64KB。數(shù)據(jù)塊索引存儲(chǔ)每個(gè)

HFile數(shù)據(jù)塊的起始鍵。數(shù)據(jù)塊大小設(shè)置影響到數(shù)據(jù)塊索引的大小。數(shù)

據(jù)塊越小,索引越大,從而占用更大內(nèi)存空間。同時(shí)由于加載進(jìn)內(nèi)存的

數(shù)據(jù)塊更小,隨機(jī)查找性能更好。但是假如你需要更好的序列掃描性能,

那么一次能夠加載更多HFile數(shù)據(jù)進(jìn)入內(nèi)存則更為合理,這意味著數(shù)據(jù)

塊應(yīng)該設(shè)置為更大的值。相應(yīng)地索引變小,你將在隨機(jī)讀性能上付出代

價(jià)。

5.2.5數(shù)據(jù)塊緩存

把數(shù)據(jù)放進(jìn)讀緩存,但工作負(fù)載卻經(jīng)常不能從中獲得性能提升。比如,

假如一張表或者表里的列族只被順序化掃描訪問或者者很少被訪問,你

不可能介意Get或者Scan花費(fèi)時(shí)間是否有點(diǎn)兒長(zhǎng)。在這種情況下,

你能夠選擇關(guān)閉那些列族的緩存。假如你只是執(zhí)行很多順序化掃描,你

會(huì)多次倒騰緩存,同時(shí)可能會(huì)濫用緩存把應(yīng)該放進(jìn)緩存獲得性能提升的

數(shù)據(jù)給排擠出去。假如關(guān)閉緩存,你不僅能夠避免上述情況發(fā)生,而且

能夠讓出更多緩存給其他表與同一表的其他列族使用。

5.2.6激進(jìn)緩存

你能夠選擇一些列族,給予它們?cè)跀?shù)據(jù)塊緩存里有更高的優(yōu)先級(jí)(LRU

緩存)。假如你預(yù)期一個(gè)列族比另一個(gè)列族隨機(jī)讀更多,這個(gè)特性遲早

用得上。

IN_MEMORY參數(shù)的默認(rèn)值是falseo由于HBase除了在數(shù)據(jù)塊緩存

里儲(chǔ)存這個(gè)列族相比其他列族更激進(jìn)之外并不提供額外的保證,該參數(shù)

在實(shí)踐中設(shè)置為true不可能變化太大。

創(chuàng)建表的時(shí)候,能夠通過HColumnDescriptor.setinMemory(true)

將表放到Regionserver的緩存中,保證在讀取的時(shí)候被cache命中。

5.2.7布隆過濾器(Bloomfilters)

數(shù)據(jù)塊索引提供了一個(gè)有效的方法,在訪問一個(gè)特定的行時(shí)用來查找應(yīng)

該讀取的HFile的數(shù)據(jù)塊。但是它的效用是有限的。HFile數(shù)據(jù)塊的默

認(rèn)大小是64KB,這個(gè)大小不能調(diào)整太多。

假如你要查找一個(gè)短行,只在整個(gè)數(shù)據(jù)塊的起始行鍵上建立索引無法給

你細(xì)粒度的索引信息。比如,假如你的行占用100字節(jié)存儲(chǔ)空間,一

個(gè)64KB的數(shù)據(jù)塊包含(64*1024)/100=655.53=~700行,而

你只能把起始行放在索引位上。你要查找的行可能落在特定數(shù)據(jù)塊上的

行區(qū)間里,但也不是確信存放在那個(gè)數(shù)據(jù)塊上。這有多種情況的可能,

或者者該行在表里不存在,或者者存放在另一個(gè)HFile里,甚至在

MemStore里。這些情況下,從硬盤讀取數(shù)據(jù)塊會(huì)帶來10開銷,也會(huì)

濫用數(shù)據(jù)塊緩存。這會(huì)影響性能,特別是當(dāng)你面對(duì)一個(gè)巨大的數(shù)據(jù)集同

時(shí)有很多并發(fā)讀用戶時(shí)。

布隆過濾器同意你對(duì)存儲(chǔ)在每個(gè)數(shù)據(jù)塊的數(shù)據(jù)做一個(gè)反向測(cè)試。當(dāng)某行

被請(qǐng)求時(shí),先檢查布隆過濾器看看該行是否不在這個(gè)數(shù)據(jù)塊。布隆過濾

器要么確定回答該行不在,要么回答它不明白。這就是為什么我們稱它

是反向測(cè)試。布隆過濾器也能夠應(yīng)用到行里的單元上。當(dāng)訪問某列標(biāo)識(shí)

符時(shí)先使用同樣的反向測(cè)試。

布隆過濾器也不是沒有代價(jià)。存儲(chǔ)這個(gè)額外的索引層次占用額外的空

間。布隆過濾器隨著它們的索引對(duì)象數(shù)據(jù)增長(zhǎng)而增長(zhǎng),因此行級(jí)布隆過

濾器比列標(biāo)識(shí)符級(jí)布隆過濾器占用空間要少。當(dāng)空間不是問題時(shí),它們

能夠幫助你榨干系統(tǒng)的性能潛力。

你能夠在列族上打開布隆過濾器,如下所示:

hbase(main)>create

,

'mytable',{NAME=>'colfamlzBLOOMFILTER=>'ROWCOL'}

BLOOMFILTER參數(shù)的默認(rèn)值是NONE。一個(gè)行級(jí)布隆過濾器用ROW

打開,列標(biāo)識(shí)符級(jí)布隆過濾器用ROWCOL打開。行級(jí)布隆過濾器在數(shù)

據(jù)塊里檢查特定行鍵是否不存在,列標(biāo)識(shí)符級(jí)布隆過濾器檢查行與列標(biāo)

識(shí)符聯(lián)合體是否不存在。ROWCOL布隆過濾器的開銷高于ROW布隆

過濾器。

528生存時(shí)間(TTL)

應(yīng)用系統(tǒng)經(jīng)常需要從數(shù)據(jù)庫里刪除老數(shù)據(jù)。由于數(shù)據(jù)庫很難超過某種規(guī)

模,因此傳統(tǒng)上數(shù)據(jù)庫內(nèi)建了許多靈活處理辦法。比如,在TwitBase

里你不愿意刪除用戶在使用應(yīng)用系統(tǒng)期間生成的任何推帖。這些都是用

戶生成數(shù)據(jù),將來有一天當(dāng)你執(zhí)行一些高級(jí)分析時(shí)可能有用。但是并不

需要儲(chǔ)存所有推帖用于實(shí)時(shí)訪問。因此早于某個(gè)時(shí)間的推帖能夠歸檔存

放到平面文件里。

HBase能夠讓你在數(shù)秒內(nèi)在列族級(jí)別設(shè)置一個(gè)TTL。早于指定TTL值

的數(shù)據(jù)在下一次大合并時(shí)會(huì)被刪除。假如你在同一單元上有多個(gè)時(shí)間版

本,早于設(shè)定TTL的版本會(huì)被刪除。你能夠關(guān)閉TTL或者者通過設(shè)置

其值為INT.MAX_VALUE(2147483647)來讓它永遠(yuǎn)打開(這是默認(rèn)

值)。你能夠在建表時(shí)設(shè)置TTL,如下所示:

hbase(main)>create

,

'mytable',{NAM

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論