1、技术选型

ArcObjects SDK 10.8(ArcGIS 10.8),.Net FrameWork 4.8,VS2022,WPF(WinForm)、DEV。

用的时候,打包的ArcObjects SDK dll文件,可以使用低版本的,例如10.2,这样可以保障ArcGIS 10.2以上的环境都可以运行我们的系统。

2、程序集和名称空间命名

一般情况下,我会使用AAAA.BBBB.CCCCC.dll命令,这和ArcGIS中的dll命名是一致的。AAAA代表公司、团队或者个人的简称,一般是2-4个字母;BBBB代表你这个系统名称的简称,我一般会用4-10个字符;CCCC代表模块的名称,长度不定,但能尽量短则尽量短。例如WOBM.GeoChem.Statistics。

而且逻辑模块和UI模块用不同的程序集分类。例如AAAA.BBBB.CCCC.dll,可能会跟一个AAAA.BBBB.CcccUI.dll。例如WOBM.GeoChem.StatisticsUI。

这点我们可以看下ArcObjects SDK的定义。

3、业务功能不太复杂的系统

对于业务不太复杂的功能,我一般用以下的结构。

我们会先创建Framework包,里面包含Framework和FrameworkUI两个程序集。这两个部分主要是框架,例如定义App-Command-Tool架构、定义常用的工具、定义常用的函数库、进度信息模块、日志记录模块、Toolbox执行器模块等,与具体的业务关系不大。

Cores包包含BLLs和UIs程序集,BLLs程序集包含了系统主要业务逻辑,里面可以用文件夹把模块分开。UI程序集主要包含各模块的UI定义,也是用文件夹把各模块分开。

MianApp主要集成Framework和Cores包中定义的内容。

4、业务功能复杂的系统

业务功能比较复杂的系统设计的变化主要体现在Cores包部分。以GeoChem系统为例。如下图所示。

除了MainApp外,每个包都包含两个程序集,例如Framework包包含Framework和FrameworkUI,Statistics包包含Statistics和StatisticsUI。

Framework为框架包,Core为核心逻辑包,即其他各模块公用的部分。其他的都是各模块对应的组件包。最后汇总为MainApp。

5、架构的演变

架构并不是一成不变的,在系统刚开始设计开发的时候,很难考虑的面面俱到,把所有模块都考虑到。即使都考虑到,当后续的逻辑变化或者模块增加的时候都需要对架构进行适当的调整。

还是以GeoChem系统为例。

在2018年的时候,架构如下图所示。

把一部分业务逻辑代码分离到Core模块中是怕万一系统再扩展Web应用,Core模块可以直接使用。

2020年的时候,架构图如下图所示。

不再考虑可能性极小的Web应用扩展,合并成了三个程序集,把Core中代码融合到了BLLs程序集中。各功能模块在程序集内部以文件夹组织,只是把逻辑和UI分离。

2022年的时候,架构如下图所示。

