改进使用规则引擎计算包含许多条件的用户信誉的方法

时间:2012-09-06 09:21:57

标签: c#

我有一种基于很多嵌套条件计算用户信誉的方法,代码可以工作,但不是很优雅,基于一些规则给出了声誉,所以我认为使用规则引擎可以解决问题但是到目前为止据我所知,如果条件满足,规则引擎将返回TRUE,否则返回False。在我的情况下,我需要评估两个对象用户和条目集合,并知道条件是多少次才能计算获得的点数。

有任何改进算法的想法吗?

    /// <summary>
    /// Calculates and updates the user reputation.
    /// </summary>
    /// <param name="user">The user</param>
    public void UpdateReputation(User user)
    {
        user.UserReputations.ToList()
            .ForEach(r => this.UnitOfWork.UserReputations.Delete(r));

        foreach (Entry entry in user.Entries)
        {
            user.UserReputations.Add(new UserReputation()
            {
                Points = 25,
                DateCreated = entry.DateCreated,
                ContentInfo = entry,
                User = user,
                Verb = (int)UserReputationVerbType.EntryPublished
            });

            foreach (Vote vote in entry.Votes)
            {
                if (vote.Positive)
                {
                    user.UserReputations.Add(new UserReputation()
                    {
                        Points = 2,
                        DateCreated = vote.DateCreated,
                        ContentInfo = vote.ContentInfo,
                        User = user,
                        Verb = (int)UserReputationVerbType.UserEntryVotedUp
                    });
                }
                else
                {
                    user.UserReputations.Add(new UserReputation()
                    {
                        Points = -1,
                        DateCreated = vote.DateCreated,
                        ContentInfo = vote.ContentInfo,
                        User = user,
                        Verb = (int)UserReputationVerbType.UserEntryVotedDown
                    });
                }
            }

            foreach (Favourite favouriteEntry in entry.Favourite)
            {
                user.UserReputations.Add(new UserReputation()
                {
                    Points = 5,
                    DateCreated = favouriteEntry.DateCreated,
                    ContentInfo = favouriteEntry.Entry,
                    User = user,
                    Verb = (int)UserReputationVerbType.UserEntryFavourited
                });
            }
        }

        foreach (Favourite favouriteEntry in user.Favourite)
        {
            user.UserReputations.Add(new UserReputation()
            {
                Points = 2,
                DateCreated = favouriteEntry.DateCreated,
                ContentInfo = favouriteEntry.Entry,
                User = user,
                Verb = (int)UserReputationVerbType.EntryFavourited
            });
        }

   (a lot of conditions ...)

0 个答案:

没有答案