当成员也是分层结构时,如何构建类结构?

2024-02-13

我正在构建一个 PHP Web 应用程序,它应该为用户提供订购他与另一个人/组织之间的(ConnectDirect 或文件传输网关)连接的“安装”/设置的可能性。

(连接实现的技术细节并不重要——在应用程序中,它只涉及作为产品的连接,可以订购和管理。)

其模型层的类层次结构应代表以下现实世界的基础设施:

  • 连接,可以订购。
  • 连接可以是 IBM Connect:Direct 连接或 IBM File Transfer Gateway 连接。
  • A CD连接直接来自 A (source) to B (target).
  • A FTGW连接包括身体上的两个连接:A(源)到 FTGW 服务器以及从 FTGW 服务器到 B(目标)——但是逻辑上(对于订购用户)这也是一个连接。
  • (还有一种 FTGW 连接的情况,它使用 Connect:Direct 作为协议。)
  • Every endpoint是源或目标。

所以我看到以下逻辑元素:逻辑联系, 物理连接, role (source and target), 连接类型, order, endpoint, 端点类型(CD 和 FTGW)。

我目前的结构如下所示:

但它也存在一些问题:

  1. 两个层次结构树,其中每个element的一个consists包含特定的元素subset另一个(每个 CD 连接由 CD 端点组成;每个 FTGW 连接由两个 FTGW 端点组成,或更准确地说:每个 FTGW 逻辑连接由两个物理 FTGW 连接组成 - 每个 FTGW 连接由一个 FTGW 端点和 FTGW 服务器组成作为第二个端点)。

    另一种选择可能是替换之间的关系Endpoint and PsysicalConnection由两个关系:EndpointCD-PsysicalConnectionCD and EndpointFTGW-PsysicalConnectionFTGW.

Pro:更加一致;消除了逻辑上的不精确性(或者甚至可能mistake)从一对任意端点构建每个连接(类型)的伪造可能性。Contra:实际上,包含两个端点的要求是每个物理连接的一个特征 - 从这个角度来看,正确的位置是非常基本的PsysicalConnection class.

  1. Every endpoint can be both源和目标以及contains不仅是公共端点属性,而且源和目标属性。这意味着,根据端点的当前角色,某些属性是waste。这也会影响数据库结构(列,有时必须设置并且有时必须双NULL).

    另一种选择是扩展层次结构......

    A。 ...按类EndpointSource and EndpoitTarget直接继承自Endpoint并被类继承EndpointCD and EndpointFTGW(这意味着:两个相同的子树 - 在EndpointSource及以下EndpointTarget);

    b. ...按类EndpointCDSource and EndpointCDTarget(继承自类EndpointCD) and EndpointFTGWSource and EndpointFTGWTarget(继承自类EndpointFTGW) 分别由具体的 CD 或 FTGW 端点类继承(这意味着:两个相同的子树两次);

    C。 ...按类MyConcreteEndpoint***Source and MyConcreteEndpoint***Target从具体端点类继承(这意味着:每个MyConcreteEndpoint类变得抽象并获得两个子类——MyConcreteEndpoint***Source and MyConcreteEndpoint***Target, e.g. EndpointCDLinux现在是抽象的并被继承EndpointCDLinuxSource and EndpointCDLinuxTarget).

    Pro:消除废物特性。Contra:(更)复杂的类层次结构。

嗯,这是关于软件架构的,应该(当然将会)是我的设计决定。但很高兴听到/读到一些专家(或非专家)的想法,以及如何处理这种情况。组织像我所描述的基础设施的逻辑项的正确方法是什么?


也许我想太多了,但我建议您使用稍微不同的模型来反映您的业务逻辑。

以下可能完全是误解,但我会尝试一下。

So:

基于实际上任何连接是什么,这里有一个概念:

  • 每个连接都是节点的集合,数据应通过这些节点传输才能到达目的地。
  • 每个节点可以使用特定协议与下一个节点连接,该协议仅特定于两个特定节点之间的直接连接。
  • 协议有其自己的源节点和目标节点共有的属性

基于此,我建议采用以下构建、管理和存储产品配置的模型:

Here:

  • LogicalConnection 是对实际 Connection、Node 和 Protocol 类的构建组合的引用

  • 连接包含一个节点的双链表,这些节点按数据流的顺序组成。即:第一个元素是源节点,第二个元素是其目标节点,依此类推。

  • 具体节点包含特定于平台的配置、对目标 (*Node)、源节点 (*Node) 和具体协议 (*Protocol) 的引用

  • Protocol 包含其针对源和目标的具体配置,Node 实例可以参考 Protocol 实例来提取所需的配置。

  • 目标节点和源节点通过双链表结构“看到”彼此以及源-目标协议配置。

  • Configurations\*ConfigBuilder 实现编排从 UI 接受数据并根据情况将其转换为连接、节点和协议的实际组合的过程。

  • IBM\ConnectDirect\ 和 IBM\FTGW\ 命名空间包含协议和 *Node 的具体实现(例如 WindowsNode、UnixNode)

