一種基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的題庫建模方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)建模技術(shù)領(lǐng)域,尤其涉及一種基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的題庫建模方法及系統(tǒng)。
【背景技術(shù)】
[0002]考試題庫的建立是遵循一定的教育理論,利用計(jì)算機(jī)技術(shù)生成涵概某學(xué)科的某些試題課程所有知識(shí)點(diǎn)的有機(jī)組合。對(duì)于考試題庫建模,人們往往認(rèn)為其題型數(shù)據(jù)規(guī)范、交互簡單,而忽略其對(duì)象建模過程。
[0003]目前,絕大多數(shù)的題庫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)是以面向關(guān)系數(shù)據(jù)的數(shù)據(jù)建?!,F(xiàn)有技術(shù)主要存在以下問題:
[0004]1、面向數(shù)據(jù)的建模方式,對(duì)象之間缺少衍生關(guān)系,代碼重用差;
[0005]2、題庫系統(tǒng)隨著題型和數(shù)量不斷增加,用戶個(gè)性化需求不斷,以及外界系統(tǒng)的交互日益頻繁,面向數(shù)據(jù)建模和關(guān)系數(shù)據(jù)庫存儲(chǔ)的適應(yīng)性、可擴(kuò)展性、可維護(hù)性都面臨挑戰(zhàn),不能很好適應(yīng)題型和業(yè)務(wù)需求的不斷變化;
[0006]3、關(guān)系數(shù)據(jù)庫對(duì)于面向?qū)ο蟮脑O(shè)計(jì)具有天然的阻抗,導(dǎo)致數(shù)據(jù)模型無法高效還原題目對(duì)象建模過程中的關(guān)聯(lián)和繼承關(guān)系;
[0007]4、跨表、聯(lián)表查詢不斷增多,若要查詢一套完整題目,需要聚合多張表的數(shù)據(jù),而且需要額外的結(jié)構(gòu)來存儲(chǔ)題型與表的對(duì)應(yīng)關(guān)系。
【發(fā)明內(nèi)容】
[0008]鑒于上述問題,本發(fā)明提出了一種克服上述問題或者至少部分地解決上述問題的基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的題庫建模方法及系統(tǒng),以構(gòu)建可重用、健壯的題庫建模架構(gòu),最大限度利用各類數(shù)據(jù)庫的特點(diǎn)和合理的適用場(chǎng)景,實(shí)現(xiàn)各類數(shù)據(jù)的有效、高效存儲(chǔ),簡化系統(tǒng)設(shè)計(jì)架構(gòu),提高系統(tǒng)分布的可擴(kuò)展性。
[0009]根據(jù)本發(fā)明的一個(gè)方面,提供了一種基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的題庫建模方法,該方法包括:
[0010]采用領(lǐng)域驅(qū)動(dòng)技術(shù)將題庫系統(tǒng)進(jìn)行架構(gòu)劃分,得到領(lǐng)域?qū)印?yīng)用層和基礎(chǔ)設(shè)施層;
[0011]采用領(lǐng)域?qū)咏9ぞ吒鶕?jù)題庫系統(tǒng)中的題目、課程以及答題記錄對(duì)所述領(lǐng)域?qū)舆M(jìn)行領(lǐng)域建模,得到領(lǐng)域模型;
[0012]根據(jù)所述領(lǐng)域模型的數(shù)據(jù)特征,依據(jù)預(yù)設(shè)策略確定相應(yīng)的基礎(chǔ)設(shè)施層的存儲(chǔ)數(shù)據(jù)庫;
[0013]根據(jù)基礎(chǔ)設(shè)施層中存儲(chǔ)數(shù)據(jù)的類型,將不同類型的存儲(chǔ)數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的存儲(chǔ)數(shù)據(jù)庫中。
[0014]其中,所述采用領(lǐng)域?qū)咏9ぞ吒鶕?jù)題庫系統(tǒng)中的題目、課程以及答題記錄對(duì)所述領(lǐng)域?qū)舆M(jìn)行領(lǐng)域建模,包括:
[0015]為每一課程創(chuàng)建多個(gè)題目實(shí)體和至少一個(gè)套題實(shí)體,所述題目實(shí)體和每一套題實(shí)體通過題目ID值對(duì)象進(jìn)行關(guān)聯(lián);
[0016]根據(jù)所述題目實(shí)體,創(chuàng)建兩大子類,分別為原子題型和復(fù)合題型,所述復(fù)合題型為包含原子題型的集合;
[0017]根據(jù)每一原子題型的答題記錄,創(chuàng)建答題結(jié)果實(shí)體;
[0018]將所述答題結(jié)果實(shí)體和相應(yīng)的題目實(shí)體通過題目ID值對(duì)象和題目類型值對(duì)象進(jìn)tx關(guān)耳關(guān)。
[0019]其中,所述方法還包括:
[0020]分別為所述題目實(shí)體和套題實(shí)體增加一條item,并通過題目ID值對(duì)象建立所述題目實(shí)體或套題實(shí)體與對(duì)應(yīng)的item的關(guān)聯(lián)關(guān)系。
[0021]其中,當(dāng)答題提交后,所述方法還包括:
[0022]采用發(fā)布領(lǐng)域事件對(duì)答題記錄進(jìn)行封裝,并將該事件提交給所述基礎(chǔ)設(shè)施層的消息總線;
[0023]從消息總線中提取所述事件,根據(jù)事件提取結(jié)果,統(tǒng)計(jì)并更新當(dāng)前的答題統(tǒng)計(jì)信息。
[0024]其中,所述根據(jù)基礎(chǔ)設(shè)施層中存儲(chǔ)數(shù)據(jù)的類型,將不同類型的存儲(chǔ)數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的存儲(chǔ)數(shù)據(jù)庫中,包括:
[0025]將題目和套題數(shù)據(jù)采用文檔型數(shù)據(jù)庫MongoDB進(jìn)行存儲(chǔ);
[0026]將題目分類Category的樹形結(jié)構(gòu),采用目錄數(shù)據(jù)庫LDAP進(jìn)行存儲(chǔ);
[0027]將答題統(tǒng)計(jì)信息,采用關(guān)系數(shù)據(jù)庫MySQL進(jìn)行存儲(chǔ),并采用Redis數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)的讀取緩存。
[0028]根據(jù)本發(fā)明的另一個(gè)方面,提供了一種基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的題庫建模系統(tǒng),該系統(tǒng)包括:
[0029]架構(gòu)劃分模塊,用于采用領(lǐng)域驅(qū)動(dòng)技術(shù)將題庫系統(tǒng)進(jìn)行架構(gòu)劃分,得到領(lǐng)域?qū)?、?yīng)用層和基礎(chǔ)設(shè)施層;
[0030]領(lǐng)域建模模塊,用于采用領(lǐng)域?qū)咏9ぞ吒鶕?jù)題庫系統(tǒng)中的題目、課程以及答題記錄對(duì)所述領(lǐng)域?qū)舆M(jìn)行領(lǐng)域建模,得到領(lǐng)域模型;
[0031]數(shù)據(jù)庫確定模塊,用于根據(jù)所述領(lǐng)域模型的數(shù)據(jù)特征,依據(jù)預(yù)設(shè)策略確定相應(yīng)的基礎(chǔ)設(shè)施層的存儲(chǔ)數(shù)據(jù)庫;
[0032]數(shù)據(jù)存儲(chǔ)模塊,用于根據(jù)基礎(chǔ)設(shè)施層中存儲(chǔ)數(shù)據(jù)的類型,將不同類型的存儲(chǔ)數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的存儲(chǔ)數(shù)據(jù)庫中。
[0033]其中,所述領(lǐng)域建模模塊,包括:
[0034]第一實(shí)體創(chuàng)建單元,用于為每一課程創(chuàng)建多個(gè)題目實(shí)體和至少一個(gè)套題實(shí)體,所述題目實(shí)體和每一套題實(shí)體通過題目ID值對(duì)象進(jìn)行關(guān)聯(lián);
[0035]類創(chuàng)建單元,用于根據(jù)所述題目實(shí)體,創(chuàng)建兩大子類,分別為原子題型和復(fù)合題型,所述復(fù)合題型為包含原子題型的集合;
[0036]第二實(shí)體創(chuàng)建單元,用于根據(jù)每一原子題型的答題記錄,創(chuàng)建答題結(jié)果實(shí)體;所述答題結(jié)果實(shí)體和相應(yīng)的題目實(shí)體通過題目ID值對(duì)象和題目類型值對(duì)象進(jìn)行關(guān)聯(lián)。
[0037]其中,所述系統(tǒng)還包括:
[0038]Item創(chuàng)建模塊,用于分別為所述題目實(shí)體和套題實(shí)體增加一條item,并通過題目ID值對(duì)象建立所述題目實(shí)體或套題實(shí)體與對(duì)應(yīng)的item的關(guān)聯(lián)關(guān)系。
[0039]其中,所述系統(tǒng)還包括:
[0040]封裝模塊,用于當(dāng)答題提交后,采用發(fā)布領(lǐng)域事件對(duì)答題記錄進(jìn)行封裝,并將該事件提交給所述基礎(chǔ)設(shè)施層的消息總線;
[0041]統(tǒng)計(jì)模塊,用于從消息總線中提取所述事件,根據(jù)事件提取結(jié)果,統(tǒng)計(jì)并更新當(dāng)前的答題統(tǒng)計(jì)信息。
[0042]其中,所述數(shù)據(jù)存儲(chǔ)模塊,具體用于將題目和套題數(shù)據(jù)采用文檔型數(shù)據(jù)庫MongoDB進(jìn)行存儲(chǔ);將題目分類Category的樹形結(jié)構(gòu),采用目錄數(shù)據(jù)庫LDAP進(jìn)行存儲(chǔ);將答題統(tǒng)計(jì)信息,采用關(guān)系數(shù)據(jù)庫MySQL進(jìn)行存儲(chǔ),并采用Redis數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)的讀取緩存。
[0043]本發(fā)明的有益效果為:
[0044]本發(fā)明提供的基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的題庫建模方法及系統(tǒng),采用領(lǐng)域建模構(gòu)建可重用、健壯的題庫建模架構(gòu),題型的變化不會(huì)改變?cè)泻诵臉I(yè)務(wù)代碼;最大限度利用各類數(shù)據(jù)庫的特點(diǎn)和合理的適用場(chǎng)景,實(shí)現(xiàn)各類數(shù)據(jù)的有效、高效存儲(chǔ),降低了一味采用關(guān)系數(shù)據(jù)庫產(chǎn)生的關(guān)系對(duì)象阻抗對(duì)系統(tǒng)實(shí)現(xiàn)的難度;通過領(lǐng)域事件,實(shí)現(xiàn)統(tǒng)計(jì)等操作的事件模型建模和異步消息處理機(jī)制,簡化了系統(tǒng)設(shè)計(jì)架構(gòu),提高了系統(tǒng)分布的可擴(kuò)展性。
【附圖說明】
[0045]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0046]圖1為本發(fā)明實(shí)施例提出的一種基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的題庫建模方法的流程圖;
[0047]圖2為本發(fā)明實(shí)施例提出的題目實(shí)體對(duì)應(yīng)的類圖及相互交互關(guān)系的示意圖;
[0048]圖3為本發(fā)明實(shí)施例提出的一種基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的題庫建模系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0049]下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。
[0050]本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個(gè)”、“所述”和“該”也可包括復(fù)數(shù)形式。應(yīng)該進(jìn)一步理解的是,本發(fā)明的說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個(gè)或多個(gè)其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。
[0051]本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非