【发布时间】:2011-12-07 16:59:00
【问题描述】:
这是一个笼统的问题,不知道是属于Programming还是StackOverflow。
我正在编写一个小模拟。无需深入了解其细节,请考虑涉及多种身份。它们对应于 Object,因为我使用的是 OOP 语言。
- 有人居住在模拟的世界中
- 有地图
- 一张地图有许多地块,它们是具有某些特征的土地
- 有部落(人属于部落)
- 有一个名为 Position 的通用类来定位元素
- 有机器人控制着可以移动人的部落
- 有一个世界代表模拟的世界
等等。
如果将模拟世界设置为数据库,则对象将是具有大量引用的表,但在内存中我必须使用不同的策略。因此,例如,一个部落有一组 Guys 作为属性,世界有一个 Bots、Tribes 和 Maps 数组。 Map 有一个 Dictionary,其键是 Position,值是 Lot。一个人有一个职位,就是他所处的位置。
我建立这种联系的方式非常随意。例如,我可以在世界上拥有一组 Guys,或者 per Lot 一组 Guy(站在一块土地上的人),或者每个 Bot 一组 Guys(由机器人控制的家伙)。
这样做,我还必须传递很多对象。例如,机器人必须拥有关于地图和对手 Guys 的信息才能决定如何移动其 Guys。
如前所述,在数据库中,我有一个 Guys 表连接到lots 表(指示其位置)和 Tribe 表(指示它属于哪个 Tribe),因此查询“All位置 [1, 5] 的人”。 “部落 123 的所有人”。 “所有被 Bot B 控制的人都站在 Lot b34 上,不属于 456 部落”等等。
我使用 API 来获取最简单的信息,您必须创建 CustomerContextCollection 的实例并将其传递给 CustomerQueryFactory 以取回 CustomerInPlaceQuery 以... , 那就是我的意思。我想避免这样的事情,并且不得不依赖深度抽象和(反模式)抽象上下文。
问题是:管理以多种方式深度链接的实体和实体集合的首选、干净的方式是什么?
【问题讨论】:
-
您使用什么语言? C++?爪哇? C#?在每种语言中,您都必须有所不同
-
我没有提到任何语言,因为我宁愿让这种讨论语言不可知。顺便说一句,我正在使用 Ruby,但我在使用 Clojure、C#、Java 以及基本上我编写过一些玩具模拟的每种语言时都有相同的想法。
标签: oop language-agnostic simulation