摘要:需要對每個用戶的每個內(nèi)容對象維護一個數(shù)據(jù)結(jié)構(gòu)。并沒有直接和相連,所以是將數(shù)據(jù)由暫存的內(nèi)存中取出。采用實現(xiàn)的可用進行數(shù)據(jù)提交。記錄的完成情況,包括未嘗試未學習未完成,已完成。
簡介
SCORM定義了一個網(wǎng)絡化學習的“內(nèi)容聚合模型”(Content Aggregaion Model)和學習對象的“實時運行環(huán)境”(Run-time Environment)。
簡單說,它是為了滿足對網(wǎng)絡化學習內(nèi)容的高水平要求而設計的模型,參考了一系列相關技術規(guī)范。
這個模型由內(nèi)容模型(Content Model)、元數(shù)據(jù)(Meta-data)和內(nèi)容包裝(Content Packaging)三部分組成。
Scorm RTE定義了通用的內(nèi)容對象運行機制,包括Launch、API以及Data Model。
Launch: 定義了內(nèi)容對象的發(fā)布,描述了如何啟動一個Scorm內(nèi)容對象(Asset和SCO兩種),并確立了內(nèi)容對象和LMS之間的通信機制。
API: 定義了LMS與內(nèi)容對象之間的通信API,使得內(nèi)容對象在需要時通過API與LMS進行交互存取數(shù)據(jù)。API會將獲得的數(shù)據(jù)模型實例存儲在用戶端的內(nèi)存中(如一個JavaScript對象),并在需要時將該數(shù)據(jù)發(fā)送至LMS平臺。
Data Model: 描述了跟蹤用戶學習通用數(shù)據(jù)模型,即內(nèi)容對象在與LMS進行通信時所依賴的數(shù)據(jù)結(jié)構(gòu),包括用戶的學習時間、完成狀態(tài)、成績等元素。LMS需要對每個用戶的每個內(nèi)容對象維護一個Data Model數(shù)據(jù)結(jié)構(gòu)。
API提供了內(nèi)容對象與LMS通信的接口,而DM則描述了通信所使用的數(shù)據(jù)模型,API+DM使得內(nèi)容對象在不同的LMS系統(tǒng)中具有了通用性。
更詳細的介紹請參考scorm百度百科和SCORM維基百科。
下面時自己查閱資料,歸納整理的SCORM標準中API接口和Data Model參數(shù)詳解,以便各位同行開發(fā)時查閱使用,也是自己學習過程的總結(jié)記錄,不正確之處請大家指正。
應用編程接口(API)在SCORM標準中,SCO(SharableContentObject)是LMS通過SCORMRTE(運行時間環(huán)境)可以跟蹤的最低粒度水平的學習資源,它們的通訊由APIAdapter(適配器)來完成。
API定義了八個主要的function,分別是LMSInitilize、LMSFinish、LMSSetValue、LMSGetValue、LMSCommit、LMSGetLastError、LMSGetErrorString、LMSGetDiagnostic,其中LMSGetValue和LMSSetValue最為復雜,也是跟蹤中使用頻率最高的,通訊過程中使用DataModel(數(shù)據(jù)模型)來記錄跟蹤信息。
LMSInitilizeLMSInitilize初始化函數(shù),負責在當前學習的內(nèi)容對象和LMS之間建立通信連接,并從LMS取得該當前用戶關于當前內(nèi)容對象的學習記錄信息,即整個DM數(shù)據(jù)結(jié)構(gòu)。內(nèi)容對象在載入時均會通過該方法獲得初始運行時數(shù)據(jù)。函數(shù)成功執(zhí)行返回"true”(字符串,非布爾值,下同),否則返回"false”。
當學習者進入開始閱讀一個SCO時,SCO第一步就是調(diào)用LMSInitialize判斷該學員之上課記錄,當學員第一次閱讀該門課的該SCO時,LMSInitialize就會將設定初值至相關的環(huán)境變量;若學習者并不是第一次閱讀該SCO,LMSInitialize則必須將該學習者之前的上課記錄取出,并存入環(huán)境變量中,如此即完成啟動SCO之動作。
LMSFinish結(jié)束函數(shù),結(jié)束一個內(nèi)容對象與LMS的通信連接。內(nèi)容對象在退出前均會調(diào)用該方法。通常實現(xiàn)時,該方法會調(diào)用LMSCommit提交一次最近的數(shù)據(jù)。當LMS平臺在API實現(xiàn)時,選擇HTTP協(xié)議進行無狀態(tài)通信,則該函數(shù)本身將不產(chǎn)生數(shù)據(jù)通信,僅僅是調(diào)用LMSCommit提交一次數(shù)據(jù)。成功執(zhí)行返回"true”,否則返回"false”。
當學習者閱讀完并要離開一個SCO時,在結(jié)束時SCO便會調(diào)用LMSFinish將環(huán)境變量重設,并判斷該SCO是否在結(jié)束之前己經(jīng)有調(diào)用過LMSCommit將所有記錄回存至LMS,若尚未儲存,則會自動調(diào)用并將所有學習者在該SCO的上課記錄回存。
LMSSetValue負責更新一個數(shù)據(jù)模型的屬性值。該方法原型為LMSSetValue(element, value),參數(shù)element標識要設置的屬性,value則是屬性的值。LMSSetValue 是相當復雜的Function,負責儲存所有相關的學習記錄,當SCO調(diào)用LMSSetValue欲將某個data model回存時,LMSSetValue第一步先判斷所欲回存之data model,判斷該data model是否可以set(寫入),其次判斷其型別,當型別錯誤時,記錄其Error Code,當型別檢查通過時,則依SCORM1.2 RTE所訂定該data model的處理規(guī)則,并將數(shù)據(jù)存入內(nèi)存中。例如,內(nèi)容對象在需要更改DM的某一屬性值時會調(diào)用該函數(shù),如當用戶完成學習一個內(nèi)容對象后需將該內(nèi)容對象的cmi.core.lesson_status更新為completed。通常該函數(shù)只是更新客戶端內(nèi)存中該屬性的值,而非直接提交至LMS平臺。函數(shù)成功執(zhí)行返回"true”,否則返回"false”。
LMSGetValueLMSGetValue獲取一個數(shù)據(jù)模型的屬性值。該方法原型為LMSGetValue(element),參數(shù)element,表示屬性名。通常該方法直接從客戶端內(nèi)存中取出所需的值。成功執(zhí)行則返回對應的屬性值,否則返回空字符串。當SCO調(diào)用LMSGetValue時,LMSSetValue會先判斷data model是否可以讀取,若不可讀取,則寫入其錯誤代碼;若該data model是可以讀取,則進取出其值并回傳給SCO。LMSSetValue并沒有直接和receiver相連,所以是將數(shù)據(jù)由暫存的內(nèi)存中取出。
LMSCommitLMSCommit提交函數(shù),負責將客戶端內(nèi)存中目前的RTE數(shù)據(jù)提交至LMS平臺,由平臺完成最后的分析寫入工作。所以當LMSCommit被調(diào)用時,會將所有之暫存數(shù)據(jù)組成XML文件,再應用XMLHTTP對象將數(shù)據(jù)POST到 Receiver,當Receiver收到這個Request時,就會解譯所傳入之XML文件,再將XML文件中的數(shù)據(jù)直接存入數(shù)據(jù)庫中。采用JS實現(xiàn)的API可用AJAX進行數(shù)據(jù)提交。成功返回"true”,否則返回"false”。
LMSGetLastErrorLMSGetLastError獲得錯誤碼,當內(nèi)容對象調(diào)用API時返回"false"或產(chǎn)生其他錯誤時,可調(diào)用該函數(shù)獲得具體的錯誤代碼,API實現(xiàn)中需要設置相應的錯誤碼。
LMSGetErrorStringLMSGetErrorString獲得錯誤碼對應的字符串說明,參數(shù)為錯誤碼。
LMSGetDiagnosticLMSGetDiagnostic獲得針對當前錯誤的診斷信息,參數(shù)為錯誤碼。
數(shù)據(jù)模型(Data Model)Scorm1.2 RTE數(shù)據(jù)模型部分定義了跟蹤內(nèi)容對象的數(shù)據(jù)結(jié)構(gòu)。LMS平臺需要為每個用戶的每個內(nèi)容單元維護一組數(shù)據(jù)模型實例,該實例數(shù)據(jù)記錄了該用戶對應于該內(nèi)容對象的學習狀態(tài)(如分數(shù)、進度、完成狀態(tài)等)。
DM中所有的屬性均以cmi開頭,以”.“分隔。同時數(shù)據(jù)模型中定了了三個關鍵字:children、_count,保留的關鍵字受LMS管理,且均為只讀(如使用LMSSetValue設置_version屬性,則會返回false,且API應在實現(xiàn)時將錯誤碼置為402)。
version: 標識了LMS平臺支持的數(shù)據(jù)模型版本,該屬性不可用于數(shù)據(jù)模型元素上(即只能以cmi._version方式獲取)
children:返回某一數(shù)據(jù)模型元素的所有子屬性(元素),以字符串形式返回,并以執(zhí)行的分隔符分隔
_count: 返回一個數(shù)據(jù)模型元素集合中包含的元素總數(shù),僅用于集合類型的數(shù)據(jù)模型
數(shù)據(jù)模型元素可以分為9類,如下:
要求所有的CMI系統(tǒng)都提供的信息,所有SCO在啟動運行時都需要這些信息,子數(shù)據(jù)項有:.Student ID(學生學號)、.Student Name(學生姓名)、.Output Mechanism(輸出機制)、.Lesson Location(課的位置)、.Credit(學分)、.Lesson Status(課的狀態(tài))、.Entry(入口)、.Information Store(信息存儲)、.Score(分數(shù))、.Total Time(總時間)、.Lesson Mode(課的模式);
1. cmi.core.total_time:這個參數(shù)是指學習本sco用的總時間,只能讀,不能寫,它由平臺自動累加,而在課程中只需上傳每次學習sco的時間,即回話時間(cmi.core.session_time),即可。當然,在從平臺讀取數(shù)據(jù)時,還是要取一次的。
var totalTime = doLMSGetValue("cim.core.total_time");
alert("您目前這個單元的總學習時長時間是:" + totalTime);
這個參數(shù)是測試成績,可讀可寫。如果不上傳,則為空,在平臺計算成績時就不會計算在內(nèi)。如果上傳,則至少為0。有的平臺,要求計算課程的平均得分,若sco中沒有測試題,不用上傳成績,則最好去掉上傳成績的語句,不讓會把整個課程的平均成績拉下來的。
3. cmi.core.lesson_location;這個參數(shù)是記錄上次離開sco時的位置,課件讀取后,可依次進入到上次離開的位置,當然,這要在課程中做相應的設置才行。
cmi.core.lesson_location的作用,總的來說就只有一個定位,分開來說有幾種情況,這樣比較好理解。
1、 收藏書簽的功能
在一個SCO的學習中,系統(tǒng)可以提供一個書簽按鈕來保存他在這個學習過程中所自己設定的位置。
2、 課程定位的功能
如果在一個SCO中有多個學習的頁面或者內(nèi)容,可以使用cmi.core.lesson_location來進行設置位置在哪里,快速調(diào)用位置。與收藏的類似。
在同一個學習內(nèi)容中,比如HTM中很多段落的文字,我們可以利用“錨點”來進行位置的設定,達到學生進入時的內(nèi)容定位。
如果客戶端(也就是教材)沒有對cmi.core.lesson_location讀寫操作的話,那這個cmi.core.lesson_location就是空的,定位就是靠exit和entry以及通過launch的動作來完成。
記錄sco的完成情況,包括not attempted(未嘗試/未學習)、incomplete(未完成),completed(已完成)。在平臺上,課程的進度實際上是(已完成的sco數(shù)/sco總數(shù))×100%。所以若是單sco的課程,就則只有兩種,0%和100%。而sco內(nèi)部的記錄跟平臺是沒有關系的。
cmi.core.lesson_staus是專門形容SCO本身的學習情況,總共分為下面六種,而這些狀態(tài)由SCO與LMS共同維護。
passed(通過) completed(已完成) browsed(瀏覽) incomplete(非完成) failed(失?。?not attempted(未嘗試)
當LMS發(fā)行SCO時,必須將學習狀態(tài)值初始化為“not attempted”,接著將狀態(tài)的控制權(quán)轉(zhuǎn)移給SCO。至于SCO可以采用不同的策略決定何時將學習狀態(tài)值由“not attempted”轉(zhuǎn)換至“incomplete”,例如:某教師認為當學習者進入SCO時,SCO就應轉(zhuǎn)換至“incomplete”的狀態(tài),另外可能也有教師認為學習者必須符合某些條件或執(zhí)行某些操作時,SCO才能轉(zhuǎn)換至“incomplete”的狀態(tài),
這些完全取決于教學設計者的考慮,并沒有任何使用上的限制。教學設計者可以在學習者完成此SCO的學習時,將學習狀態(tài)值轉(zhuǎn)換至“completed”,至于認定學習者完成學習的方式與作法,也是由教學設計者自行決定。而且SCO可以根據(jù)不同的衡量方式將學習狀態(tài)值轉(zhuǎn)換至“passed”或者“failed”的狀態(tài)。
雖然SCO可以設定學習狀態(tài)值,但是SCORM并沒有強制規(guī)定SCO必須設定學習狀態(tài)值,因此LMS必須采取下列對應的處理方式,維持學習狀態(tài)值。
1). 當LMS啟動SCO時,必須將狀態(tài)初始化為“not attempted”。
2). 當LMS收到LMSFinish的命令,但lesson_status的狀態(tài)不是“not attempted”或“incompleted”時,則必須重新檢驗其狀態(tài)。
3). 當cmi.core.credit的值為“credit”,而且cmi.student_data.mastery_score與cmi.core.score均含有成績時,比較兩者的分數(shù)。若mastery_score大于score, 則更改lesson_status的值為“passed”,反之則更改為“failed”。
4). 當cmi.core.credit的值為“credit”,但是cmi.student_data.mastery_score沒有成績時,則維持lesson_status的值不變,也就是保留SCO設定的值。
5). 當cmi.core.credit的值為“no-credit”時,而且cmi.core.lesson_mode為 “browse”時,更改其值為“browsed”。
6). 當cmi.core.credit的值為“no-credit”時,但是cmi.core.lesson_mode不為“browse”或元素根本不存在時,維持lesson_status的值不變,也就是保留SCO設定的值。
當非正常退出時,會設置為suspend(懸掛,即暫停的意思),
根據(jù)學習時間的判斷sco的完成狀態(tài),利用學習者進入該sco學習過的學習時間與視頻的時間長短來進行比較,從而達到來判斷他學習時間是不是符合完成的狀態(tài)判斷,否則為未完成狀態(tài)。
RTE中提供的元素未cmi.core.total_time。
var time=doLMSGetValue( "cmi.core.total_time"); arr=time.split(":"); hh=Number(arr[0]); mm=Number(arr[1]); ss=Number(arr[2]); hms=hh*3600+mm*60+ss + currentSeconds; alert(hms); if (hms>=60){ //這里設定的時間60秒,這個時間可以自己根據(jù)本節(jié)sco的視頻學習時間需求進行更改。 result = doLMSSetValue("cmi.core.lesson_status", "completed"); } else{ result = doLMSSetValue("cmi.core.lesson_status", "imcomplete"); }cmi.suspend_data: 暫存數(shù)據(jù)
存儲內(nèi)容對象在恢復時所需的特定數(shù)據(jù)。
在學生使用課程過程中產(chǎn)生的信息,這些信息用于下一次繼續(xù)學習,比如包含課重啟所需要的信息;
在SCO創(chuàng)建時產(chǎn)生的信息,對SCO啟動運行要求的說明,SCO啟動所需信息的提供,每次啟動SCO時都需要它,通常在SCO交換數(shù)據(jù)中定義;
cmi.comments:關于內(nèi)容對象的評論數(shù)據(jù),一般來自用戶評論 。
教師設置的一些評語信息,在滿足一定條件的時候,SCO將把這些信息呈現(xiàn)給學生;
LMS平臺對內(nèi)容對象的評論信息
cmi.objectives:針對內(nèi)容對象的個人目標集合 。
描述學生對于SCO中每個目標的完成情況,包括的子數(shù)據(jù)項有:.Id(目標編號)、.Score(目標得分)、.Status(目標狀態(tài));
基于用戶偏好的內(nèi)容對象自定義信息,如運行時間限制 。
而學生數(shù)據(jù)是在學生開始課程以后和學習課程當中,CMI系統(tǒng)所了解的學生的情況。學生數(shù)據(jù)為學生在課程中的表現(xiàn)。包括的子數(shù)據(jù)項有:.Mastery Score(掌握得分)、.Max Time Allowed(最大允許時間)、.Time Limit Action(限時反應);
SCO的參數(shù)與選項,可通過參數(shù)設置來調(diào)整SCO的表現(xiàn)與行為,包括的子數(shù)據(jù)項有:.Audio(音頻)、.Language(語言)、.Speed(速度)、.Text(文本)、.Video(視頻),e-Learning 教學設計:E-Learning成功保證;
cmi.interactions: 用戶交互信息學生通過計算機輸入時產(chǎn)生的可記錄與可識別的信息,它可以記錄學習者與SCO每次交互的詳細信息,.id(交互編號)、.objectives(交互目標)、.time(交互時間)、.type(交互類型)、.correct_responses(正確響應次數(shù))、.weighting(交互的權(quán)重)、.student_response(學生響應)、.result(交互結(jié)果)、.latency(交互延遲)。
元素取值:1) model類型:
list[0] = "normal"; //正常
list[1] = "review"; //回顧
list[2] = "browse"; //瀏覽
2) status類型:
list[0] = "passed"; //通過
list[1] = "completed";//完成
list[2] = "failed"; //失敗
list[3] = "incomplete";//未完成
list[4] = "browsed"; //瀏覽
list[5] = "not attempted";//未參加
3) Exit類型:
list[0] = ""; //空,可能是強制退出或是未退出的狀態(tài)
list[1] = "time-out"; //超時后退出
list[2] = "suspend"; //暫停(非正常退出時標識為“掛起”狀態(tài))
list[3] = "logout"; //正常退出
4) Credit類型:(學分)
list[0] = "credit"; //有學分
list[1] = "no-credit";//無學分
5) Entry類型: (是否已進入)
list[0] = ""; //空(已完成) 有待討論
list[1] = "ab-initio"; //中間
list[2] = "resume"; //重新開始
6) TimeLimitAction類型:時間界限
list[0] = ""; //空
list[1] = "exit,message"; //退出,反饋信息
list[2] = "exit,no message"; //退出,無反饋信息
list[3] = "continue,message"; //繼續(xù),反饋信息
list[4] = "continue,no message";//繼續(xù),無反饋信息
7) Interaction類型:課件與平臺產(chǎn)生的交互信息
list[0] = "true-false"; //true or false
list[1] = "choice"; //選擇
list[2] = "fill-in"; //填寫
list[3] = "matching"; //搭配
list[4] = "performance";//性能
list[5] = "likert"; //?
list[6] = "sequencing"; //排序
list[7] = "numeric"; //數(shù)字
8) result類型:結(jié)果
list[0] = "correct"; //正確
list[1] = "wrong"; //錯誤
list[2] = "unanticipated";//非正常
list[3] = "neutral"; //中立
數(shù)據(jù)類型數(shù)據(jù)類型 描述
CMIBlank 空字符串
CMIBoolean bool字符串ture或false
CMIDecimal 帶小數(shù)的數(shù)字
CMIFeedback 描述interaction屬性中的內(nèi)容的結(jié)構(gòu)
CMIIdentifier 字母數(shù)字混合的字符串,不包含空格和非打印字符,不超過255
CMIInteger 整數(shù)(0, 65536)
CMISInteger 有符號整數(shù)(-32768, 32768)
CMIString255 ASCII字符串,不超過255
CMIString4096 ASCII字符串,不超過4096
CMITime 時間類型,HH:MM:SS.SS
CMITimespan 時間間隔,格式同上
CMIVocabulary 單詞表,類似枚舉類型
cmi.core元素屬性:
對SCORM課件的學習跟蹤是通過LMS和SCORM課件的交互來實現(xiàn)的。
1.在LMS服務器端:(1)LMS首先決定哪一個SCO將要運行,同時加載DataModel庫;
(2)設定SCO的運行模式,包括預覽模式、普通模式和復習模式,其中預覽模式只是運行課件,而不進行學習跟蹤;
(3)設定學員的學習狀態(tài),包括“ab-initio”(初次學習)、“resume”(再次學習)和“”(已完成)三種狀態(tài);
(4)加載并運行SCO;
(5)通過APIAdapter實現(xiàn)LMS與SCORM課件的交互,完成數(shù)據(jù)模型的讀寫操作。
2.在LMS客戶端:(1)運行SCORMAPIAdapter;
(2)調(diào)用API初始化函數(shù);
(3)加載課件SCO初始化數(shù)據(jù);
(4)獲取DataModel中的用戶ID和用戶姓名;
(5)獲取DataModel中cmi.core.lesson_status值,即當前用戶對當前SCO的學習狀態(tài),包括Completed、Incomplete、Passed、Failed等七種狀態(tài);
(6)獲取數(shù)據(jù)模型中的cmi.core.entry值,該值判斷當前用戶是否第一次學習當前SCO。如果值為“ab-initio”,則表示當前用戶是首次學習;如果值為“resume”,則表示用戶是再次學習當前SCO;
(7)獲取數(shù)據(jù)模型中的cmi.core.lesson_mode值,該值判斷當前用戶訪問當前SCO的方式,包括Browse(預覽,不跟蹤學習)、Normal(跟蹤學習)、Review(復習)三種模式;
(8)獲取數(shù)據(jù)模型中的cmi.core.score.raw值,該值用來存放每一個學員在每一個SCO的學習過程中所累積的總成績。如果當前SCO有評測就會記錄當前用戶的評測總成績,沒有就不記錄。LMS可借此DataModel作學習者成績分析。如果用戶是初次學習當前SCO,系統(tǒng)就會初始化cmi.core.score.raw的值為“”(空值);
(9)獲取數(shù)據(jù)模型中的cmi.core.lesson_location值。LMS借此DataModel記錄每一個用戶最后一次學習哪一個SCO,以便下一次重新進入該課程時可以直接跳轉(zhuǎn)到上次學習位置繼續(xù)學習,相當于書簽的功能;
(10)用戶開始學習當前SCO,在學習過程中會記錄一系列數(shù)據(jù)模型的值,用于學習跟蹤。其中cmi.core.session_time用來記錄每個學員每次學習的時間,包括每個用戶進入每個SCO的停留時間及訪問的日期。在當前用戶結(jié)束對當前SCO的學習時,LMS則會記錄cmi.core.total_time的值,cmi.core.total_time表示當前用戶對每個SCO學習所花的總時間;
(11)執(zhí)行LMSCommit(Parameter)接口函數(shù)。該函數(shù)主要是用來提交數(shù)據(jù)模型元素的值,LMSCommit發(fā)生在LMSfinish之前;
(12)執(zhí)行LMSFinish()函數(shù)。當用戶學習完并要離開一個SCO時,便會調(diào)用LMSFinish()。LMSFinish()主要負責將環(huán)境變量重設,并判斷該SCO是否在結(jié)束之前己經(jīng)調(diào)用LMSCommit()將所有記錄存儲到LMS。若尚未儲存,則會自動調(diào)用LMSCommit()將當前用戶在當前SCO的學習記錄保存。
參考資料scorm百度百科
SCORM維基百科
scorm標準的LMS在客戶端的運行機制
Scorm標準學習——Scorm RTE API與數(shù)據(jù)模型
SCORM標準及支持SCORM標準學習平臺的設計
scorm標準中的cmi.core.lesson_location詳解
scorm1.2標準中的datamodel詳解
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/107368.html
摘要:前言這里筑夢師是一名正在努力學習的開發(fā)工程師目前致力于全棧方向的學習希望可以和大家一起交流技術共同進步用簡書記錄下自己的學習歷程個人學習方法分享本文目錄更新說明目錄學習方法學習態(tài)度全棧開發(fā)學習路線很長知識拓展很長在這里收取很多人的建議以后決 前言 這里筑夢師,是一名正在努力學習的iOS開發(fā)工程師,目前致力于全棧方向的學習,希望可以和大家一起交流技術,共同進步,用簡書記錄下自己的學習歷程...
摘要:前言這里筑夢師是一名正在努力學習的開發(fā)工程師目前致力于全棧方向的學習希望可以和大家一起交流技術共同進步用簡書記錄下自己的學習歷程個人學習方法分享本文目錄更新說明目錄學習方法學習態(tài)度全棧開發(fā)學習路線很長知識拓展很長在這里收取很多人的建議以后決 前言 這里筑夢師,是一名正在努力學習的iOS開發(fā)工程師,目前致力于全棧方向的學習,希望可以和大家一起交流技術,共同進步,用簡書記錄下自己的學習歷程...
摘要:軟件開發(fā)體系架構(gòu)兩層架構(gòu)傳統(tǒng)的客戶服務器系統(tǒng)僅只簡單地基于兩層體系來構(gòu)建,即客戶端前臺和企業(yè)信息系統(tǒng)后臺,沒有任何中間件,業(yè)務邏輯層與表示層或數(shù)據(jù)層混在一起。 showImg(https://segmentfault.com/img/remote/1460000007090113); 理想的建筑師應該既是文學家又是數(shù)字家,他還應通曉歷史,熱衷于哲學研究,精通音樂,懂得醫(yī)藥知識,具有法學...
閱讀 1128·2021-09-13 10:29
閱讀 3447·2019-08-29 18:31
閱讀 2717·2019-08-29 11:15
閱讀 3070·2019-08-26 13:25
閱讀 1452·2019-08-26 12:00
閱讀 2470·2019-08-26 11:41
閱讀 3557·2019-08-26 10:31
閱讀 1557·2019-08-26 10:25