Mifos小額信貸管理系統(tǒng)平臺(tái)軟件架構(gòu)文檔_第1頁(yè)
Mifos小額信貸管理系統(tǒng)平臺(tái)軟件架構(gòu)文檔_第2頁(yè)
Mifos小額信貸管理系統(tǒng)平臺(tái)軟件架構(gòu)文檔_第3頁(yè)
Mifos小額信貸管理系統(tǒng)平臺(tái)軟件架構(gòu)文檔_第4頁(yè)
Mifos小額信貸管理系統(tǒng)平臺(tái)軟件架構(gòu)文檔_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Mifos平臺(tái)軟件架構(gòu)文檔1. 概要本文抓住了主要架構(gòu)決策平臺(tái)。文檔的目的是為平臺(tái)的總體結(jié)構(gòu)提供一個(gè)向?qū)?它適合在一個(gè)管理信息系統(tǒng)解決方案的整體背景及其內(nèi)部貢獻(xiàn)者可以更有效地了解他們正在考慮可以變化,這些變化的影響。這個(gè)報(bào)告的目標(biāo)受眾是系統(tǒng)集成商(誰(shuí)將使用文檔來(lái)了解平臺(tái)的結(jié)構(gòu)及其設(shè)計(jì)原理)和平臺(tái)貢獻(xiàn)者將使用文檔來(lái)推斷未來(lái)的變化和誰(shuí)會(huì)隨著系統(tǒng)的發(fā)展更新文檔。2. 簡(jiǎn)介2.1. 理念Mifos是一個(gè)出于希望創(chuàng)建和部署技術(shù),允許小額信貸行業(yè)的規(guī)模的想法。我們的目標(biāo)是:l 產(chǎn)生一個(gè)黃金標(biāo)準(zhǔn)管理信息系統(tǒng)適合小額信貸業(yè)務(wù)l 作為小額信貸的基礎(chǔ)平臺(tái)l 開(kāi)源的,擁有和由成員組織在社區(qū)l 使?jié)撛诘纳鷳B(tài)系統(tǒng)提供商

2、周邊的小額信貸機(jī)構(gòu)2.2. 歷史l 2006: 項(xiàng)目始于Grameen基金會(huì)l 2011年底: Grameen基金會(huì)把全部責(zé)任移交給開(kāi)源社區(qū)。l 2012:Mifos X平臺(tái)開(kāi)始。之前的項(xiàng)目成員以開(kāi)源社區(qū)小額信貸(COSM / OpenMF)的名義聚在一起l 2013年:COSM / OpenMF正式更名Mifos倡議和接收美國(guó)稅法條款501 c3。2.3. 項(xiàng)目相關(guān)項(xiàng)目URL 下載 下載統(tǒng)計(jì) Download stats3. 系統(tǒng)概覽如今金融體系通過(guò)各種各樣的手段向客戶提供服務(wù)。l 客戶可以直接打電話到分支機(jī)構(gòu)(出納員模型)l 允許客戶可以組織團(tuán)體(或中心)的形式,與金融體系的員工在約定時(shí)間

3、和地點(diǎn)開(kāi)會(huì)(傳統(tǒng)的小額信貸)。l 金融體系可能有一個(gè)公開(kāi)的門(mén)面信息門(mén)戶網(wǎng)站,客戶可以使用各種原因包括賬戶管理(網(wǎng)上銀行)。l 金融體系集成到一個(gè)ATM / POS /卡服務(wù)網(wǎng)絡(luò),客戶可以使用l 金融體系可能與移動(dòng)支付運(yùn)營(yíng)商集成和支持移動(dòng)貨幣服務(wù)客戶(現(xiàn)在/未來(lái)小額信貸)。l 一個(gè)金融體系可能使用的第三方代理銷售其他銀行/金融體系的產(chǎn)品/服務(wù)如上面的圖表所示,各利益相關(guān)者利用業(yè)務(wù)應(yīng)用程序執(zhí)行特定客戶或金融體系相關(guān)操作。這些業(yè)務(wù)應(yīng)用程序中包含的功能可以以任何方式捆綁打包。在圖中,幾個(gè)應(yīng)用程序可以組合成一個(gè)應(yīng)用程序或任何一塊代表一個(gè)應(yīng)用程序可以根據(jù)需要進(jìn)一步分解。該平臺(tái)是管理信息系統(tǒng)的核心引擎。它隱

4、藏了很多存在的復(fù)雜的金融體系中的管理信息系統(tǒng)所需的業(yè)務(wù)和技術(shù)領(lǐng)域背后的一個(gè)相對(duì)簡(jiǎn)單的API。這個(gè)API,使應(yīng)用程序開(kāi)發(fā)人員按金融體系他們需要的那樣進(jìn)行創(chuàng)新和開(kāi)發(fā)一般或定制的應(yīng)用程序。4. 功能概覽作為平臺(tái)的所有功能都通過(guò)一個(gè)API,該API文檔是最好的地方來(lái)查看該平臺(tái)是做什么的詳細(xì)分解??吹骄W(wǎng)上API文檔。/api-docs/apiLive.htm通過(guò)更高的級(jí)別上我們看到的功能分為以下幾類:l 基礎(chǔ)構(gòu)件 規(guī)范 擴(kuò)展數(shù)據(jù)表 報(bào)表l 用戶管理 用戶 角色 權(quán)限l 機(jī)構(gòu)模型 機(jī)構(gòu) 職員 貨幣l 產(chǎn)品配置 手續(xù)費(fèi) 貸款產(chǎn)品 存款產(chǎn)品l 客戶資料 了解你的客戶

