系统设计案例学习

<!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:黑体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimHei; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:1627421319 -2147483648 8 0 66047 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} @font-face {font-family:新宋体; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:仿宋_GB2312; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"\@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@新宋体"; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@黑体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"\@仿宋_GB2312"; panose-1:2 1 6 9 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h1 {mso-style-name:"标题 1\,H1\,Heading 0\,R1\,H11\,h1\,Level 1 Topic Heading\,Section Heading\,Level 1\,PIM 1\,dd heading 1\,dh1\,H12\,H111\,H13\,H112\,Section Head\,1st level\,l1\,1\,H14\,H15\,H16\,H17\,Head1\,Heading apps\,Level 1 Head\,LN\,章节\,heading 1\,Arial 14 Fett\,Arial 14 Fett1\,Header 1"; mso-style-update:auto; mso-style-next:"正文缩进\,Normal Indent Char\,Normal Indent Char1 Char\,Normal Indent Char Char Char\,Normal Indent Char1 Char Char Char\,Normal Indent Char Char Char Char Char\,Normal Indent Char1 Char Char Char Char Char\,特点 Char Char\,Normal Indent Char1\,特点 Char\,表正文 Ch"; margin-top:12.0pt; margin-right:0cm; margin-bottom:12.0pt; margin-left:21.25pt; text-indent:-6.85pt; page-break-before:always; mso-pagination:widow-orphan lines-together; page-break-after:avoid; mso-outline-level:1; mso-list:l1 level1 lfo1; tab-stops:list 50.4pt; font-size:15.0pt; mso-bidi-font-size:10.0pt; font-family:黑体; mso-hansi-font-family:Tahoma; mso-bidi-font-family:Tahoma; mso-font-kerning:1.0pt; mso-bidi-font-weight:normal;} h2 {mso-style-name:"标题 2\,sect 1\.2\,H2\,H21\,R2\,h2\,Level 2 Topic Heading\,Reset numbering\,Heading 2 Hidden\,Heading 2 CCBS\,heading 2\,l2\,2nd level\,2\,Header 2\,UNDERRUBRIK 1-2\,Titre3\,DO NOT USE_h2\,chn\,Chapter Number\/Appendix Letter\,第一章 标题 2\,ISO1\,PIM2\,section 1\.1\,Underrubrik1\,节"; mso-style-update:auto; mso-style-next:"正文缩进\,Normal Indent Char\,Normal Indent Char1 Char\,Normal Indent Char Char Char\,Normal Indent Char1 Char Char Char\,Normal Indent Char Char Char Char Char\,Normal Indent Char1 Char Char Char Char Char\,特点 Char Char\,Normal Indent Char1\,特点 Char\,表正文 Ch"; margin-top:6.0pt; margin-right:0cm; margin-bottom:6.0pt; margin-left:70.35pt; text-indent:-1.0cm; mso-pagination:widow-orphan lines-together; page-break-after:avoid; mso-outline-level:2; mso-list:l1 level2 lfo1; tab-stops:21.0pt list 77.45pt; font-size:15.0pt; font-family:Tahoma; mso-fareast-font-family:黑体; mso-bidi-font-weight:normal; mso-no-proof:yes;} h3 {mso-style-name:"标题 3\,h3\,H3\,sect1\.2\.3\,HeadC\,Heading 3 - old\,Map\,H31\,Level 3 Topic Heading\,Org Heading 1\,Level 1 - 1\,3rd level\,Heading 3\.\,Level 3 Head\,level_3\,PIM 3\,prop3\,3\,3heading\,heading 3\,Heading 31\,Bold Head\,bh\,l3\,- Maj Side\,CT\,Heading\,sect1\.2\.31\,sect1\.2\.32"; mso-style-update:auto; mso-style-next:"正文缩进\,Normal Indent Char\,Normal Indent Char1 Char\,Normal Indent Char Char Char\,Normal Indent Char1 Char Char Char\,Normal Indent Char Char Char Char Char\,Normal Indent Char1 Char Char Char Char Char\,特点 Char Char\,Normal Indent Char1\,特点 Char\,表正文 Ch"; margin-top:6.0pt; margin-right:0cm; margin-bottom:6.0pt; margin-left:3.0cm; text-indent:-34.0pt; mso-pagination:widow-orphan lines-together; page-break-after:avoid; mso-outline-level:3; mso-list:l1 level3 lfo1; tab-stops:42.0pt list 3.0cm; font-size:14.0pt; mso-bidi-font-size:12.0pt; font-family:Tahoma; mso-fareast-font-family:黑体; mso-bidi-font-family:"Times New Roman"; mso-bidi-font-weight:normal; mso-no-proof:yes;} h4 {mso-style-name:"标题 4\,H4\,Ref Heading 1\,rh1\,Heading sql\,sect 1\.2\.3\.4\,h4\,First Subheading\,Level 2 - a\,Heading 4\.\,PIM 4\,Map Title\,- Minor Side\,4\,4heading\,sect 1\.2\.3\.41\,Ref Heading 11\,rh11\,sect 1\.2\.3\.42\,Ref Heading 12\,rh12\,sect 1\.2\.3\.411\,Ref Heading 111\,rh111\,rh13\,dash"; mso-style-next:"正文缩进\,Normal Indent Char\,Normal Indent Char1 Char\,Normal Indent Char Char Char\,Normal Indent Char1 Char Char Char\,Normal Indent Char Char Char Char Char\,Normal Indent Char1 Char Char Char Char Char\,特点 Char Char\,Normal Indent Char1\,特点 Char\,表正文 Ch"; margin-top:6.0pt; margin-right:0cm; margin-bottom:6.0pt; margin-left:35.4pt; text-indent:-35.4pt; mso-pagination:widow-orphan lines-together; page-break-after:avoid; mso-outline-level:4; mso-list:l1 level4 lfo1; tab-stops:list 54.0pt left 63.0pt; font-size:12.0pt; font-family:Tahoma; mso-fareast-font-family:黑体; mso-bidi-font-family:"Times New Roman"; mso-bidi-font-weight:normal; mso-no-proof:yes;} p.MsoHeading8, li.MsoHeading8, div.MsoHeading8 {mso-style-next:正文; margin-top:12.0pt; margin-right:0cm; margin-bottom:3.2pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:133%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:8; font-size:12.0pt; font-family:Arial; mso-fareast-font-family:黑体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} p.MsoToc1, li.MsoToc1, div.MsoToc1 {mso-style-update:auto; mso-style-next:正文; margin-top:6.0pt; margin-right:0cm; margin-bottom:6.0pt; margin-left:0cm; mso-pagination:none; tab-stops:62.95pt right dotted 453.05pt; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; text-transform:uppercase; mso-font-kerning:1.0pt; font-weight:bold; mso-bidi-font-weight:normal; mso-no-proof:yes;} p.MsoToc2, li.MsoToc2, div.MsoToc2 {mso-style-update:auto; mso-style-next:正文; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:10.5pt; margin-bottom:.0001pt; mso-pagination:none; tab-stops:62.95pt right dotted 453.05pt; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; font-variant:small-caps; mso-font-kerning:1.0pt; mso-no-proof:yes;} p.MsoToc3, li.MsoToc3, div.MsoToc3 {mso-style-update:auto; mso-style-next:正文; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:21.0pt; margin-bottom:.0001pt; mso-pagination:none; tab-stops:84.0pt right dotted 453.05pt; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt; font-style:italic; mso-bidi-font-style:normal; mso-no-proof:yes;} p.MsoToc4, li.MsoToc4, div.MsoToc4 {mso-style-update:auto; mso-style-next:正文; margin-top:0cm; margin-right:0cm; margin-bottom:0cm; margin-left:62.95pt; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; tab-stops:126.0pt right dotted 453.05pt; font-size:10.5pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt; mso-no-proof:yes;} p.MsoNormalIndent, li.MsoNormalIndent, div.MsoNormalIndent {mso-style-name:"正文缩进\,Normal Indent Char\,Normal Indent Char1 Char\,Normal Indent Char Char Char\,Normal Indent Char1 Char Char Char\,Normal Indent Char Char Char Char Char\,Normal Indent Char1 Char Char Char Char Char\,特点 Char Char\,Normal Indent Char1\,特点 Char\,表正文 Ch"; margin:0cm; margin-bottom:.0001pt; text-indent:22.7pt; line-height:150%; mso-pagination:none; font-size:12.0pt; font-family:Tahoma; mso-fareast-font-family:宋体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} p.MsoHeader, li.MsoHeader, div.MsoHeader {mso-style-update:auto; mso-style-noshow:yes; margin:0cm; margin-bottom:.0001pt; text-align:center; mso-pagination:none; tab-stops:center 207.65pt right 415.3pt; layout-grid-mode:char; border:none; mso-border-bottom-alt:solid windowtext .75pt; padding:0cm; mso-padding-alt:0cm 0cm 1.0pt 0cm; font-size:9.0pt; font-family:宋体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} p.MsoFooter, li.MsoFooter, div.MsoFooter {mso-style-update:auto; mso-style-noshow:yes; margin:0cm; margin-bottom:.0001pt; text-align:center; mso-pagination:none; tab-stops:center 207.65pt right 415.3pt; layout-grid-mode:char; border:none; mso-border-top-alt:solid windowtext 1.0pt; padding:0cm; mso-padding-alt:1.0pt 0cm 0cm 0cm; font-size:9.0pt; font-family:Tahoma; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} p.MsoCaption, li.MsoCaption, div.MsoCaption {mso-style-noshow:yes; mso-style-next:正文; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.0pt; font-family:Arial; mso-fareast-font-family:黑体; mso-font-kerning:1.0pt;} p.MsoBodyText, li.MsoBodyText, div.MsoBodyText {mso-style-noshow:yes; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:12.0pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:仿宋_GB2312; mso-font-kerning:1.0pt;} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} p.a, li.a, div.a {mso-style-name:列出段落; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; text-indent:21.0pt; mso-char-indent-count:2.0; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:Calibri; mso-fareast-font-family:宋体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} p.StyleHeading1H1Heading0R1H11h1Level1TopicHeadingSectio, li.StyleHeading1H1Heading0R1H11h1Level1TopicHeadingSectio, div.StyleHeading1H1Heading0R1H11h1Level1TopicHeadingSectio {mso-style-name:"Style Heading 1H1Heading 0R1H11h1Level 1 Topic HeadingSectio\.\.\."; mso-style-parent:"标题 1\,H1\,Heading 0\,R1\,H11\,h1\,Level 1 Topic Heading\,Section Heading\,Level 1\,PIM 1\,dd heading 1\,dh1\,H12\,H111\,H13\,H112\,Section Head\,1st level\,l1\,1\,H14\,H15\,H16\,H17\,Head1\,Heading apps\,Level 1 Head\,LN\,章节\,heading 1\,Arial 14 Fett\,Arial 14 Fett1\,Header 1"; mso-style-next:"正文缩进\,Normal Indent Char\,Normal Indent Char1 Char\,Normal Indent Char Char Char\,Normal Indent Char1 Char Char Char\,Normal Indent Char Char Char Char Char\,Normal Indent Char1 Char Char Char Char Char\,特点 Char Char\,Normal Indent Char1\,特点 Char\,表正文 Ch"; margin-top:12.0pt; margin-right:0cm; margin-bottom:12.0pt; margin-left:21.25pt; text-indent:-6.85pt; page-break-before:always; mso-pagination:widow-orphan lines-together; page-break-after:avoid; mso-outline-level:1; mso-list:l1 level1 lfo1; tab-stops:list 50.4pt; font-size:16.0pt; mso-bidi-font-size:10.0pt; font-family:Tahoma; mso-fareast-font-family:黑体; mso-font-kerning:1.0pt; font-weight:bold;} p.StyleHeading8BoldLeft051cmHanging1152ch, li.StyleHeading8BoldLeft051cmHanging1152ch, div.StyleHeading8BoldLeft051cmHanging1152ch {mso-style-name:"Style Heading 8 + 黑体 五号 Bold Left\: 0\.51 cm Hanging\: 11\.52 ch\.\.\."; mso-style-parent:"标题 8"; mso-style-next:"正文缩进\,Normal Indent Char\,Normal Indent Char1 Char\,Normal Indent Char Char Char\,Normal Indent Char1 Char Char Char\,Normal Indent Char Char Char Char Char\,Normal Indent Char1 Char Char Char Char Char\,特点 Char Char\,Normal Indent Char1\,特点 Char\,表正文 Ch"; margin-top:0cm; margin-right:0cm; margin-bottom:12.0pt; margin-left:35.45pt; text-align:center; text-indent:-21.0pt; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:8; mso-list:l3 level1 lfo2; tab-stops:list 35.4pt; font-size:10.5pt; mso-bidi-font-size:10.0pt; font-family:黑体; mso-hansi-font-family:Tahoma; mso-bidi-font-family:宋体; font-weight:bold;} p.Figure, li.Figure, div.Figure {mso-style-name:Figure; mso-style-next:题注; margin-top:6.0pt; margin-right:0cm; margin-bottom:0cm; margin-left:0cm; margin-bottom:.0001pt; text-align:center; mso-pagination:widow-orphan; page-break-after:avoid; font-size:10.0pt; font-family:Arial; mso-fareast-font-family:"Times New Roman"; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:14.0pt; mso-fareast-language:EN-US;} p.Tabletext, li.Tabletext, div.Tabletext {mso-style-name:Tabletext; margin-top:0cm; margin-right:0cm; margin-bottom:6.0pt; margin-left:0cm; line-height:12.0pt; mso-pagination:lines-together; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-fareast-language:EN-US;} p.a0, li.a0, div.a0 {mso-style-name:项目内容; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; text-indent:0cm; line-height:150%; mso-pagination:none; tab-stops:list 18.0pt; font-size:12.0pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:73.7pt 2.0cm 62.35pt 3.0cm; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-page-numbers:roman-lower 1; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} @page Section2 {size:595.3pt 841.9pt; margin:73.7pt 2.0cm 62.35pt 3.0cm; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-page-numbers:1; mso-paper-source:0; layout-grid:15.6pt;} div.Section2 {page:Section2;} /* List Definitions */ @list l0 {mso-list-id:900333923; mso-list-type:hybrid; mso-list-template-ids:-791498938 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:43.7pt; mso-level-number-position:left; margin-left:43.7pt; text-indent:-21.0pt; font-family:Wingdings;} @list l1 {mso-list-id:1125654702; mso-list-template-ids:1036018318;} @list l1:level1 {mso-level-style-link:"标题 1"; mso-level-text:第%1章; mso-level-tab-stop:50.4pt; mso-level-number-position:center; margin-left:21.25pt; text-indent:-6.85pt;} @list l1:level2 {mso-level-style-link:"标题 2"; mso-level-text:"%1\.%2"; mso-level-tab-stop:77.45pt; mso-level-number-position:left; margin-left:70.35pt; text-indent:-1.0cm;} @list l1:level3 {mso-level-style-link:"标题 3"; mso-level-text:"%1\.%2\.%3"; mso-level-tab-stop:3.0cm; mso-level-number-position:left; margin-left:3.0cm; text-indent:-34.0pt; font-family:Tahoma;} @list l1:level4 {mso-level-style-link:"标题 4"; mso-level-text:"%1\.%2\.%3\.%4"; mso-level-tab-stop:54.0pt; mso-level-number-position:left; margin-left:35.4pt; text-indent:-35.4pt;} @list l1:level5 {mso-level-text:"%1\.%2\.%3\.%4\.%5"; mso-level-tab-stop:157.05pt; mso-level-number-position:left; margin-left:127.55pt; text-indent:-42.5pt;} @list l1:level6 {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6"; mso-level-tab-stop:178.3pt; mso-level-number-position:left; margin-left:163.0pt; text-indent:-2.0cm;} @list l1:level7 {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7"; mso-level-tab-stop:217.55pt; mso-level-number-position:left; margin-left:191.35pt; text-indent:-63.8pt;} @list l1:level8 {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8"; mso-level-tab-stop:238.8pt; mso-level-number-position:left; margin-left:219.7pt; text-indent:-70.9pt;} @list l1:level9 {mso-level-text:"%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9"; mso-level-tab-stop:278.1pt; mso-level-number-position:left; margin-left:255.1pt; text-indent:-85.0pt;} @list l2 {mso-list-id:1417945749; mso-list-type:hybrid; mso-list-template-ids:-902509918 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l2:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:42.0pt; mso-level-number-position:left; margin-left:42.0pt; text-indent:-21.0pt; font-family:Wingdings;} @list l3 {mso-list-id:1631088675; mso-list-type:hybrid; mso-list-template-ids:1777374396 -1 -1 -1 -1 -1 -1 -1 -1 -1;} @list l3:level1 {mso-level-style-link:"Style Heading 8 + 黑体 五号 Bold Left\: 0\.51 cm Hanging\: 11\.52 ch\.\.\."; mso-level-text:"图 %1"; mso-level-tab-stop:35.4pt; mso-level-number-position:left; margin-left:35.4pt; text-indent:-21.0pt; mso-ansi-font-size:10.5pt; mso-bidi-font-size:10.5pt;} @list l3:level2 {mso-level-number-format:alpha-lower; mso-level-text:"%2\)"; mso-level-tab-stop:42.0pt; mso-level-number-position:left; margin-left:42.0pt; text-indent:-21.0pt;} @list l3:level3 {mso-level-number-format:roman-lower; mso-level-tab-stop:63.0pt; mso-level-number-position:right; margin-left:63.0pt; text-indent:-21.0pt;} @list l3:level4 {mso-level-start-at:5; mso-level-text:"%4\)"; mso-level-tab-stop:81.0pt; mso-level-number-position:left; margin-left:81.0pt; text-indent:-18.0pt;} @list l3:level5 {mso-level-number-format:alpha-lower; mso-level-text:"%5\)"; mso-level-tab-stop:105.0pt; mso-level-number-position:left; margin-left:105.0pt; text-indent:-21.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

 

