我正在构建一个PHP Web应用程序,该应用程序应向用户提供命令他与另一个人/组织之间的(ConnectDirect或文件传输网关)连接的“安装”/设置的可能性。
(连接实现的技术规范并不重要-在应用程序中,仅是作为产品的连接,可以对其进行订购和管理。)
其模型层的类层次结构应表示以下实际基础结构:
因此,我看到以下逻辑元素:逻辑连接,物理连接,角色(源和目标),连接类型,顺序,端点,端点类型(CD和FTGW)。
我目前拥有的结构如下所示:
但是有一些问题:
一种替代方法是用两个关系替换相互之间的关系
Endpoint
和PsysicalConnection
:EndpointCD-PsysicalConnectionCD
和EndpointFTGW-PsysicalConnectionFTGW
。 专业版:更加一致;消除了从一对任意端点建立每个连接(类型)的虚假可能性的逻辑不精确(甚至是错误)。 相反:实际上,包含两个端点的要求是每个虚拟连接的特征-从这个角度来看,正确的位置是非常基本的
PsysicalConnection
类。NULL
)。另一种方法是扩展层次结构...
一种。 ...由像
EndpointSource
和EndpoitTarget
这样的类直接继承自Endpoint
并由EndpointCD
和EndpointFTGW
类继承(这意味着:两个相同的子树-EndpointSource
和EndpointTarget
下);b。 ...由具体的CD或FTGW端点类(分别是两个相同的子树两次)继承的
EndpointCDSource
和EndpointCDTarget
(从EndpointCD
类继承)以及EndpointFTGWSource
和EndpointFTGWTarget
(从EndpointFTGW
类继承)之类的类组成;C。 ...由像
MyConcreteEndpoint***Source
和MyConcreteEndpoint***Target
这样的类继承自具体的终结点类(这意味着:每个MyConcreteEndpoint
类都成为抽象并得到两个子类-MyConcreteEndpoint***Source
和MyConcreteEndpoint***Target
,例如EndpointCDLinux
现在是抽象的,并由EndpointCDLinuxSource
和EndpointCDLinuxTarget
继承)。专业版:消除了废物性质。 相反 :(更多)复杂的类层次结构。
好吧,这是关于软件体系结构的,应该(当然,这)将是我的设计决定。但是,很高兴听到/阅读一些专家(或非专家)的想法,如何处理这种情况。有什么适当的方法可以为我所描述的基础结构组织逻辑项?
最佳答案
也许我想得太过分了,但是我建议您使用略有不同的模型来反射(reflect)您的业务逻辑。
跟随可能是一个完全误会,但我会试一试。
所以:
根据实际上是什么连接,这是一个概念:
基于此,我建议采用以下模型来构建,管理和存储产品配置:
这里:
如果仍然需要节点或协议(protocol)同时包含源和目标相关属性,并且在某些配置中它们的一部分仍可能为NULL-如果担心未使用的列等,我建议对数据库使用EAV存储模型。
使用您所描述的建议的模型连接可以表示如下:
Connection:IBM_CD {
nodes:[
{//LinuxNode
target:*nextElement,
protocol:{//IBM.ConnectDirect.Protocol
..target attributes..
..source attributes..
}
..platform specific attributes..
},
{//WindowsShareNode
target:*nil,
protocol:{
//IBM.ConnectDirect.Protocol(same instance or null)
}
..platform specific attributes..
},
]
}
Connection:IBM_FTGW {
nodes:[
{//LinuxNode
target:*nextElement,
source:*nil,
protocol:{//IBM.FTGW.Protocol
..target attributes..
..source attributes..
}
..platform specific attributes..
},
{//IntermediateServerLinuxNode
target:*nextElement,
source:*prevElement,
protocol:{//IBM.FTGW.Protocol
..target attributes..
..source attributes..
},
..platform specific attributes
},
{//WindowsShareNode
target:*nil,
source:*prevElement,
protocol:*nil,
..platform specific attributes..
}
]
}
关于php - 当成员也是按层次结构构造时,如何构建类结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35415323/