- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
已经有很多关于编写类似于 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/
我正在使用幻灯片抽屉的导航 View ,并使用 app:menu 属性设置选项。我想在菜单图标上显示通知计数。我在菜单 xml 中指定了 android:actionLayout,但它在标题右侧显示了
这是我的xml文件代码 清楚地
关闭。这个问题需要更多 focused 。它目前不接受答案。 想要改进这个问题?更新问题,使其只关注 editing this post 的一个问题。 关闭 8 年前。 Improve this q
我努力创建一个 shields.io动态改变颜色的徽章。 我能够使用 JSON 响应将文本解析为 badge并将颜色设置为橙色: https://img.shields.io/badge/dynami
我喜欢我正在设计的网站的徽章和成就的概念。它们已被证明可以提高使用率/利用率,我认为这可能是我想要开发的应用程序的一大动力。 在高层次上,我可以想到 3 种方法来做到这一点。 检查满足作为 cron
我试图弄清楚如何建立数据库和/或模型以处理各种徽章。让我们来看看堆栈溢出 badges举个例子。每个都有不同的规则,有些可能只是变量不同(例如 10 条评论与 100 条评论)。 我的问题是如何在应用
我正在尝试使用 vaadin badges在点燃的元素中。 文档提到“要在应用程序中使用这些类,请在主题的 theme.json 中启用它们”,但我没有这样的文件,所以这对我来说真的很困惑。大多数文档
我正在尝试使用 vaadin badges在点燃的元素中。 文档提到“要在应用程序中使用这些类,请在主题的 theme.json 中启用它们”,但我没有这样的文件,所以这对我来说真的很困惑。大多数文档
目前我有两种形式,可以通过按钮切换。当我显示第一个表单时,我可以看到徽章,但第二个表单看不到(第二个徽章呈现为显示:无,第一个表单被隐藏)。第二个徽章呈现为 data-style="none"。我现在
我有一个可以定位的具有已知 ID 的元素。我如何仅使用 CSS 创建这样的畅销书徽章?我无法更改 html。 我知道如何创建它,但前提是我可以编辑 html,而我不能: .box { width:
我尝试了这段代码,但徽章没有显示 tabBarController?.tabBar.Item![3].badgeValue = "3" 我将此代码添加到我的 TabBarController 类中这是
我需要在 css 中复制它: 到目前为止,我已经有了基础: < HTML > CSS: span { display:table-cell; vertical-align:midd
在下图中,您可以看到添加徽章会导致徽章上方的间距大于下方的间距。 Bootstrap 4 代码是干净的,没有掺假,所以不幸的是这不是开箱即用的。我试着弄乱边距和行高,但一个小时后我放弃了。
我正在使用 Angular Material 徽章,如果内容是一位或两位数字/字符,我希望形状是完整的圆形 并长成具有 flex 边缘的矩形(如 android/iPhone 图标徽章)。但是我要么得
我正在尝试将 Bootstrap 徽章 float 到标签的右侧。但是,我在调整大小时遇到了间距和跨度所包含的元素的问题。 当徽章出现时,我的元素大小似乎发生了足够大的变化,迫使标签在跨度内移动。
这个问题在这里已经有了答案: How to change the icon of an Android app in Eclipse? (6 个答案) 关闭 8 年前。 LibGDX 的新功能。当我
我想在用户单击另一个选项卡后立即删除徽章。我正在尝试: - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:an
我不知道如何让我的文本与我的图标中间对齐。这是使用 Chrome。参见 this fiddle . @import url('https://fonts.googleapis.com/icon?fam
当我在标题内使用 Bootstrap badge 时,例如 h1、h2、h3 垂直对齐已关闭。 badge 与标题文本的底部对齐。我希望徽章与标题文本垂直居中对齐。 HTML badge Headin
引用:BootStrap badge . 默认情况下项目基于逗号拆分。但是,在按回车键时,我需要将每个项目放在新行上。 最佳答案 Bootstrap badges是 span 元素,这意味着它们默认显
我是一名优秀的程序员,十分优秀!