一个图形数据维护工具架构设计

1、背景

近期负责一个GIS矢量化项目,工程中涉及图形数据、GIS业务数据的关联存储和管理。为弥补图形矢量化软件在附属属性管理方面的局限性,采用两套数据库系统进行图-数关联存储的方案:图形矢量化软件存储图形数据,文件数据库存储业务数据。图形数据维护工具,是矢量化实施项目中核心支撑系统之外数据检查、校正工具,主要完成图-数对应关系的建立、维护,业务数据合法性的基础检查和纠正等。

2、需求概述

在信息管理方面,整个项目涉及大量的、孤立的图片的存储,包括:图片的文件名、业务路径、对应的工程、图形处理人、业务处理流程、处理状态等。业务数据包括:工程信息、GIS点设施业务数据、GIS线设施业务数据、GIS图层信息、GIS的各类点、线设施之间的几何图形规则、拓扑关系、业务规则等等数据。图形数据维护工具,需要操作每份栅格图对应的业务数据库,从中读取和纠正每个孤立的图形工程对应的业务属性;同时还需操作整个项目的数据管理系统,保持中心数据库的信息与各个孤立工程之间的信息同步、根据统一的业务规则批量纠正涉及该规则的当个工程文件数据等等。

图形数据维护工具的数据管理及应用示意如下图:

3、架构设计

图形数据维护工具,纵向采用分层方式进行设计:持久化层、业务实体层、业务规则层、界面交互层。

数据访问层,完成对各种数据库、报表、日志文件的操作封装。包括:MySQL数据库接口、SQLite数据库接口、Excel文件操作封装、txt日志文件封装、XML文件访问封装等。

业务实体层,完成对工程、项目人员、图层、各种点设施、各种线设施、核心规则实体等等数据结构、类、常量等的定义与封装。

业务规则层,完成对点、线设置基础几何图形规则、GIS拓扑关系、业务数据检查规则、业务数据纠正规则、业务属性边界检查规则、业务数据错误检查规则、业务数据错误校正规则等等。

用户界面层,各种文件、数据库、业务数据展示、报表处理等操作界面。

图形数据维护工具的总体架构示意如下图:

4、简单小结

第一点、数据库操作彻底封装。

图形数据维护工具,主要还是与数据库打交道。多年的设计和编码养成一种习惯于,将数据库操作的完全封装在特定的对象中,对外屏蔽数据库的差异、对外屏蔽数据库的所有细节(包括SQL语句、表名、字段名、视图、存储过程、SQL函数等)。杜绝随意在代码中随心所欲地编写SQL语句、毫无顾忌地引用表和字段的名称。将数据库的改动限制在特定的SQL定义文件和单独的类中。

第二点、数据彻底隔离。

在数据库对象与上层数据需求对象之间,尽量避免采用数据库自身的数据集来交互数据,而专门设计数据结构、无方法实体类等方式来交互数据。彻底隔断上层业务与数据库之间的直接连接;避免上层数据操作错误导致底层数据库频繁异常,或者底层数据集的未知异常导致上层业务处理逻辑紊乱;也方便系统的各项测试、问题调试、定位和BUG修正。

第三点、业务实体与业务流程分离设计。

面向对象允许在一个对象中增加方法,往往诱使经验缺乏的设计师和开发人员,不假思索地在一个对象里面增加越来越多的方法,甚至毫无节制地直接创建同级对象来完成自身功能,让部分对象的功能臃肿,貌似很好很强大的样子。在本系统中,通过粗略的前期设计之后,在开发实施过程中不断的重构,将原先属于各个业务实体对象的职责逐步抽离、上移,新增一个个业务规则对象,形成独立的业务规则层。专门归集哪些需要跨多个业务实体进行交互才能完成的复杂业务规则:数据提取、合法性检查、关联分析和数据纠正等职能。事实证明,这样的设计和代码重构,能灵活组合多个实体对象以快速实现新的业务规则;实体对象业务方法相对稳定单一、但复用程度非常高(既模块的扇入系数大);业务规则与实体对象,各自的数据和方法的边界逻辑清晰,代码错误的负面影响不易扩散;程序BUG易于定位、易于修改。

第四点、界面尽量继承。

由于不是B/S系统,所以喜欢直接继承。任何一个系统,随着功能的逐步完善,总会发现各个交互界面之间的共性,比如:总体的界面布局相同、主要的交互组件(按钮、输入框、选择框、表格等)雷同、处理的对象一样、信息展示方式近视等等。通过抽象类似的、雷同的、相同的、一样的,建立合理的界面对象层次体现,在基类上编写共有的功能方法、类似的抽象方法、雷同的虚函数等等,能大大减少界面设计、开发时间,提高交互数据校验的一致性,适当规避UI控制代码的不必要的重复与冗余。减少代码量,就等于减少BUG发生率,也等于修改少量的BUG能纠正大量的错误。

