我正在创建一个 Web 应用程序来模拟管道系统,您可以在其中精确放置管道并从理论上跟踪流体流动(使用热力学计算),包括压力损失等。但是,当我开始编写此功能时,我想知道是否有一个现有的架构可以处理分支、分离、弯曲、海拔、下降等元素。
到目前为止,我已经想出了这个结构来代表我的管道:
pipe = {
from: {
position: [0.25, 1.25, 0],
connected: false
},
to: {
position: [5, 1.25, 0],
connected: false
},
id: 2164514,
stage: -4
};
但我觉得这个设置很快就会变得过于复杂。 对于更适合此类模拟的架构,您有什么建议或想法吗?
到目前为止,我尝试的是创建一个结构,其中每个管道都有一个起始位置和终止位置,以及 ID 和其他详细信息。我希望这将是一种灵活的方式来表示不同的管段及其连接,从而可以轻松修改和扩展以处理分支、弯曲和其他功能等内容。
但是,我发现这种方法可能很快就会变得过于复杂,尤其是在处理涉及分离、多个分支或不同高度的更复杂网络时。我期望该结构是可扩展的,但随着系统的增长,它似乎会变得难以管理和维护。
面向对象的方法是可行的,其中管道被定义为类/对象。 您可以定义管道所需的属性,例如长度、直径等。
然后,您可以定义逻辑,可能是几种类型的逻辑:帮助管理如何组装管道的逻辑,另一个用于执行模拟。
我会重点关注您需要首先执行的逻辑,并用它来指导您的类/对象设计;稍后我会担心数据结构(用于保存数据)。
您熟悉设计模式吗? 如果没有,您可能会找到一个或多个在项目的各个方面对您有帮助的。 我现在没有考虑为您提供特定的模式,但某些结构和行为模式可能在某些时候对您有用。
测试对象和逻辑设计的一种方法是提出一系列功能场景,并使用每个场景来“测试”您的设计 - 在初始阶段,您的第一次测试可能是在白板上 - 看看是否那么想法就值得在代码中进行原型设计。
您之前构建过 Web 应用程序吗? 您认为这个系统会运行多久?谁来维护它? (我想知道要投入多少工程和架构,比如这是一个个人爱好项目还是一个“严肃的”专业产品?)。
一个随机的想法 - 如果你想模拟行为,也许专注于使用相对值而不是绝对值,例如诸如管道长度之类的变量而不是开始/结束坐标;因为将管道长度加在一起比计算坐标之间的距离更容易。