首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体组件体系结构:要拆分大实体->难以重构

实体组件体系结构:要拆分大实体->难以重构
EN

Stack Overflow用户
提问于 2018-06-28 01:50:58
回答 1查看 73关注 0票数 0

在开发的第一步,我将CarAI设计为一个实体。

它工作得很好(伪代码):-

代码语言:javascript
运行
复制
for(every entity that is "racing car"){
    //^ know type by using flag 
    //   or iterate special component (e.g. "RacingCarComponent")
    Entity entity=...
    AI* ai=get<AI>(entity);
    ai->setInformation(...) 
}
for(every entity that is "bicycle"){
    Entity entity=...
    AI* ai=get<AI>(entity);
    ai->setInformation(...)   //the info is very different from "racing car"
}

稍后,我想要一个新的功能:切换出驱动程序(这会影响人工智能)。

如下图所示,我拆分了该实体:

上述守则将予修订如下:

代码语言:javascript
运行
复制
for(every entity that is "racing car"){
    Entity entity=...
    AttachAI* aiAttach=get<AttachAI>(entity);    //<-- edit
    aiAttach->ai->setInformation(...)            //<-- edit
}
for(every entity that is "bicycle"){
    Entity entity=...
    AttachAI* aiAttach=get<AttachAI>(entity);    //<-- edit
    aiAttach->ai->setInformation(...)            //<-- edit
}

问题

它在更改前后都很好,但是很难维护。

如果N类型的车辆在version1中存在,例如truck, motercycle, plane, boat, rocket

我将不得不编辑N*2行,其中可能已经分散在许多.cpp上。

主要问题: --如果我忘记重构任何代码,它仍然会编译得很好。

问题只会在运行时出现。

在现实生活中,每当新设计希望将一个实体划分成许多更简单的实体时,我就会面临这样的问题。

重构总是只是间接地添加另一个。

问题

假设在version1中,我不希望切换/退出驱动程序。

有可能防止这个问题吗?多么?

EN

回答 1

Stack Overflow用户

发布于 2018-06-28 02:17:01

我可能弄错了,但似乎您可能多次遍历所有实体,检查一个条件。我对c++语法不太确定,所以请耐心听我说:

代码语言:javascript
运行
复制
for (entities as entity) {
  info = null;

  //Check type to get specific info
  if (type is a "racing car"){
    info = "fast car";
  } 
  elseif (type is a "bicycle") {
    info = "rad spokes";
  }

  //If we found info, we know we had a valid type
  if (info isnt null) {
    aiAttach = get(entity);
    aiAttach->ai->setInformation(info);
  }
}

我不确定get函数是否需要针对每种类型的特定内容。在我的伪代码示例中,我假设我们只发送实体,而不是特定类型的东西。如果是这样的话,可以使用一个额外的变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51073595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档