第1章 文档介绍

1.1   文档目的

本文档目的是携程公司度假产品 ONLINE 预订改版项目的架构设计,本文档将重点描述此项目开发中使用的技术架构。

1.2   文档范围

包括了该项目的开发背景、目标、范围,以及架构模式的概要描述。

1.3   读者对象

本说明书的预期读者为项目项目管理人员、业务或需求分析人员、开发人员、测试人员。

1.4   参考文档

l        《方案建议书 .doc

l        《项目规划文档 .doc

l        《项目结构 .doc

l        《目标范围说明书 .doc

l        《需求说明书 .doc

1.5   术语与缩写

预订系统 即度假产品 ONLINE 预订改版项目

第2章          项目概述

2.1        项目背景

作为中国领先的综合性旅行服务公司,携程旅行网向超过一千余万注册会员提供包括酒店预订、度假产品预订、度假预订、特惠商户以及旅游资讯在内的全方位旅行服务。随着业务量的不断扩展,访问人数的持续上涨,当前携程旅行网外部门户。

本项目也就是度假产品ONLINE 预订改版项目是内部业务系统改造,项目将会为携程公司提供新的度假产品预订功能,采用微软.Net 体系统架构来有效地提高系统的可维护性,性能以及可扩展性。 此外,通过度假产品 ONLINE 预订改版项目的建设来建成一个通用的基础框架,实现通用的功能,为今后其它系统的改造奠定一个坚实的基础,并能够与原系统无缝地整合起来,并以统一的规范和标准来规划实现这种集成和建设。

