Mifos小额信贷管理系统平台软件架构文档_第1页
Mifos小额信贷管理系统平台软件架构文档_第2页
Mifos小额信贷管理系统平台软件架构文档_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Mifos平台软件架构文档1.概要本文抓住了主要架构决策平台。文档的目的是为平台的总体结构提供一个向导;它适合 在一个管理信息系统解决方案的整体背景及其部贡献者可以更有效地了解他们正在考虑可 以变化,这些变化的影响。这个报告的目标受众是系统集成商(谁将使用文档来了解平台的结构及其设讣原理)和 平台贡献者将使用文档来推断未来的变化和谁会随着系统的发展更新文档。2简介2.1. 理念Mifos是一个出于希望创建和部署技术,允许小额信贷行业的规模的想法。我们的目标是: 产生一个黄金标准管理信息系统适合小额信贷业务 作为小额信贷的基础平台 开源的,拥有和由成员组织在社区 使潜在的生态系统提供商周边的小额

2、信贷机构2.2. 历史 2006:项目始于Grameen基金会 2011年底:Grameen基金会把全部责任移交给开源社区。 2012:Mifos X平台开始。之前的项目成员以开源社区小额信贷(COSM / OpenMF)的名 义聚在一起 2013年:COSM/OpenMF正式更名Mifos倡议和接收美国税法条款501 c3»23项目相关项目 URL https:/github./openMF/mifosx卜载 F载统计 Download stats3. 系统概览ATM/POSJCflfd Servicessdda uoroUDQe- 6UUBU.®_qndAgentThi

3、rd Panes丿industrysdd<r58乏eg6dd<r86<如今金融体系通过各种各样的手段向客户提供服务。 客户可以直接打到分支机构(出纳员模型) 允许客户可以组织团体(或中心)的形式,与金融体系的员工在约泄时间和地点开会 (传统的小额信贷)。 金融体系可能有一个公开的门面信息门户,客户可以使用各种原因包括账H管理 (网上银行)。 金融体系集成到一个ATM/POS/卡服务网络,客户可以使用 金融体系可能与移动支付运营商集成和支持移动货币服务客户(现在/未来小额信 贷)。 一个金融体系可能使用的第三方代理销售其他银行/金融体系的产品/服务如上而的图表所示,各利益相关者

4、利用业务应用程序执行特泄客户或金融体系相关操作。 这些业务应用程序中包含的功能可以以任何方式捆绑打包。在图中,几个应用程序可以组合 成一个应用程序或任何一块代表一个应用程序可以根据需要进一步分解。该平台是管理信息系统的核心引擎。它隐藏了很多存在的复杂的金融体系中的管理信息 系统所需的业务和技术领域背后的一个相对简单的API。这个API,使应用程序开发人员按金 融体系他们需要的那样进行创新和开发一般或泄制的应用程序。4. 功能概览作为平台的所有功能都通过一个API,该API文档是最好的地方来查看该平台是做什么的详细分解。看到网上 API 文档。? ? ? ? ? ? ? ?通过更髙的级别上我们看

5、到的功能分为以下几类: 基础构件O规O扩展数据表O报表 用户管理O用户O角色O权限 机构模型O机构O职员O货币 产品配置O手续费O贷款产品O存款产品 客户资料O 了解你的客户 投资组合管理O贷款账户O存款O顾客/团体 总帐账户管理O会计科目表O总帐5.技术 Java 7: .oracle./technetwork/java/javase/downloads/index.html JSON using Google GSON Spring I/O Platform: spring.io/platformo Spring Frameworko Spring Securityo Spring Dat

6、a (JPA) backed by Hibernate MySQL: .oracle./us/products/mysql/overview/index.html5.1.主要的技术该平台通过practically-RESTful API公开其所有功能,通信使用JSON。我们使用术语practically-RESTful为了使其淸楚我们不是去依从完整的REST,但仍然保 持重要的基于REST的属性: 无状态:平台维护没有会话或基于会话的状态。这样做的结果是轻松扩展能力水平。 而向资源:API是集中在一组资源通过使用HTTP的词汇和约泄例如状态代码。以达到为客户端提供一个简单的和一致的API。看到

