我有一个复杂的结构,包括英雄,城堡,艺术品和位置。他们的关系如下:
现在,要实现这些双向关系,很难总是更改所有受影响对象中的引用(例如,当英雄装备了一件艺术品时,我必须更改Hero.Artefact、Artefact.Hero、Artefact.Position和Position.Artefact)。因此,我使用一个Game类,它作为所有这些类的容器(换句话说,Game有4个列表,每个类一个)。
然后,我只将引用添加到包含游戏中,在I的帮助下,我能够更优雅地更改单个引用(再次装备艺术品):
Artefact.HeroID = newHeroID;
Artefact.PositionID = null;然后,各个类中的所有访问器都允许我获得正确的对象:
Hero.Artefact
{
get
{
return this.Game.Artefacts.FirstOrDefault(a => a.HeroID == this.ID);
}
}
Artefact.Hero
{
get
{
return this.Game.Heroes.FirstOrDefault(h => h.ID == this.HeroID);
}
}等。
这个设计模式有名字吗(它是一个设计模式)?如果您知道实现,但不知道名称:D (反过来非常简单),就很难找到正确的答案。
发布于 2015-05-21 11:44:01
对我来说,它看起来像是域驱动设计中的存储库模式,在这种情况下是内存实现。
存储库是一个神奇的架子,你可以从那里得到你的域对象(比如你的英雄,艺术品)。它的实现方式与存储库的客户端无关,您可以在那里传递MySQL实现、文件、redis等等。在您的示例中,它是一个简单的内存存储。
更多信息:http://martinfowler.com/eaaCatalog/repository.html
发布于 2022-02-06 11:54:17
没有一种设计模式可以解决您的业务问题。这些模式只是文档化的、鼓励重用的实现方法。我建议您阅读一下https://dofactory.com/net/design-patterns,这可能是最易读和最简洁的教程。它可能会给你一些洞察和指导你的问题。
https://stackoverflow.com/questions/30357185
复制相似问题