2.2        项目目标

本项目中需要实现的功能范围主要是使用 .NET 体系架构来重构度假产品 ONLINE 预订系统。

另外,在完成上述功能范围的同时能够构建统一通用可扩展的基础架构,包括错误管理架构,逻辑日志架构,数据库通用架构等等,同时要性能调优也是本项目中重要的目标之一,无论在实现功能上,构建架构上还是提供的接口中都是以提升性能为目标。

2.3        功能范围

本项目将包括以下功能模块:

l        度假产品 ONLINE 预订 WEB 系统

第3章          词汇表

最终用户:指使用 www.ctrip.com 网站进行在线预订的外部用户。

第4章          架构描述

4.1        系统现有架构

目前度假业务系统的主要架构为 ASP+DB 的两层架构,其中 ASP 包括了页面显示 , 页面操作处理 , 部分逻辑处理等功能。而 DB 层通过存储过程 , 包含了大部分的商业处理逻辑 , 主要通过分层的存储过程调用来实现对数据的查询和事务处理 . 最底层的存储过程负责对表的修改 , 插入 , 删除操作 , 并控制事务和锁超 时等。

 

4.1.1    现有架构分析

客户端 (Users 终端用户 )

目前公司系统的客户端主要以 WEB 浏览器为主 , 通过 Internet 网络 , 或者公司局域网 (Intranet) 来访问 Web 服务器,跟公司业务系统进行数据交换 .

