首页 > 解决方案 > 实现dotnet mvc的简单成就系统

问题描述

我正在为一个使用 ASP.net MVC 4 的学校项目创建一个银行应用程序。作为应用程序的一部分,我们为用户提供了一组成就。当用户完成一项成就时,说“创建一个储蓄账户”,他们应该通过解锁成就并发送通知来获得奖励。这是成就类:

    public class Achievement
    {
        public string UserID { get; set; }

        public AchievementType AchType { get; set; }

        public bool Completed { get; set; }

        public string Description { get; set; }

        public int CountToUnlock { get; set; }
    }

    public enum AchievementType
    {
        CREATE_SAVINGS_ACCOUNT, CREATE_GOAL, COMPLETE_GOAL, ACCOUNT_5K,
        ACCOUNT_10K, UPDATE_GOAL, ADD_TRANSACTION, SAVE_1K_TOTAL
    };

我正在努力解决的问题是如何确保每个用户都拥有相同的成就集以及在哪里触发这些成就。他们是否应该在AchievementController 或其他地方。

标签: c#asp.net-mvc

解决方案


我最初的反应是您应该有一个 Customer 类,其中包含该客户的成就列表。

您在哪里触发添加这些成就,取决于确定他们何时达到目标之一的逻辑所在的位置。对于你的学校项目,你打算搭建一个页面来模拟这个吗?

一些伪让你开始:

public class Customer
{
    public int Id { get; set; }

    public string Name { get; set; }

    public List<Achievement> Achievements { get; set; }

    public bool AddAchievement(Achievement newAchievement)
    {
        // Check to ensure customer doesn't already have the new achievement

        // Persist to the database

        // Add to local collection
        Achievements.Add(newAchievement);

        // Send email to customer

        // Anything else

        // Return
        return true;
    }
}

建议:你的枚举选项应该是ProperCase,每行放一个项目。很好地使它们也具有充分的描述性。

public enum AchievementType
{
    CreatedSavingsAccount,
    CreatedGoal,
    CompletedGoal,
    AccountBalance5000,
    // [...]
}

推荐阅读