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的定义。

image1.png

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

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

image2.png

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

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

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

4、业务功能复杂的系统

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

image3.png

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

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

5、架构的演变

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

还是以GeoChem系统为例。

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

image4.png

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

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

image5.png

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

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

image6.png