WEB 服务器端

服务器采用 IIS Server 作为 Web 平台,从架构上来说比较单一,分为表现层和数据接口两部分。

表现层从访问的层次和顺序上分为 : 页面 + 共享脚本库 两大部分 . 其中页面主要由 ASP+HTML 混合编码组成,页面处理逻辑和部分商业逻辑混合在其中 . 共享脚本库根据业务的划分 , 将某些可以模块化调用的公共函数抽取出来,以共享 ASP 文件的方式存放在服务器上 , Include 指令在 ASP 页面代码中引入处理。

数据接口主要以一个独立共享脚本文件实现 , 该脚本封装了一些数据库访问的敏感信息 , 并可以通过共享相应函数 , 针对对应的数据库服务器 , 返回不同的 ADO 连接对象 (ADOConnection object). 调用者需要访问某个数据库服务器,直接调用函数,获得该数据库的连接对象。

数据实体指的是在系统中可以传递和共享的数据对象。基于 ASP 框架和 ADO 的原因 , 这里主要采用 ADO RecordSet 对象作为数据实体 .Record Set 对象主要用来访问数据库 , 并将查询结果和处理结果输出给调用 ASP 程序。大部分的 Sql 语句混合在调用 RecordSet 的过程中。表现层、共享脚本库里都有大量的 Sql 语句和 RecordSet 对象的引用。

