Mifos小额信贷管理系统平台软件架构文档.docx

上传人:小飞机 文档编号:4886567 上传时间:2023-05-21 格式:DOCX 页数:8 大小:104.60KB
返回 下载 相关 举报
Mifos小额信贷管理系统平台软件架构文档.docx_第1页
第1页 / 共8页
Mifos小额信贷管理系统平台软件架构文档.docx_第2页
第2页 / 共8页
Mifos小额信贷管理系统平台软件架构文档.docx_第3页
第3页 / 共8页
Mifos小额信贷管理系统平台软件架构文档.docx_第4页
第4页 / 共8页
Mifos小额信贷管理系统平台软件架构文档.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Mifos小额信贷管理系统平台软件架构文档.docx》由会员分享,可在线阅读,更多相关《Mifos小额信贷管理系统平台软件架构文档.docx(8页珍藏版)》请在三一办公上搜索。

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。2.3. 项目相关项目 URL s:/github./openMF/mifosx下载 s:/下载统计 Download stats3. 系统概览EddHW如 5如今金融体系通过各种各样的手段向客户提供效劳。 客户可以直接打到分支机构(出纳员模型) 允许客户可以

3、组织团体(或中心)的形式,与金融体系的员工在约定时间和地点开会 (传统的小额信贷)。 金融体系可能有一个公开的门面信息门户,客户可以使用各种原因包括账户管理 (网上银行)。 金融体系集成到一个ATM / POS /卡效劳网络,客户可以使用 金融体系可能与移动支付运营商集成和支持移动货币效劳客户(现在/未来小额信 贷)。 一个金融体系可能使用的第三方代理销售其他银行7金融体系的产品/效劳如上面的图表所示,各利益相关者利用业务应用程序执行特定客户或金融体系相关操作 这些业务应用程序中包含的功能可以以任何方式捆绑打包。在图中,几个应用程序可以组合 成一个应用程序或任何一块代表一个应用程序可以根据需要

4、进一步分解。该平台是管理信息系统的核心引擎。它隐藏了很多存在的复杂的金融体系中的管理信息 系统所需的业务和技术领域背后的一个相对简单的API这个API,使应用程序开发人员按金 融体系他们需要的那样进展创新和开发一般或定制的应用程序。4. 功能概览作为平台的所有功能都通过一个API,该API文档是最好的地方来查看该平台是做什么 的详细分解。看到网上API文档。? ? T通过更高的级别上我们看到的功能分为以下几类: 根底构件 o规O 扩展数据表 o 报表 用户管理 o 用户 o 角色 o 权限 机构模型 o 机构 o 职员 o 货币 产品配置 o 手续费 o 贷款产品 o 存款产品 客户资料o 了

5、解你的客户 投资组合管理 o 贷款账户 o 存款o 顾客/团体 总帐账户管理 o 会计科目表 o 总帐5. 技术Java 7: .oracle./technetwork/java/javase/downloads/index.html JAX-RS 1.0: JSON using Google GSON Spring I/O Platform: spring.io/platformo Spring Frameworko Spring Securityo Spring Data (JPA) backed by Hibernate MySQL: .oracle./us/products/mysql

6、/overview/index.html5.1. 主要的技术5.1.1. RESTful API该平台通过practically-RESTful API公开其所有功能,通信使用JSON。我们使用术语practically-RESTful为了使其清楚我们不是去依从完整的REST,但仍 然保持重要的基于REST的属性: 无状态:平台维护没有会话或基于会话的状态这样做的结果是轻松扩展能力水平。 面向资源:API是集中在一组资源通过使用的词汇和约定例如GET、PUT、POST、DELETE, 状态代码。以到达为客户端提供一个简单的和一致的API。5.1.2. 多租户技术mifos平台开发支持多租户设计

