Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的程序结构/设计所需的输入_C++_Design Patterns_Structure_Osc - Fatal编程技术网

C++ 我的程序结构/设计所需的输入

C++ 我的程序结构/设计所需的输入,c++,design-patterns,structure,osc,C++,Design Patterns,Structure,Osc,我试着根据需要详细描述我正在构建的应用程序,所以我为这篇文章提前道歉 我正在设计和构建一个相当大的音乐应用程序,使用C++ JULS框架,简单地说,在OSC消息中把它们变成音频和MIDI数据。该应用程序有三种“模式”,每种模式定义OSC消息将产生何种声音。用户可以应用一种模式和更多模式设置来定义每个OSC消息“触发”的声音 下面是程序的类关系和层次结构的基本框图概述,或者至少是我理论上的设想。为了澄清Juce术语,“组件”类基本上是一个GUI对象/类,它在屏幕上显示内容并允许用户交互 我是一个

我试着根据需要详细描述我正在构建的应用程序,所以我为这篇文章提前道歉

我正在设计和构建一个相当大的音乐应用程序,使用C++ JULS框架,简单地说,在OSC消息中把它们变成音频和MIDI数据。该应用程序有三种“模式”,每种模式定义OSC消息将产生何种声音。用户可以应用一种模式和更多模式设置来定义每个OSC消息“触发”的声音

下面是程序的类关系和层次结构的基本框图概述,或者至少是我理论上的设想。为了澄清Juce术语,“组件”类基本上是一个GUI对象/类,它在屏幕上显示内容并允许用户交互

我是一个有经验的C程序员,但是我对C++和OOP设计都比较陌生。我理解大多数情况,但我面临的主要问题是如何构造所有类,使它们具有正确的关系和层次结构,以便它们都能够正确通信,以便应用程序能够完成它需要做的事情

以下是每个类的简要说明:

  • OscInput
    -此基类使用oscpack库侦听OSC消息。只有一个类可以从基类继承,因为如果同一UDP端口上有多个侦听器,应用程序将崩溃

  • Main
    -应用程序启动。继承自OSC输入,因此每次收到OSC消息时,都会在此类中调用回调函数

  • main窗口
    -应用程序主文档窗口-默认为Juce应用程序

  • MainComponent
    -应用程序的主/后台组件/GUI-默认为Juce应用程序

  • Mode1Component
    /
    Mode2Component
    /
    Mode3Component
    -从MainComponent调用并显示每个组件类的单个实例,用户使用MainComponent更改每个OSC消息的设置

  • 子组件1
    -从MainComponent调用并显示此组件类的单个实例

  • 子组件2
    -从子组件1调用并显示此组件类的48个实例。每个实例用于显示接收到的不同OSC消息的值

  • Mode1/Mode2/Mode3
    -从Main调用每个类的单个实例。每个类用于根据设置类中的值/变量将OSC消息实际转换为音频或MIDI数据

  • 设置
    -此类的单个实例,用于存储控制每个不同OSC消息产生的声音的设置

我很高兴我以正确的方式布置和连接了所有组件/GUI类。我也收到了收到的OSC信息,工作正常。但我不太确定如何实现设置类实例之间的关系。以下是我需要帮助的关系:

  • Mode1、Mode2和Mode3的单个实例都需要从设置类实例中检索值
  • MainComponent、Mode1 Component、Mode2 Component和Mode3 Component的单个实例都需要向设置类实例发送值,并从实例中检索值
  • 子组件2的所有48个实例都需要检索OSC消息
因此,我有以下问题:

  • 应该从哪里调用
    设置
    类实例,以便上面提到的所有相关类实例都可以与其通信?我只希望这个类的一个实例需要被许多其他类访问,所以它应该是全局类、单例类还是静态类?我一直在研究单体设计模式,这似乎是我正在寻找的,但我得到的印象是,我应该避免它,如果我可以,并考虑替代方法。

  • 监听OSC消息的应该是
    Main
    类吗?如何使子组件2接收OSC消息以及Mode1、Mode2和Mode3类实例

  • 功能类(Mode1、Mode2和Mode3)是否应该从Main调用?我试图将所有功能和GUI代码分开,因为在我处理应用程序的功能编程时,有其他人处理GUI编程

  • 有人能发现我的程序设计模式中的任何主要缺陷吗

任何帮助都将不胜感激


感谢您就“Main”提出的问题:您不应将“应用程序启动”与在同一类/组件(“”)中处理消息的责任混为一谈。您所描述的闻起来像是发布者/订阅者模式的应用程序

如果你想让你的架构真正面向消息,不是所有东西都依赖于“Main”,而“Main”也不是所有东西,我建议你看看“流设计”。看这里


当您几乎在程序中的任何地方都需要设置时,将设置类实例实现为单例是可以的。至少它比静态类更易于测试。但是你应该避免在里面放太多东西,因为很多东西可能取决于设置,这可能会对以后的可维护性产生负面影响。

我们需要一个LiamLacey.StackExchange.Com网站来回答这个庞然大物。祝你好运,能得到回复-也许能将问题缩小到某个人自愿提供一些建议可以管理的范围。是的,我为这个冗长的问题道歉-总是更擅长写作短文