数据库作为最主要的数据源 , 在现有系统中承担了很多工作和任务。随着业务的发展根据业务的不同,拆分了不同的数据库 . 每个数据库从架构和功能上来看,可基本分为三部分 :

业务逻辑层

现有系统的很多业务逻辑处理,都以存储过程的方式在数据库中实现。

该层也借鉴了多层架构的一些方式,将存储过程依次划分大概三个层次 :

调用层 ( SP1 开头 )

该层主要供 ASP 直接调用,负责处理输入输出参数,将查询结果返回给调用者,并处理部分业务逻辑。

逻辑层 (SP2 开头 )

SP1 调用,进一步处理业务逻辑。

底层数据访问 (SP3 开头,由工具生成 )

SP1 SP2 调用 , 直接对数据库表进行访问。该层通过设置锁超时等参数避免死锁或锁表时间过长导致的性能损失。

4.2   度假 Online 预订系统架构设计

Online 预订系统采用比较通用的 .NET 多层架构,并结合公司的一些情况作了一定的修改和设计。

架构设计框图如下:

4.2.1    度假 Online 预订系统架构设计说明

1. 客户端 (Users 终端用户 )

客户端以浏览器为主,同以前系统相比无太大变化。因此客户端的访问主要以两种方式进行:

( 浏览器 )

