C++ 我的程序结构/设计所需的输入
我试着根据需要详细描述我正在构建的应用程序,所以我为这篇文章提前道歉 我正在设计和构建一个相当大的音乐应用程序,使用C++ JULS框架,简单地说,在OSC消息中把它们变成音频和MIDI数据。该应用程序有三种“模式”,每种模式定义OSC消息将产生何种声音。用户可以应用一种模式和更多模式设置来定义每个OSC消息“触发”的声音 下面是程序的类关系和层次结构的基本框图概述,或者至少是我理论上的设想。为了澄清Juce术语,“组件”类基本上是一个GUI对象/类,它在屏幕上显示内容并允许用户交互 我是一个有经验的C程序员,但是我对C++和OOP设计都比较陌生。我理解大多数情况,但我面临的主要问题是如何构造所有类,使它们具有正确的关系和层次结构,以便它们都能够正确通信,以便应用程序能够完成它需要做的事情 以下是每个类的简要说明:C++ 我的程序结构/设计所需的输入,c++,design-patterns,structure,osc,C++,Design Patterns,Structure,Osc,我试着根据需要详细描述我正在构建的应用程序,所以我为这篇文章提前道歉 我正在设计和构建一个相当大的音乐应用程序,使用C++ JULS框架,简单地说,在OSC消息中把它们变成音频和MIDI数据。该应用程序有三种“模式”,每种模式定义OSC消息将产生何种声音。用户可以应用一种模式和更多模式设置来定义每个OSC消息“触发”的声音 下面是程序的类关系和层次结构的基本框图概述,或者至少是我理论上的设想。为了澄清Juce术语,“组件”类基本上是一个GUI对象/类,它在屏幕上显示内容并允许用户交互 我是一个
-此基类使用oscpack库侦听OSC消息。只有一个类可以从基类继承,因为如果同一UDP端口上有多个侦听器,应用程序将崩溃OscInput
-应用程序启动。继承自OSC输入,因此每次收到OSC消息时,都会在此类中调用回调函数Main
-应用程序主文档窗口-默认为Juce应用程序main窗口
-应用程序的主/后台组件/GUI-默认为Juce应用程序MainComponent
/Mode1Component
/Mode2Component
-从MainComponent调用并显示每个组件类的单个实例,用户使用MainComponent更改每个OSC消息的设置Mode3Component
-从MainComponent调用并显示此组件类的单个实例子组件1
-从子组件1调用并显示此组件类的48个实例。每个实例用于显示接收到的不同OSC消息的值子组件2
-从Main调用每个类的单个实例。每个类用于根据设置类中的值/变量将OSC消息实际转换为音频或MIDI数据Mode1/Mode2/Mode3
-此类的单个实例,用于存储控制每个不同OSC消息产生的声音的设置设置
- Mode1、Mode2和Mode3的单个实例都需要从设置类实例中检索值
- MainComponent、Mode1 Component、Mode2 Component和Mode3 Component的单个实例都需要向设置类实例发送值,并从实例中检索值
- 子组件2的所有48个实例都需要检索OSC消息
- 应该从哪里调用
类实例,以便上面提到的所有相关类实例都可以与其通信?我只希望这个类的一个实例需要被许多其他类访问,所以它应该是全局类、单例类还是静态类?我一直在研究单体设计模式,这似乎是我正在寻找的,但我得到的印象是,我应该避免它,如果我可以,并考虑替代方法。设置
- 监听OSC消息的应该是
类吗?如何使子组件2接收OSC消息以及Mode1、Mode2和Mode3类实例Main
- 功能类(Mode1、Mode2和Mode3)是否应该从Main调用?我试图将所有功能和GUI代码分开,因为在我处理应用程序的功能编程时,有其他人处理GUI编程
- 有人能发现我的程序设计模式中的任何主要缺陷吗
感谢您就“Main”提出的问题:您不应将“应用程序启动”与在同一类/组件(“”)中处理消息的责任混为一谈。您所描述的闻起来像是发布者/订阅者模式的应用程序 如果你想让你的架构真正面向消息,不是所有东西都依赖于“Main”,而“Main”也不是所有东西,我建议你看看“流设计”。看这里
当您几乎在程序中的任何地方都需要设置时,将设置类实例实现为单例是可以的。至少它比静态类更易于测试。但是你应该避免在里面放太多东西,因为很多东西可能取决于设置,这可能会对以后的可维护性产生负面影响。我们需要一个LiamLacey.StackExchange.Com网站来回答这个庞然大物。祝你好运,能得到回复-也许能将问题缩小到某个人自愿提供一些建议可以管理的范围。是的,我为这个冗长的问题道歉-总是更擅长写作短文