5、l 投資組合管理 貸款賬戶 存款帳戶 顧客/團(tuán)體l 總帳賬戶管理 會(huì)計(jì)科目表 總帳5. 技術(shù) Java 7: JAX-RS 1.0: using Jersey (1.17.x) JSON using Google GSON Spring I/O Platform: http:/spring.io/platform o Spring Frameworko Spring Securityo Spring Data (JPA) backed by Hibernate MySQL: 5.1. 主要的技術(shù)5.1.1. RESTful API該平臺(tái)通過(guò)practically-RESTful API公開(kāi)其所

6、有功能,通信使用JSON。我們使用術(shù)語(yǔ)practically-RESTful為了使其清楚我們不是去依從完整的REST,但仍然保持重要的基于REST的屬性:l 無(wú)狀態(tài):平臺(tái)維護(hù)沒(méi)有會(huì)話或基于會(huì)話的狀態(tài)。這樣做的結(jié)果是輕松擴(kuò)展能力水平。l 面向資源:API是集中在一組資源通過(guò)使用HTTP的詞匯和約定例如GET、PUT、POST、DELETE, HTTP狀態(tài)代碼。以達(dá)到為客戶端提供一個(gè)簡(jiǎn)單的和一致的API。看到網(wǎng)上API文檔的更多細(xì)節(jié)。/api-docs/apiLive.htm5.1.2. 多租戶技術(shù)mifos平臺(tái)開(kāi)發(fā)支持多租戶設(shè)計(jì)的核心。這意味著它是易于

7、使用的軟件即服務(wù)(SaaS)的平臺(tái)型產(chǎn)品,因?yàn)樗菫楸镜匕惭b。平臺(tái)使用一個(gè)方法隔離金融體系數(shù)據(jù)庫(kù)/數(shù)據(jù)/模式(見(jiàn)單獨(dú)的數(shù)據(jù)庫(kù)和共享數(shù)據(jù)庫(kù),單獨(dú)的模式5.1.3. 可擴(kuò)展同時(shí)每個(gè)租戶將有一組核心表,表平臺(tái)可以擴(kuò)展以不同的方式為每個(gè)租戶通過(guò)使用數(shù)據(jù)表的功能。5.1.4. 讀寫(xiě)分離我們分離寫(xiě)命令(修改數(shù)據(jù))和查詢(讀取數(shù)據(jù))。為什么?有很多原因選擇這種方法,目前不是一個(gè)嘗試全面的CQRS。目前的主要優(yōu)點(diǎn)是:l 狀態(tài)改變命令持續(xù)提供審計(jì)的狀態(tài)改變。l 用于支持maker-checker的一般方法。l 狀態(tài)改變命令使用面向?qū)ο竽J?因此ORM),而查詢可以保持為數(shù)據(jù)模式。5.1.5. 四眼原則也稱為四眼

8、原則。使應(yīng)用程序能夠支持maker-checker風(fēng)格工作流過(guò)程。命令,通過(guò)驗(yàn)證將被持久化。Maker-checker在細(xì)粒度級(jí)別可以啟用/禁用任何狀態(tài)變化的API。5.1.6. 良好的權(quán)限控制細(xì)粒度的權(quán)限與每個(gè)API。管理員有細(xì)粒度的控制權(quán)什么角色或用戶訪問(wèn)權(quán)。6. 代碼打包意圖是使平臺(tái)代碼以垂直切分的方式(而不是層)打包。源代碼在這里 mifosng-provider/src/main/java/org/mifosplatformorg.mifosplatform. accounting useradministration infrastructure portfolio o charg

9、eo cliento fundo loanaccount accounting在每一個(gè)垂直部分是一些常見(jiàn)的包裝結(jié)構(gòu):org.mifosplatform.useradministration. api - XXXApiResource.java - REST api實(shí)現(xiàn)文件 handler - XXXCommandHandler.java -具體處理程序調(diào)用 service -包含讀+寫(xiě)服務(wù)功能區(qū) domain - OO概念功能區(qū)域 data - 數(shù)據(jù)區(qū)域的概念 serialization -為功能區(qū)域轉(zhuǎn)換API JSON 7. 設(shè)計(jì)概覽注意:通過(guò)實(shí)現(xiàn)平臺(tái)的代碼來(lái)處理命令處理程序同時(shí)支持make

