长形,TL;DR低于
我目前正在使用Zenject开发一个游戏,并设计了我的UI和游戏体系结构,非常类似于一个web应用程序,其中有IConversationRepository-Interfaces,通过GetConversationById(...)等方法提供对Conversation等数据的访问。
到目前为止,接口都是由返回硬编码数据的虚拟程序实现的,但是当我继续下去的时候,这种情况必须改变。
如果这是一个web应用程序,我将只使用ORM并让它处理对象的查询和加载,所以我的问题是,这是否也存在于Unity / Zenject,如果不是,在使用Zenject时实现数据访问的正确方法是什么。
更新(回应与@Fattie的有益讨论)
我主要感兴趣的是一种通用的方法,可以用引用来加载对象,并能够查询对象。
例如,假设有一个Conversation对象,它包含许多ConversationItem,每个ConversationItem都有一个Person类型的扬声器字段。然后,我希望能够执行这样的操作:
var someSpeaker = personRepository.getById(100);
var conversation = conversationRepository.getById(0);
if (conversation.items[0].speaker == someSpeaker) {
// I know, in this example this behaviour could be moved
// into a method of Person to avoid the check for identity
// but I hope the idea is understandable.
}这里重要的是,如果扬声器对于多个SpeechItems是相同的,那么每个扬声器的引用对象也应该是相同的,这使得简单地反序列化JSON是不可行的。
TL;博士是否有类似于ORM的东西可以用于实现存储库模式?如果没有,我应该如何访问数据?
发布于 2020-12-27 00:05:08
GameObject (简单地说,它被标记为DDOL),并在其上加上您的类(可能是"ConversationsProvider“或其他名称)。在统一中,单例本身是没有意义的,您很可能需要使用MonoBehavior的一般特性,所以您只需将其作为“游戏管理器”样式组件即可。"ConversationsProvider“可以是简单的,也可以是复杂的;它可能有许多子系统(与服务器、世代系统的实时连接,谁知道)。但是,从项目的其他部分来看,它只是一个您可以访问的完全简单的MonoBehavior --它完全是微不足道的。这是你在团结中所做的“直截了当的”方式。如果OP正在试验Zenject,也许也可以尝试“通常”的方法!
为了更确切地回答OP的问题,是的,有几个我可以说是实验性的ORM/MySql解决方案。可以很容易地谷歌一些“在统一中使用的ORM”,示例,但我建议它只是在“实验性”方面。到目前为止,还没有一个真正简单的MySql统一解决方案。
https://stackoverflow.com/questions/65452964
复制相似问题