1/01/clip_image007.gif" alt="" width="449" height="387" />  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


表现层:是系统的 UI 部分,负责展示给客户且使客户与系统进行交互。在这一层中,理想的状态是不包含业务逻辑,表示层逻辑代码只应与界面元素有关。度假 Online 预订系统中表示层采用 Asp.net2.0 来设计,其中包含许多 Web 服务器端控件及客户端控件。

业务逻辑层:是整个系统的核心,它与系统的业务息息相关。度假 Online 预订系统业务逻辑层的设计均和公司度假业务相联系,例如度假产品查询,生成订单,订单提交等等。涉及数据访问时,则调用数据访问层。

数据访问层:有时也称为持久层,其功能主要是负责数据库访问。也就是实现对数据库表的 Select Insert Update Delete 等操作。如果是 ORM ,则还会包括对象和数据表之间的 mapping ,以及对象实体的持久化。在度假 Online 预订系统中不使用 ORM 。度假 Online 预订系统中将使用 Enterprice Library2.0 DataAccessBlock ,在这个 Block 上层开发自己的代码作为数据访问层。

4.2.2.1         表现层 WebForm

表现层的设计可以给系统客户最直接的体验和最十足的信心。当产品交付用户时,如果在用户界面上缺乏吸引人的特色,界面不友好,操作不够体贴,即使产品性能非常优异,架构设计合理,业务逻辑都满足用户需求,却仍然难以使用户满意。因此表现层就好比人的衣装,代表着整个系统的身份与脸面,是招徕“顾客”的最大卖点。

度假 Online 预订系统表现层将采用 WebForm 形式,通过 Code-Behind 技术将页面 html c #代码的分离,便于开发人员及设计人员分工协作,专注于属于自己的工作。

Web 页面中采用 Asp.net 用户控件构建,充分利用面向对象思想,通过封装与继承构建控件对象,实现这些控件的重用。

Web 页面相关的元素,比如 CSS,JS 等,都可作为 WebForm 的组成部分处理,用来处理和校验用户的页面操作的脚本代码可单独列出来作为一层(即目前的 WebResource 项目),原业务系统中的共享脚本库,也可以考虑移植到该层。

MasterPage 相当于 Web 站点的一个模版,它可以包含静态文本、 html 元素、服务器端控件。使用 MasterPage 可以为网站建立一个统一的样式,且能够利用它方便的创建一组控件和代码,然后将其应用于一组页面。考虑到目前度假预订系统需要加载合作频道的头尾文件及样式, MasterPage 将采用动态加载配置的方式实现。使用简单工厂及 Builder 模式加载不同的合作频道头尾文件。配置文件包含合作频道需加载的样式等资源,当样式更改时只需更改配置文件而不必重新编译代码,配置文件采用文件依赖 Cache ,当文件更改时 Cache 项自动失效。默认加载 Ctrip 头尾,当检测到客户来自其他域名时,再启动动态加载方式,加载对应域名的头尾控件。

目前度假 Online 预订系统存在英文版及中文版两个版本,为了最大限度的重用表现层逻辑代码,考虑采用 MVP MVPC 模式,封装分布在表现层的逻辑。 MPV 模式和 MVC 很相似,是在 MVC 模式的基础上针对如 ASP.NET 这样的支持事件模式的页面作了调整。 MVP Model-View-Presenter ,其结构图如下:

MVP 中的 View webform 表现页,它并不知道 Presenter 的存在,且不包含任何的逻辑, View 所有的逻辑都抽离到 Presenter 中, View 只负责转发事件和显示数据。 Model 不需要和 View 有任何联系, Presenter 控制一切,它包含 View 的接口和 Model 的接口,处理相应的 Model View 事件,同时刷新 View 及操作 Model