ArcObejcts SDK 020 开发框架搭建-架构设计的更多相关文章

  1. .NET开发框架(六)-架构设计之IIS负载均衡(视频)

    前面有关注我们公众号文章的朋友应该都知道,我们的分布式应用服务可以通过Ocelot网关进行负载均衡,这种方式属于应用级别的实现. 而今天我们给大家介绍的是平台级别的实现,并且我们首次使用视频方式进行讲 ...

  2. 搭建rtmp直播流服务之3:java开发ffmpeg实现rtsp转rtmp并实现ffmpeg命令的接口化管理架构设计及代码实现

    上一篇文章简单介绍了java如何调用ffmpeg的命令:http://blog.csdn.net/eguid_1/article/details/51777716 上上一篇介绍了nginx-rtmp服 ...

  3. 短视频 SDK 架构设计实践

    作者简介 孔维乐,七牛云客户端团队 Android 平台高级开发工程师,专注音视频,图形图像领域.OpenGL 专家,先后参与直播推流及连麦 SDK 的开发,主导短视频 SDK 的架构设计与实现, 对 ...

  4. VICA 架构设计(1)

    本文记录最近完成的一个通用实时通信客户端的架构.   背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...

  5. NET ERP系统架构设计

    解析大型.NET ERP系统架构设计 Framework+ Application 设计模式 我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应 ...

  6. .NET Core实战项目之CMS 第九章 设计篇-白话架构设计

    前面两篇文章给大家介绍了我们实战的CMS系统的数据库设计,源码也已经上传到服务器上了.今天我们就好聊聊架构设计,在开始之前先给大家分享一下这几天我一直在听的<从零开始学架构>里面关于架构设 ...

  7. VICA 架构设计

    本文记录最近完成的一个通用实时通信客户端的架构. 背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 Act ...

  8. 【架构设计】Android:配置式金字塔架构

    最近做一个项目,在项目搭建之前,花了些许时间去思考一下如何搭建一个合适的架构.一开始的构思是希望能合理的把应用的各部分进行分离,使其像金字塔一样从上往下,下层为上层提供功能. 在平常项目中,总是有很多 ...

  9. Vue 项目架构设计与工程化实践

    来源 文中会讲述我从0~1搭建一个前后端分离的vue项目详细过程 Feature: 一套很实用的架构设计 通过 cli 工具生成新项目 通过 cli 工具初始化配置文件 编译源码与自动上传CDN Mo ...

  10. Android架构设计之插件化、组件化

    如今移动app市场已经是百花齐放,其中有不乏有很多大型公司.巨型公司都是通过app创业发展起来的:app类型更加丰富,有电子商务.有视频.有社交.有工具等等,基本上涵盖了各行各业每个角落,为了更加具有 ...

随机推荐

  1. Docker 运行命令

    停止所有的容器 docker stop $(docker ps -aq) 启动所有的容器 docker start $(docker ps -aq) 停止容器 docker stop <容器Na ...

  2. linux查看分区命令和根分区扩容方法

    df 查看文件系统磁盘空间的使用情况df [选项].[FILE]...当我们指定文件参数FILE时,将会显示该文件所在系统的信息-a 显示出所有的文件系统,包括大小只有0 blocks的文件系统:-h ...

  3. linux 根目录扩容方法

    准备知识 linux volume 1.(PV)physical volume disk : 物理硬盘 物理硬盘需要转换成lvm(logic volume manage)可识别的状态,将磁盘的syst ...

  4. JDK7-日历类--java进阶day07

    1.Calendar类 用于获取或者修改时间,之前学的Date类,获取和修改时间的方法已经过时 2.Calendar对象的创建 Calendar类里面有很多抽象方法,如果创建对象就要全部重写,所以不能 ...

  5. Sql语句:条件限制语句

    where select sname,sdept,sage from student where ssex = '男' or ssex = '女' and sage not between 20 an ...

  6. PII is hidden.

    使用 Microsoft.AspNetCore.Authentication.JwtBearer 做验证的时候报错如下: IDX10503: Signature validation failed. ...

  7. 多线程,Join()

    一.定义:就是该线程是指的主线程等待子线程的终止.也就是在子线程调用了join()方法,后面的代码,只有等到子线程结束了才能执行 二.不加join: class Thread1 extends Thr ...

  8. JAVA基础之多线程一期

    一.并发与并行的区别 并发:指同一时间段,两个或多个事件交替进行 并行:指同一时间段,两个或多个事件同时进行 二.进程与线程的区别 进程:正在内存中运行的程序就是进程 线程:线程归属于进程,它是进程中 ...

  9. jmeter使用json断言校验返回结果

    jmeter断言有好几种方式,本案讲json断言 http请求返回数据的格式有json格式,如下图,比如需要验证"ShipperRealName"参数的值 步骤如下: 第一步,选中 ...

  10. GPFS并行文件系统部署实践

    环境 ubuntu22.04 试用版下载链接 https://www.ibm.com/cn-zh/products/storage-scale 我的版本:Storage_Scale_Developer ...