如果节点或协议仍然需要包含源和目标相关属性,并且其中一部分在某些配置中仍然可能为 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..
    }
  ]
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当成员也是分层结构时,如何构建类结构? 的相关文章

  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array
  • 如何将 php curl 中的 cookie 获取到变量中

    因此 其他公司的一些人认为 如果不使用soap xml rpc rest 或任何其他合理的通信协议 而是将所有响应作为cookie 嵌入标头中 那就太棒了 我需要从这个卷曲响应中将这些 cookie 作为数组取出 如果我不得不为此浪费大量的
  • 替换多余的空格

    我需要从应用程序中的玩家用户名中删除多余的空格 字母之间不止一次空格 并将其替换为单个空格 我不介意用户有一个空格 但我需要删除彼此相邻的多个空格 目前我是这样实现的 replace array array fill array array
  • “空合并”(??) 运算符的用途是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 随着新的 PHP 版本 PHP 7 的发布 引入了新功能 这些新功能中有一个我不熟悉的操作符 这Nul
  • laravel 中的 jwt 中的“无法从请求中解析令牌”

    我面临着 无法从请求中解析令牌 Laravel 中的 JWT 错误 我在 localhost Windows 7 中的 Xampp 中尝试了相同的代码 它正在工作 但在服务器上它不起作用 我已经通过了 授权 标头中的令牌也发生了变化 hta
  • PHP CSV VLookup

    我正在寻找一个 PHP 函数 它可以读取 CSV 文件并在第 1 列上执行 vlookup 以回显第 2 列中同一行的相关值 例如 如果 CSV 包含 Name Email John j email protected cdn cgi l
  • VB 脚本 Documents.Open 抛出 424 错误

    所以我有一个vbs脚本 Function test2open sSourceFile sPDFFile Dim wApp As Word Application Dim wDoc As Word Document logStream wri
  • 在 PHP 应用程序中实现插件的设计模式

    对于如何在 PHP 应用程序中实现插件有共识吗 我已经调查过观察者模式 http devzone zend com 1732 implementing the observer pattern with splobserver and sp
  • 如何在 Codeigniter 中将变量从一个控制器传递到另一个控制器

    我刚刚开始学习 Code Igniter 我想知道如何将变量从一个控制器 first cont php 传递到另一个控制器 second cont php 任何帮助 将不胜感激 提前致谢 这将取决于具体情况 如果您想将数据保留一段时间 那么
  • 通用接口和实现 - 类型无法转换

    我有一个通用接口定义为 public interface ItemService
  • “yum install php”需要 httpd-mmn = 20051115

    我从源代码安装了 httpd apache 2 4 6 现在我想安装 PHP 但yum install php吐出错误 Error Package php 5 3 3 40 el6 6 x86 64 updates Requires htt
  • 如何从表中选择所有偶数 id?

    我想从 MySQL 数据库的表中选择所有甚至帖子 ID 然后显示它们 我还想获取所有带有奇怪 id 的帖子并将它们显示在其他地方 我想使用 PHP 来完成此操作 因为这是我使用的服务器端语言 或者 我是否必须选择所有帖子 然后使用 Java
  • 在 PHP 中将对象作为参数传递[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • CodeIgniter PHP 模型访问“无法找到您指定的模型”

    我一直在尝试为我正在构建的这个网站加载一些模型 但不知道什么原因 会带来如下错误 An Error Was Encountered Unable to locate the model you have specified logon mo
  • 即使通过引用传递,也被调用而不是派生的基类方法[重复]

    这个问题在这里已经有答案了 我有3节课 A B and AnotherClass Where B源自A class A public A virtual void method default action 然后我有一个派生类 B clas
  • Yii2 Rest - 自定义操作和 OPTIONS 方法

    我在 UsersController 类中执行以下操作 login 路由操作时遇到问题 public function actionLogin data Yii app gt getRequest gt getBodyParams mode
  • 显示产品中的类别名称和类别 ID - Laravel

    我已经找到了这个答案 但它对我不起作用 Laravel 按 id 显示类别 https stackoverflow com questions 39222584 laravel displaying categories by id 我无法
  • 登录页面上出现错误“警告:尝试访问 bool 类型值的数组偏移量”[重复]

    这个问题在这里已经有答案了 我目前正在为一个学校项目制作一个网站 并且正在制作一个用户注册系统 目前 注册部分与进入 MySQL 数据库的用户数据完美配合 但是 我的登录页面似乎已损坏 每次我尝试登录时都会收到以下错误 警告 尝试访问第 2

随机推荐

  • ggplot2 以轴单位指定点大小

    我想从一个简单的数据集中绘制一个矩形内有大点的图 我想在不同方面显示可能有多个结果 问题是矩形的大小 使用geom rect 以轴单位定义 而size的论证geom point是在其他一些单位 因此 矩形上的点的相对大小根据面的数量而变化
  • 浏览器后退按钮处理

    我正在尝试处理浏览器后退按钮事件 但找不到任何解决方案 我想询问用户是否使用 确认框 单击浏览器后退按钮 如果他选择 确定 我必须允许后退按钮操作 否则我必须停止后退按钮操作 任何人都可以帮助我实现这一点 如果按下后退按钮 则警告 确认用户
  • 在 XElement.Load 上保留 \r\n

    有没有办法可以在 XElement Load 上保留 r n TextReader reader new StringReader rawInputString rawInputString is just text in html for
  • 关于清单中的全屏和无标题栏

    我想将我的应用程序设置为全屏视图 我想到将其设置在个人活动中使用FullScreen and NoTitlebar 但我想在整个应用程序的清单 XML 文件中设置它 而不是每个活动 这可能吗 帮助我 谢谢 要将您的应用程序或任何单独的活动显
  • 如何通过单击 ASP.NET 中的图像按钮来传输 zip 文件?

    我的问题 当用户单击 aspx 页面上的图像按钮时 代码隐藏会创建一个 zip 文件 然后我尝试将该 zip 文件流式传输给用户 为了流式传输文件 我使用以下代码 FileInfo toDownload new FileInfo fullF
  • C# 8 switch 表达式不够“智能”

    这段代码很简单 只是一个普通的开关 bool isSomething strSomething switch I gt true D gt false gt null 但是 编译器给了我以下错误 CS0037 无法将 null 转换为 bo
  • python中的嵌套正则表达式

    在 Perl 中我可以这样做 number qr zero one two three four five six seven eight nine ix foo qr quantity s number ix 我的实际正则表达式有很多行
  • 如何在浏览器中调试angularjs的$rootScope对象

    当 AngularJS 应用程序加载到浏览器中时 有没有办法对其进行调试 IE 我希望得到 rootScope我当前的应用程序 我该怎么做呢 巴塔朗 1 另外 您可以通过从控制台执行以下命令来获取 DOM 中任何元素的范围 angular
  • 根据列表框尺寸调整列表框内容的大小

    我正在尝试根据列表框本身调整列表框内容的大小 这是在 WPF 中完成的 关于这如何可能的任何想法 我认为当您说 调整大小 时 您的意思是您想要在两个方向上拉伸项目 要采用默认的列表框并水平拉伸项目 您需要做的是
  • C++ 求两个向量之间的差异

    假设你有 2 个向量 vector
  • 如何在 Eclipse 中找到可重写的方法

    public class test2 extends ListActivity 例如 我想找到 ListActivity 中可以重写的方法是什么 在 eclipse 中找到这个的快捷键是什么 如何通过 eclipse intellisens
  • 如何将 fancybox 绑定到动态添加的元素?

    我使用 jquery fancybox 1 3 4 作为弹出表单 但我发现 fancybox 无法绑定到动态添加的元素 例如 当我向当前文档添加 html 元素时 像这样 首先我使用 jquery 将一个元素附加到主体 document b
  • Jackson - 将内部对象列表反序列化为更高级别的列表

    使用 Spring Boot 和 Jackson 如何将包装 内部列表直接反序列化为外层列表 例如 我有 transaction items item itemNumber 193487654 itemDescription Widget
  • 从 JavaScript 手动触发 iPhone/iPad/iPod 键盘

    我正在开发一个 HTML 代码编辑器 使用简单的 DIV 并捕获事件 当我在 iPad 上使用它时 键盘永远不会弹出 因为从技术上讲我并不处于可编辑字段中 有没有办法以编程方式告诉 iPad 我需要键盘 如果您的代码是通过用户操作启动的某些
  • 将 pop() 与 JavaScript 关联数组结合使用

    我怎样才能在JS中做类似下面的事情 我想模仿 pop 在对象而不是数组上 var deck cardK 13 cardQ 12 cardAJ 11 var val deck pop console log Key val key conso
  • Python 代码块的正则表达式?

    如何创建一个可以匹配行开头以及以 tab 开头的所有以下行的正则表达式 例如 not keyword not this line keyword and random text this line this line and this li
  • 从 CSV 文件创建 ODS 工作表

    我有一组 CSV 文件 需要将其转换为具有多个选项卡式工作表的单个 ODS 甚至 Excel 电子表格 目前我正在使用 python 的 pyexcel 库 但它有很多错误并且速度非常慢 Libreoffice 有一个很好的文件转换实用程序
  • Android:从 Hashmap Arraylist 获取单个值?

    基本上 我有一个使用哈希映射的数据库 运行查询后 我想输出 ID 并将其存储在另一个活动的数组中 之后 我想访问数组中的单个元素 这是我的数据库代码 public ArrayList
  • test_that 与 match.fun 在使用两层深度时会引发意外错误

    我使用时遇到问题match fun和 一起test that when match fun用于嵌套函数内部 为了说明这一点 我构建了一个包含两个函数的快速玩具示例 R 包 后者简单地调用前者 i dont throw error lt fu
  • 当成员也是分层结构时,如何构建类结构?

    我正在构建一个 PHP Web 应用程序 它应该为用户提供订购他与另一个人 组织之间的 ConnectDirect 或文件传输网关 连接的 安装 设置的可能性 连接实现的技术细节并不重要 在应用程序中 它只涉及作为产品的连接 可以订购和管理