考虑采用 MVP 模式的主要目的是为了使中文版,英文版或将来的 webservice winform 程序能够重用页面逻辑代码,减少开发人员开发和维护的工作量。同时可将 Presenter 层作为独立于页面的单元测试项目,使表现层单元测试不再依赖于页面。

4.2.2.2         业务逻辑层

业务逻辑层是系统架构中体现核心价值的部分。它是业务规则的制定、流程实现等与业务需求有关的系统设计。业务逻辑层处于表现层和数据访问层之间,起到了数据交互中承上启下的作用。业务逻辑层的设计对于一个可扩展架构来说尤为重要,因为它既是表现层的被调用者,又是数据访问层的调用者。依赖和被依赖的关系都在业务逻辑层上体现。

度假 Online 预订系统业务逻辑层将分为五个项目,即业务逻辑外观项目、工厂及策略链项目、公用接口项目、策略类项目、业务逻辑依赖项目。其中业务逻辑外观项目采用外观模式进行封装供表现层调用,也即业务逻辑层的上层出口。处理逻辑复杂且有序的业务逻辑步骤可使用策略链模式封装供外观层调用其中接口放在公用接口项目,策略类放在策略类项目,策略链和生成策略链的工厂放在工厂及策略链项目。策略类调用的数据访问通过业务逻辑依赖项目实现,策略类不直接调用数据访问层。对于简单的业务逻辑放在业务逻辑依赖项目,可直接由外观层调用,且可直接调用数据访问层。业务逻辑层会使用大量设计模式来封装业务逻辑,其中的工厂模式,策略模式,外观模式,职责链最为常见。

4.2.2.3         数据访问层

数据访问层 采用 Enterprise Library 中数据访问模块,并对其进行封装。数据访问层中采用一个类作为数据访问层的出口,一个以 cmd 结尾的 cs 文件为使用 sql 语句操作数据库的方法,一个以 sp 结尾的 cs 文件为使用 sp 操作数据库的方法,以 ProductDB 为例, PKGProductDB.cs ProductDB 的数据访问层出口,供业务逻辑层调用, PKGProductDBCMD.cs 封装使用 sql 语句的方法, PKGProductDBSP.cs 封装使用存储过程操作数据库的方法。数据访问层当涉及插入、更新及删除数据时应使用存储过程,复杂查询也应使用存储过程以提高数据访问层效率。

查询返回尽量使用 DataReader 读取数据库数据,在数据访问层将数据装入数据实体或实体集合,同时显式关闭 DataReader ,以断开数据库链接。频繁操作的数据可采用 Cache 机制存储,提高数据访问层性能及减少访问数据库次数。

数据访问层分为公共数据访问及度假数据访问两个项目,全站共用的数据访问方法放在公共数据访问项目,度假项目使用的数据访问放在度假数据访问项目。

4.2.2.4         数据实体层

数据实体类即数据库中数据采用面向对象方式访问的封装,在层与层之间进行传递的数据采用数据实体类或数据实体类集合封装。数据实体类对应数据库中的数据表,它们没有行为,仅用于表现数据。同数据访问层一样,数据实体也分为公共数据实体和度假项目数据实体,其分类与数据实体层相同。

数据实体对象不具有持久化的功能,它们是作为数据的载体,便于业余逻辑针对相应数据进行读 / 写操作。虽然这些数据实体类的属性分别映射了数据表的列,而每一个对象也恰恰对应于数据表的每一行,但这些数据实体并不具备对象数据库访问的能力。实体层贯穿整个解决方案,可被任一层引用。

4.2.2.5         MSMQ( 消息队列 异步处理 )

原系统中,不同数据库服务器之间的数据交换和更新,是通过数据库提供的 JOB 来进行,这样对数据库的负载有一定影响 , 灵活度方面也欠佳。采用消息队列的异步分发处理机制,可以将业务系统一些基于流程的处理,进行的更灵活,实时性更强 .

消息队列提供了一个异步处理消息和数据的平台,其作用是在度假 Online 预订系统中负责将数据在不同的数据库服务器之间进行交换,例如将订单等数据从 OnlineDB 转移到 OfflineDB ,当数据到达 OfflineDB 时即标识为可处理订单。

MSMQ 的设计请参考《消息队列服务设计说明书 .doc 》。

MSMQ 中度假业务逻辑层的调用,采用可配置方式完成,配置文件包含数据库表名、列名、每列的数据类型、插入时使用的 SP 名称、查询时用到的 SQL 语句。反序列化配置文件为一个 class ,并采用文件依赖 Cache 缓存这个 class ,通过对这个 class 的迭代生成 MSMQ 读取数据和插入数据操作的命令,供数据访问层调用。插入过程中使用 EL 事务完成。

