当我喜欢模拟一些现实世界的东西时,我一直在思考这个问题,当类及其关系(关联,继承)变得越来越大而你无法将它们分开时。由此产生的问题是:它如何适合主存储器?
想象一下:我为个人建模,包含所有属性,例如。
每个属性都有自己的属性,例如
宠物
外套
头发
这个例子不是很干净,但这只是一个粗略的例子。
当然,并不总是直接链接,但有时候是类似集合的特殊类。但是,正确的方法是什么才能让底层计算机变得那么复杂(以便应用程序不会占用主内存的太多空间),而是让它完全在另一方面完成?
你的Steffen
答案 0 :(得分:0)
我认为问题是,“为什么这需要留在记忆中”?总之,它没有。如果你试图以你所描述的方式模拟你在这个世界中遇到的一切,你最终会失去记忆。那么你需要存储信息。那时,你的记忆问题就消失了。 RAM现在可能很快,但是如果你用完了,那对你没有好处。
答案 1 :(得分:0)
如果问题是将其纳入内存,可以使用SQL对其进行建模。
问题是,您可能有几个人或几个共有财产的动物。例如,一个人的头发也具有与动物相同的子特性。由于这种关系属性(我假设你可以让狗和人都有棕色头发),你可以使用一个SQL表,其中一个表代表每个属性。
individual
表将包含eyes, bodyType, job
等列,这些列将是具有这些属性的表的外键。例如,job
表包含salary
,position
,company
等属性。
那些为个人与其他事物之间的一对一关系而努力。
对于多对一关系,您可以创建表格,其中个人是父级,它是外键,或表格建模关系本身。
friends
表可能包含individual1
,individual2
等individual
的外键和relationship
列之类的关系,例如"friends"
}或"lovers"
。
这允许您在硬盘内存存储中任意创建关系,这应该是相当充分的。根据您的应用程序,我相信您可以在SQLite中执行此操作并在内存中运行它,或者实现一个缓存层来表示像Redis这样的对象本身。
您可以在内存中创建相应的域对象,例如class Individual
和class Job
以及class Pet
。您可以根据需要使用Data Mapper模式从SQL表中检索和提交,允许您以最少的RAM存储相当多的东西,其他所有东西都保存在硬盘上。
注意:也可以使用NoSQL,例如MongoDB,因为您可以将所有内容表达为文档,但是为了最小化数据重复(许多对象将具有类似的相关属性),我建议使用SQL作为可能性。