gpt4 book ai didi

c# - 成就/徽章架构

转载 作者:太空狗 更新时间:2023-10-29 23:24:32 29 4
gpt4 key购买 nike

已经有很多关于编写类似于 SO 的徽章系统的问题,我的问题是不同的。假设我有一个网页系统、徽章/成就,与成就键 (id)、用户 ID 和任何其他数据一起存储在数据库中。

我的简单问题是,我应该在哪里存储徽章 ID?我为每个成就开设一个类,其中包含用于测试是否已获得的所有数据和方法。我想在某个时候我可能有几十个或数百个。我希望 ID 仅在一个简洁的地方以硬编码方式使用一次,这样我就不会意外更改或混淆它们。

我可以在类里面对它们进行硬编码,比如

public int Key { get { return 15; } } // I'm calling it Key, not ID

但是如果我将我的成就分散到多个文件中,我不想在添加新文件时四处寻找最高的 Key 而冒犯错的风险。

我可以将它们放入另一个类(class)的字典中...

public class AchievementSet
{
private Dictionary<int, Achievement> _achievements;

public AchievementSet()
{
_achievements = new Dictionary<int, Achievement>()
{
{ 1, new SomethingAchievement() }
};
}
}

但现在类本身并不知道自己的 key ,它需要(或者知道吗?)如果我现在将它传递给构造函数,我就有可能不匹配数字。

有什么建议吗?

最佳答案

在 Stack Overflow 的上下文中,我想每个徽章都具有以下属性:Id、名称、类别(青铜、白银或黄金)和描述等。

您提到您目前为每个徽章/成就设置了一个类别,每个徽章/成就都对授予它的条件进行了适当的检查。

我建议您放弃现在正在查看的模型(每个成就一个等级)的原因是,当您浏览 200 个不同的模型时,您将继续面临巨大的问题查找您不记得的那个 ID 的类。

通过将您的徽章存储在表中,您的数据将全部放在一个合乎逻辑的位置,而不是分散在您的应用程序中。

在回答问题时:那么您是否不同意已接受的答案:stackoverflow.com/questions/3162446/

不一定,我更喜欢这个想法,而不是我之前提出的一个单一类的提议,该类将根据徽章的 ID 检查所有徽章。

尽管名称如此,但我相信 RexM 并未在该文件中定义 CommenterBadge 本身,应该将其命名为 CommenterBadgeJob。 (您会注意到它没有我在答案中定义的任何特征,而是继承自 BadgeJob)。显而易见的问题是“每个徽章作业如何知道它对应于哪个 BadgeId?”

我的 Badge 中会有一个名为 BadgeJob 的额外唯一字段,您可以通过它查找徽章。

enum BadgeClass {Bronze, Silver, Gold}

//This class would be inherited from the database.
public class Badge
{
public int Key {get;set;}
public string Name {get;set;}
public BadgeClass Class {get;set;}
public string BadgeJob {get;set;}
public string Description {get;set}
}

我会修改他的代码如下:

public class CommenterBadgeJob : BadgeJob
{
public Badge commenter_badge {get;set;}
public CommenterBadgeJob() : base()
{
//Lookup badge
string badge_job_name = this.GetType().Name;
commenter_badge = db.Badges.Where(n=>n.BadgeJob == badge_job_name).Single();
}

protected override void AwardBadges()
{
//select all users who have more than x comments
//and dont have the commenter badge
//add badges
}

//run every 10 minutes
protected override TimeSpan Interval
{
get { return new TimeSpan(0,10,0); }
}
}

关于c# - 成就/徽章架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926291/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com