一个图形数据维护工具架构设计相关推荐

  1. 海量时序数据低成本存储架构设计

    导读 近些年来得益于传感器技术.无线网络技术.云计算和人工智能技术的发展,物联网的基础设施日益完善,并应用到了新能源.智能家居.车联网.智慧工业等众多领域中,实现了"人与物".&q ...

  2. 金融市场数据平台的架构设计之道

    作者|郝星宇编辑|小智近年来,一个名叫Fintech的名词悄然兴起.互联网科技与传统金融行业的结合越来越深入,作为投行交易系统定海神针的市场数据平台,有着怎样的技术背景?其架构设计又是怎样的? 投行的 ...

  3. 00 如何设计一个秒杀系统——秒杀系统架构设计都有哪些关键点

    一.如何理解秒杀系统 秒杀系统其实主要解决两个问题,一个是并发读,一个是并发写.并发读的核心优化理念是尽量减少用户到服务端来"读"数据,或者让他们读更少的数据:并发写的处理原则也一 ...

  4. 偏移出来的数据不准_独家解读!京东高可用分布式流数据存储的架构设计

    作者 | 李玥 编辑 | Vincent AI 前线导读:每天,超过千亿交易相关的数据在京东数千个系统中高速流转,确保数据的高可靠.高可用.一致性对京东的消息中间件系统是一项艰巨的技术挑战.为高性能. ...

  5. 独家解读!京东高可用分布式流数据存储的架构设计

    作者 | 李玥 编辑 | Vincent 每天,超过千亿交易相关的数据在京东数千个系统中高速流转,确保数据的高可靠.高可用.一致性对京东的消息中间件系统是一项艰巨的技术挑战.为高性能.高可用.高可靠的 ...

  6. 深入HBase、Spark、Alluxio、Greenplum、StreamSQL等大数据技术及其架构设计

    2017年6月10-11日,由CSDN主办的SDCC 2017·深圳站大数据技术实战峰会将在深圳举办,峰会秉承干货实料的内容原则,邀请业内顶尖的架构师.大数据总监和PMC共话弹性计算.大数据平台构建. ...

  7. KubeEdge在国家工业互联网大数据中心的架构设计与应用

    摘要:在18年的时候,工信部开展了一个叫国家创新发展工程,这个工程中提出了要建立一个国家工业大数据中心,中国移动在其中承担了边缘协同与数据采集相关功能的研发.本文将从该项目背景下面临的问题与挑战.技术 ...

  8. 数据中台系统架构设计

    架构总览 数据中台通常采用分层架构,各层应用采用微服务化方式构建.针对不同的行业,系统托管方式各不一样,比如传统企业更倾向于采用私有云或自建机房,小型互联网企业倾向采用公有云等:针对不同应用场景的不同 ...

  9. 南方地区数据中心节能架构设计——以深圳地区为例

    摘 要:大数据.云计算.5G等信息技术快速发展,数据中心的建设需求增加.能耗.能效是数据中心建设和运营的核心要点,也是制约数据中心行业发展的关键因素.围绕影响数据中心能耗的主要因素,从数据中心供电.制 ...

最新文章

  1. 5折交叉验证_[Machine Learning] 模型评估——交叉验证/K折交叉验证
  2. 组态王与c语言混合编程6,亚控 组态王嵌入版6.1
  3. windows server 驱动精灵_还在用Windows文件共享?我来教你一键摆脱Windows海量小文件使用和备份的噩梦...
  4. hdu 2222 Keywords Search AC自动机——多串匹配
  5. “Hello World!”团队召开的第十二次会议
  6. python按照图片命名复制到不同文件夹下
  7. oracle读写mysql_Oracle读写磁盘经过的缓存
  8. 持续改进----白狼族的故事(完结)
  9. Liunx 用户及组,文件相关命令
  10. html5 360度图像查看,HTML5 Canvas实现360度全景图
  11. PPT2016;插入视频,无法实现自动播放
  12. LANDESK操作系统部署时,网卡启动后,自动进入pe选择菜单,而不用按F8 进行选择启动菜单的情况下,如何操作?...
  13. 【C语言】0x1F<<11等于0还是0xF800 ?
  14. Mysql :Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
  15. Python取代VB/VBA,弄了个寂寞!
  16. 程序包xxx不存在解决办法
  17. 聚友网任命魏来为首席执行官
  18. 【论文翻译-3】Attention U-Net: Learning Where to Look for the Pancreas
  19. 市值掉了15亿,向商家赔付1.5亿元!微盟再发公告:数据恢复期延后至3月3日
  20. EEPROM中存储数据的字节序

热门文章

  1. 谷歌网页加载特别慢的问题
  2. Mac 查找软件安装位置
  3. 苹果 WWDC21 发布会全汇总,iOS 15更个性化,全家桶协作更有生产力
  4. iCop-Ratel执行run_local.sh文件报错
  5. can not be named yunan because its located directly under the workspace root
  6. RabbitMQ高级特性-惰性队列
  7. Java游戏服务器系列:传统的BIO(OIO)、NIO与Netty中的BIO(OIO)、NIO
  8. php源码 拼车网顺风车_基于ThinkPHP框架开发的在线微信拼车系统完整PHP源码+支付微信支付...
  9. 算式最大值 (思维题)
  10. html5 css3制作柱形图,一步一步教你实现纯CSS的柱形图