我正在构建一个 PHP Web 应用程序,它应该为用户提供在他和另一个人/组织之间订购(ConnectDirect 或文件传输网关)连接的“安装”/设置的可能性。
(连接实现的技术规格并不重要——在应用程序中,它只是关于连接作为产品,可以订购和管理。)
其模型层的类层次结构应代表以下现实世界的基础设施:
- 有连接,可以订购。
- 连接可以是 IBM Connect:Direct 连接或 IBM File Transfer Gateway 连接。
- CD连接直接从 A(源)到 B(目标)。
- FTGW连接在物理上由两个连接组成:A(源)到 FTGW 服务器和从 FTGW 服务器到 B(目标)——但逻辑上(对于订购用户)它也是一个连接。
- (另外还有一个 FTGW 连接的情况,它使用 Connect:Direct 作为 protokoll。)
- 每个端点要么是源,要么是目标。
所以我看到以下逻辑元素:逻辑连接、物理连接、角色(源和目标)、连接类型、顺序、端点、端点类型(CD 和 FTGW)。
我目前拥有的结构如下所示:
但它存在一些问题:
有两个层次结构树,其中一个的每个元素都包含另一个特定子集的元素(每个 CD 连接由 CD 端点组成;每个 FTGW 连接由两个 FTGW 端点组成,或者更准确地说:每个 FTGW 逻辑连接由两个物理 FTGW 连接——每个连接都包含一个 FTGW 端点和作为第二个端点的 FTGW 服务器)。
另一种方法可能是用两个关系替换 betweet
Endpoint
和PsysicalConnection
的关系:EndpointCD-PsysicalConnectionCD
和EndpointFTGW-PsysicalConnectionFTGW
。
临:更一致;消除了从一对任意端点构建每个连接(类型)的伪造可能性的逻辑不精确性(甚至可能是错误)。相反:实际上,包含两个端点的要求是每个心理连接的一个特征——从这个角度来看,这个正确的地方是非常基本的PsysicalConnection
类。
每个端点都可以是源和目标,不仅包含公共端点属性,还包含源和目标属性。这意味着,取决于端点的当前角色,某些属性是浪费的。这也会影响数据库结构(列,有时必须设置,有时必须 bi
NULL
)。另一种方法是扩展层次结构......
一个。...通过类
EndpointSource
和EndpoitTarget
直接从Endpoint
类继承并被类继承EndpointCD
和EndpointFTGW
(这意味着:两个相同的子树——在EndpointSource
和下EndpointTarget
);湾。...通过类
EndpointCDSource
和EndpointCDTarget
(从类继承EndpointCD
)和EndpointFTGWSource
和EndpointFTGWTarget
(从类EndpointFTGW
继承)分别由具体的 CD 或 FTGW 端点类继承(这意味着:两个相同的子树);C。...通过类
MyConcreteEndpoint***Source
和MyConcreteEndpoint***Target
从具体端点类继承(这意味着:每个MyConcreteEndpoint
类都变为抽象并获得两个子类——MyConcreteEndpoint***Source
andMyConcreteEndpoint***Target
, egEndpointCDLinux
现在是抽象的并且由EndpointCDLinuxSource
and继承EndpointCDLinuxTarget
)。优点:消除了浪费的属性。魂斗罗:一个(更)复杂的类层次结构。
嗯,它是关于软件架构的,应该(当然也会)是我的设计决定。但是很高兴听到/阅读一些专家(或非专家)的想法,如何处理这种情况。像我描述的那样,为基础设施组织逻辑项的正确方法是什么?