7、的核心。这意味着它是易于使用的软件即效劳(SaaS)的 平台型产品,因为它是为本地安装。平台使用一个方法隔离金融体系数据库/数据/模式(见单独的数据库和共享数据库,单 独 的模式 msdn.microsoft./en-us/library/aa479086.aspx#mlttntda_topic2)。5.1.3. 可扩展同时每个租户将有一组核心表,表平台可以扩展以不同的方式为每个租户通过使用数据 表的功能。5.1.4. 读写别离我们别离写命令(修改数据)和查询(读取数据)。为什么?有很多原因选择这种方法,目前不是一个尝试全面的CQRS。目前的主要优点是: 状态改变命令持续提供审计的状态改变。

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

9、g.mifosplatform. accounting useradministration infrastructure portfolioo chargeo cliento fundo loanaccount accounting在每一个垂直局部是一些常见的包装结构: api - XXXApiResource.java - REST api 实现文件 handler - XXXCommandHandler.java -具体处理程序调用 service -包含读+写效劳功能区 domain - OO概念功能区域 data -数据区域的概念 serialization -为功能区域转换 API

10、 JSON7. 设计概览注意:通过实现平台的代码来处理命令处理程序同时支持maker-checker和授权检查目 前有点复杂的,一个领域类针对性进展清理,让新平台的开发人员更容易入门。同时以下容用 于解释其工作原理。考虑上图所示的例子为用户资源。1. 查询:GET /用户2. S API:retrieveAll 方法.UsersApiResource 调用3. UsersApiResource.retrieveAll :检查用户访问该资源的权限数据4. UsersApiResource.retrieveAll:使用read service来获取所有用户数据(read service执行简单的S

11、QL使用JDBC查询数据库)5. UsersApiResource.retrieveAll:返回的数据转换成 JSON 响应 命令:POST /users (注:数据在请求body中)S API:create 方法在.UsersApiResource 中被调用POSTConsumes( MediaType.APPLICATION_JSON )Produces( MediaType.APPLICATION_JSON )public String create(final String apiRequestBodyAsJson) final CommandWrapper commandReques

12、t = new CommandWrapperBuilder() / .createUser() / .withJson(apiRequestBodyAsJson) / .build();final CommandProcessingResult result = this mandsSourceWritePlatformService.logCommandSource(commandRequest);return this.toApiJsonSerializer.serialize(result);描述:创立一个CommandWrapper对象表示这个create user命令和JSON请求主

13、体。交给 PortfolioCommandSourceWritePlatformService.logCommandSource 进展处理。Override public CommandProcessingResult logCommandSource(final CommandWrapper wrapper) boolean isApprovedByChecker = false;/ check if is update of own account details if (wrapper.isUpdateOfOwnUserDetails(this.context.authenticated

14、User().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 - check user has / permission to perform speci

15、fic task.this.context.authenticatedUser().validateHasPermissionTo(wrapper.getTaskPermiss ionName();validateIsUpdateAllowed();final String json = wrapper.getJson();CommandProcessingResult result = null;try final JsonElement parsedCommand = this.fromApiJsonHelper.parse(json);final JsonCommand command

16、= JsonCommand.from(json, parsedCommand, this.fromApiJsonHelper, wrapper.getEntityName(),wrapper.getEntityId(), wrapper.getSubentityId(), wrapper.getGroupId(), wrapper.getClientId(), wrapper.getLoanId(), wrapper.getSavingsId(), wrapper.getCodeId(), wrapper.getSupportedEntityType(), wrapper.getSupport

17、edEntityId(), wrapper.getTransactionId(), wrapper.getHref(), wrapper.getProductId();result = this.processAndLogCommandService.processAndLogCommand(wrapper, command, isApprovedByChecker); catch (final RollbackTransactionAsCommandIsNotApprovedByCheckerExceptione) result = this.processAndLogCommandServ

18、ice.logCommand(e.getCommandSourceResult();return result;描述:检查用户允许此操作。如果好,)解析json请求的身体,b)创立一个JsonCommand对象 包装命令细节,c)使用CommandProcessingService处理命令。注意:如果出现 RollbackTransactionAsCommandIsNotApprovedByCheckerException。最初 的事务将被打掉,我们只有日志条目的命令审计表中设置其状态为“等待。TransactionalOverridepublic CommandProcessingResul

19、t processAndLogCommand(final CommandWrapper wrapper, final JsonCommand command, final boolean isApprovedByChecker) final boolean rollbackTransaction = this.configurationDomainService.isMakerCheckerEnabledForTask(wrapper.taskPermis sionName()& !isApprovedByChecker;final NewCommandSourceHandler handle

20、r = findCommandHandler(wrapper); final CommandProcessingResult result = handler.processCommand(command);final AppUser maker = this.context.authenticatedUser();CommandSource commandSourceResult = null;if (command mandId() != null) commandSourceResult = this mandSourceRepository.findOne(command mandId

21、();commandSourceResult.markAsChecked(maker, DateTime.now(); else commandSourceResult = CommandSource.fullEntryFrom(wrapper, command, maker);commandSourceResult.updateResourceId(result.resourceId();commandSourceResult.updateForAudit(result.getOfficeId(), result.getGroupId(), result.getClientId(), res

22、ult.getLoanId(), result.getSavingsId(), result.getProductId();String changesOnlyJson = null;if (result.hasChanges() changesOnlyJson = this.toApiJsonSerializer.serializeResult(result.getChanges(); commandSourceResult.updateJsonTo(changesOnlyJson);if (!result.hasChanges() & wrapper.isUpdateOperation()

23、& !wrapper.isUpdateDatatable() commandSourceResult.updateJsonTo(null);if (commandSourceResult.hasJson() this mandSourceRepository.save(commandSourceResult);if (rollbackTransaction) throw newRollbackTransactionAsCommandIsNotApprovedByCheckerException(commandSourceResult );return result;1. 检查如果maker-checker配置支持这一行动。如果是的,这不是一个检查批准的命 令回滚。最后我们回滚为了测试如果命令将“域验证需要提交数据库进展全面检 查。2. findCommandHandler找到正确的Hanlder处理此命令。3. 过程命令使用处理程序(在事务作用域)。4. CommandSource 对象创立/更新日志m_portfolio_command_source 表的所有细节。5. 在更新场景中,我们看看那里真的任何更改/更新。如果是只存储在审计日志JSON的变 化。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号