10、r-checker和授權(quán)檢查目前有點(diǎn)復(fù)雜的,一個(gè)領(lǐng)域類針對(duì)性進(jìn)行清理,讓新平臺(tái)的開(kāi)發(fā)人員更容易入門(mén)。同時(shí)以下內(nèi)容用于解釋其工作原理??紤]上圖所示的例子為用戶資源。1. 查詢:GET /用戶2. HTTPS API: retrieveAll 方法 org.mifosplatform.useradministration.api.UsersApiResource調(diào)用3. UsersApiResource.retrieveAll:檢查用戶訪問(wèn)該資源的權(quán)限數(shù)據(jù)4. UsersApiResource.retrieveAll: 使用read service來(lái)獲取所有用戶數(shù)據(jù)(read service執(zhí)行簡(jiǎn)

11、單的SQL使用JDBC查詢數(shù)據(jù)庫(kù))5. UsersApiResource.retrieveAll: 返回的數(shù)據(jù)轉(zhuǎn)換成JSON響應(yīng)命令:POST /users (注:數(shù)據(jù)在請(qǐng)求body中)HTTPS API: create方法在org.mifosplatform.useradministration.api.UsersApiResource中被調(diào)用POSTConsumes( MediaType.APPLICATION_JSON )Produces( MediaType.APPLICATION_JSON )public String create(final String apiRequestBo

12、dyAsJson) final CommandWrapper commandRequest = new CommandWrapperBuilder() / .createUser() / .withJson(apiRequestBodyAsJson) / .build(); final CommandProcessingResult result = mandsSourceWritePlatformService.logCommandSource(commandRequest); return this.toApiJsonSerializer.serialize(result);描述:創(chuàng)建一個(gè)

13、CommandWrapper對(duì)象表示這個(gè)create user命令和JSON請(qǐng)求主體。交給PortfolioCommandSourceWritePlatformService.logCommandSource進(jìn)行處理。Overridepublic CommandProcessingResult logCommandSource(final CommandWrapper wrapper) boolean isApprovedByChecker = false; / check if is update of own account details if (wrapper.isUpdateOfOw

14、nUserDetails(this.context.authenticatedUser().getId() / then allow this operation to proceed. / maker checker doesnt mean anything here. isApprovedByChecker = true; / set to true in case permissions have / been maker-checker enabled by / accident. else / if not user changing their own details - chec

15、k user has / permission to perform specific task. this.context.authenticatedUser().validateHasPermissionTo(wrapper.getTaskPermissionName(); validateIsUpdateAllowed(); final String json = wrapper.getJson(); CommandProcessingResult result = null; try final JsonElement parsedCommand = this.fromApiJsonH

16、elper.parse(json); final JsonCommand command = JsonCommand.from(json, parsedCommand, this.fromApiJsonHelper, wrapper.getEntityName(), wrapper.getEntityId(), wrapper.getSubentityId(), wrapper.getGroupId(), wrapper.getClientId(), wrapper.getLoanId(), wrapper.getSavingsId(), wrapper.getCodeId(), wrappe

17、r.getSupportedEntityType(), wrapper.getSupportedEntityId(), wrapper.getTransactionId(), wrapper.getHref(), wrapper.getProductId(); result = cessAndLogCommandScessAndLogCommand(wrapper, command, isApprovedByChecker); catch (final RollbackTransactionAsCommandIsNotApprovedByCheckerExc

18、eption e) result = cessAndLogCommandService.logCommand(e.getCommandSourceResult(); return result;描述:檢查用戶允許此操作。如果好,)解析json請(qǐng)求的身體,b)創(chuàng)建一個(gè)JsonCommand對(duì)象包裝命令細(xì)節(jié),c)使用CommandProcessingService處理命令。注意:如果出現(xiàn)RollbackTransactionAsCommandIsNotApprovedByCheckerException。最初的事務(wù)將被打掉,我們只有日志條目的命令審計(jì)表中設(shè)置其狀態(tài)為“等待”。Tra

19、nsactionalOverridepublic CommandProcessingResult processAndLogCommand(final CommandWrapper wrapper, final JsonCommand command, final boolean isApprovedByChecker) final boolean rollbackTransaction = this.configurationDomainService.isMakerCheckerEnabledForTask(wrapper.taskPermissionName() & !isApprove

20、dByChecker; final NewCommandSourceHandler handler = findCommandHandler(wrapper); final CommandProcessingResult result = cessCommand(command); final AppUser maker = this.context.authenticatedUser(); CommandSource commandSourceResult = null; if (mandId() != null) commandSourceResult = mandS

21、ourceRepository.findOne(mandId(); commandSourceResult.markAsChecked(maker, DateTime.now(); else commandSourceResult = CommandSource.fullEntryFrom(wrapper, command, maker); commandSourceResult.updateResourceId(result.resourceId(); commandSourceResult.updateForAudit(result.getOfficeId(), result.getGroupId(), result.getClientId(), result.getLoanId(), result.getSavingsId(), result.getProductId(); String changesOnlyJson = null; if (result.hasChanges() chan

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論