4.2.2.6         异常处理

EL 中异常处理模块提供了一种简单机制,允许开发人员按照一致的方式处理异常。异常处理使开发人员和决策人员能够针对发生在企业应用程序体系结构层的异常处理创建一致的策略。它使开发人员能够创建自己的异常处理程序,以一致的方式调用异常处理程序,可以在应用程序之中和之间的多种场合下使用。

在处理关联的异常类型时就可以执行一系列处理程序。通过异常处理程序格式化异常信息,例如消息和堆栈跟踪等。然后,日志处理程序将该信息提供给企业程序库日志和规范应用程序块 (Logging and Instrumentation Application Block) ,以便可以将它发布给系统设计的运行观察平台 (Trace  Window) ,便于开发人员分析和处理异常来源及找出异常发生的原因。

异常处理模块还可以避免在不经意的时候,对外部的调用者泄漏敏感信息,提高系统的封装性及安全性。

4.2.2.7         日志 处理

开发人员经常编写需要日志和规范功能的应用程序。通常,这些应用程序必须适当地格式化事件和记录事件,不论是在本地还是通过网络。在某些情况下,可能需要对一台计算机上来自多个源的事件进行整理。

日志和规范应用程序块通过收集应用程序需要包含的多个最常见的日志和规范任务来简化应用程序的开发。每个任务都以一致的方式处理,并从特定的日志和规范提供程序中抽象应用程序代码。

体系结构模型可让通过更改配置来更改基础事件接收器和格式化程序,而无需更改应用程序代码。程序日志目前可通过事件日志、电子邮件、数据库、消息队列、文件、 WMI 来输出,也可自行定义。度假 Online 预订系统中可以考虑将系统运行中产生的异常信息,诊断信息通过日志应用发布给我们的外部运行观察平台 (Trace  Window)

日志记录还可用于记录用户在网站的各步操作,分析用户行为。

4.2.2.8         缓存应用程序块

该应用块主要用来提高系统运行效率,通过分配内存缓存一些常用的不经常改变的数据,或者对实时性要求不高的数据,以提高系统的性能。

它支持内存缓存和后备存储(可选),后者可以是企业程序库数据访问应用程序块或独立存储。应用程序块无需修改即可使用,它还可以提供检索、添加和删除缓存数据所需的全部功能。可配置的过期时间与清除策略也是应用程序块的一部分功能。在度假 Online 预订项目中,缓存可以考虑页面缓存等技术,将查询到的对实时性要求不高的数据,以静态页面的形式提供给用户。

使用 EL 的缓存模块时主要有三种类型的缓存,即动态缓存、静态缓存和文件依赖缓存。静态缓存用于缓存相对静态的数据,如城市信息等,这种数据过期时间较长。动态缓存用于存储相对动态的数据,如度假产品数据,这种数据过期时间相对较短。

缓存数据过期后系统自动清除, Cache 数量达到上限时 Cache 管理模块将通过优先淘汰项自动清除,也可手工清除过期的 Cache 内容。

4.2.3    数据库

数据库架构方面目前改版变化不大,具体结构参见原先系统架构。

由于携程系统的复杂性和一些历史的原因,数据库方面会根据新业务和提高效率的需要,改变部分数据结构和提取部分商业逻辑到业务逻辑层。在分析业务的基础上,将一些目前数据库处理的一些工作,比如数据的更新、同步等功能 ( 目前通过 JOB 来进行 ) ,通过异步消息队列的方式分离出来。

4.2.4    外部支持平台

为保障系统的正常运行,对系统运行时产生的异常、日志进行实时的监控,观察,处理是很有必要的。通过微软企业库的支持,可以将这些信息进行格式化输出后,报告给外部支持平台。外部支持平台主要用来保证系统运行,监控系统运行状况,对系统进行配置管理,以及基于消息队列的转发服务等。

4.2.4.1         运行观察台 (Trace Window)

系统运行时会产生一些异常、错误,以及开发员根据需要写的日志等。这些信息通过微软企业库可以通过指定的方式发送到外部,建立一个运行观察台,它的主要目的是为了达到收集、处理、观察上述信息。

以上架构是度假 Online 预订项目初步的设计,其中很多细节性的东西需要在具体业务的详细分析中落实,某些具体技术的应用,例如缓存、日志、异常等需要进一步讨论细化。

posted @ 2011-05-23 22:55  WEB开发狂  阅读(477)  评论(0编辑  收藏  举报