7、网上 API 文档的更多细 *|7» 多租户技术mifos平台开发支持多租户设计的核心。这意味着它是易于使用的软件即服务(SaaS)的平 台型产品,因为它是为本地安装。平台使用一个方法隔离金融体系数据库/数据/模式(见单独的数据库和共享数据库,单独的模式 msdn.microsoft./en-us/library/aa479086.aspx#mlttntda_topic2)o可扩展同时每个租户将有一组核心表,表平台可以扩展以不同的方式为每个租户通过使用数据 表的功能。5丄4读写分离我们分离写命令(修改数据)和查询(读取数据)。为什么?有很多原因选择这种方法,目前不是一个尝试全而的CQ

8、RS。目前的主要优点是: 状态改变命令持续提供审计的状态改变。 用于支持maker-checker的一般方法。 状态改变命令使用而向对象模式(因此ORM),而查询可以保持为数据模式。5.1.5. 四眼原则也称为四眼原则。使应用程序能够支持maker-checker风格工作流过程。命令,通过验证 将被持久化。Maker-checker在细粒度级别可以启用/禁用任何状态变化的APL5.1.6. 良好的权限控制细粒度的权限与每个APL管理员有细粒度的控制权什么角色或用户访问权。6. 代码打包意图是使平台代码以垂直切分的方式(而不是层)打包。源代码在这里 mifosng-provider/src/ma

9、in力ava/org/mifosplatformorg.mifosplatform acco un ting useradministrati on infrastructure portfolioo chargeo cliento fundo loanaccou nt acco un ting在每一个垂直部分是一些常见的包装结构: api - XXXApiResource.java REST api 实现文件 handler - XXXCommandHandler.java 具体处理程序调用service -包含读+写服务功能区 domain - 00概念功能区域data -数据区域的概念

10、serialization 为功能区域转换 API JSON7. 设计概览注意:通过实现平台的代码来处理命令处理程序同时支持maker-checker和授权检査目前 有点复杂的,一个领域类针对性进行淸理,让新平台的开发人员更容易入门。同时以下容用于 解释其工作原理。/ 一 Miros x Platform & api1. Check Permissions2. Fetcti Data (SQL Query)3. Coven To JSON responseOracleMysql RDMS1. Check Permissions5. Covert To JSON response2. L

11、ocate Command Handler4.Updated withchanges for Audit3. Commend HandlerUses Domain ServicesModel ORM to pens! changesAil cnangos passed back考虑上图所示的例子为用戸资源。1. 査询:GET/用户2. HTTPS API: retrieveAII 方法调用3. UsersApiResource.retrieveAll:检査用户访问该资源的权限数拯4. UsersApiResource.retrieveAll:使用,read service'来获取所有用

12、户数据('read service'执 行简单的SQL使用JDBC查询数据库)5. UsersApiResource.retrieveAll:返回的数据转换成 JSON 响应命4:POST /users (注:数据在请求body中)HTTPS API: create 方法在 中被调用POSTConsumes( MediaType.APPLICATION_JSON )Produces( MediaType.APPLICATIONJSON ) public String create(final String apiRequestBodyAsJson) final CommandW

13、rapper commandRequest = new CommandWrapperBuilder() / createUser() /.withJson(apiRequestBodyAsJson) / build();final CommandProcessingResult result =ma ndsSourceWritePlatformService.logComma ndSourc&commandRequest);描述:创建一个Commandwrapper对象表示这个create user命令和JSON请求主体交给 PortfolioCommandSourceWritePla

14、tformService.logCommandSource 进行处理。Overridepublic CommandProcessingResult logCommandSource(final Commandwrapper wrapper) boolean isApprovedByChecker = false;/ check if is update of own account details/ then allow this operation to proceed/ maker checker does nt mean anythi ng here isApprovedByChecke

15、r = true; / set to true in case permissions have/ been maker-checker enabled by/ accident else / if not user changing their own details - check user has/ permission to perform specific taskthis.c on text.authe ntic3tedUsGr()validateHasPermissionTo(wrappergGtTaskPGrmissionNamG();validatelsUpdateAllow

16、ed();final String json 二 wrapper.getJson();CommandProcessingResult result = null;tryfinal Json Comma nd command = Json Command.from(json, parsedCommand, this.fromApiJsonHelper, wrapper.getEntityName(),wrapper.getEntityld(), wrapper.getSubentityld(), wrapper.getGroupld(), wrapper.getClientld(), wrapp

17、er.getLoanld(),wrapper.getSavingsld(), wrapper.getCodeld(),wrapper.getSupportedEntityType(), wrapper.getSupportedEntityld(),wrapper.getTransactionld(),wrapper.getHref(), wrapper.getProductld();result = cessA ndLogComma ndScessA ndLogComma nd(wrapper; comma nd, isApprovedByChecker);

18、 catch (final RollbackTransactionAsCommandlsNotApprovedByCheckerExcep廿on e) result =cessAndLogComma ndService. logComma nd(e.getCommandSourceResult();return result;描述:检查用户允许此操作。如果好J解析json请求的身体,b)创建一个JsonCommand对象包 装命令细巧丄)使用CommandProcessingService处理命令。注意:如果出现 RollbackTransactionAsCommandlsNo

19、tApprovedByChecke吒xception。最初的事务 将被打掉,我们只有日志条目的命令审计表中设置其状态为等待化Tran sactionalOverridepublic CommandProcessingResult processAndLogCommand(final CommandWrapper wrapper, final Json Comma nd command, final boolea n isApprovedByChecker) final boolean rollbackTransaction =this.c on figurati on DomainServic

20、e.isMakerCheckerEnabledForTask(wrapper.taskPermissionName()&& JisApprovedByChecker;final NewCommandSourceHandler handler = findCommandHandler(wrapper);final CommandProcessingResult result = cessCommand(command);Commandsource commandSourceResult = null;if (mandld() != null) comma n

21、dSourceResult =ma ndSoiirceRepositoryfindOne(commandcommandld();commandSourceResultmarkAsChecked(mal<Gr; DateTime.now(); else commandSourceResult = Comma ndSource.fullE ntryFrom(wrapper; comma nd, maker);commandSourceResult.updateResourceld(result.resourceld();commandSourceResult.updateForAudit(result.getOfficeld(), result.getGroupld(),result.getClientldO, result.getLoanld(),result.getSavingsld(), result.getProductld();String changesOnlyJson = null;if (result.hasChanges() cha ngesOnlyJs on = this.toApiJs on Serializer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论