나는 지난 한 해 동안 작업해온 웹 사이트에 대해 사용자 상/업적 시스템을 구현하는 중입니다. 기본 전제는 GameTrailers 또는 GiantBomb.com에서 찾을 수있는 것과 유사합니다. 사용자는 [x] 개의 댓글을 많이 달거나 [x] 개의 항목을 추가하는 것과 같은 일을 할 때 배지 (배지를 시각적으로 표현)를 얻습니다. 그들의 위시리스트 등등에.보상/성취 시스템에 대한 사용자 작업 추적
나는 이것을 구현하는 가장 효율적인 방법을 결정하려고 노력하고있다. 나는 조금 붙어있다. 현재 해결 방법은 다음과 같습니다.
- 데이터베이스에 각 업적을 만듭니다 (아무렇게나 적용됩니다). 업적에는 수용 여부를 결정하기 위해 동적으로 실행되는 카테고리, 수락 번호 및 SQL이 있습니다.
- 사용자가 업적을 산출 할 수있는 작업 (예 : 기사에 댓글을다는 등)을 수행 할 때마다 해당 문항에 적합한 업적을 결정하기 위해 SQL 문을 실행합니다 이미 완료 한 것).
- 해당 쿼리에서 반환 된 업적에서 나는 각각을 검토하고 수용 숫자가 충족되었는지를 확인하기 위해 동적 SQL을 실행합니다. 그렇다면 사용자는 업적을 완료했습니다.
2 단계와 3 단계는 사용자가 주석을 작성할 때마다 쿼리를 수행 할 때마다 내 관심사가됩니다.
위의 시나리오의 예는 다음과 같습니다 (이 코드는 완벽한 전체하지, 그냥 모의가 .. BTW, 사용자 ID는 사용자가 입력하지 뭔가 내가 검색 뭔가) :
achievements = From ach In searchCtx.Achievements
Where ach.CategoryID = achievementCategoryID And ach.IsActive = 1
Select ach
For Each achmt As Achievement In achievements
Dim achieved As Boolean
Dim sqlToExecute As String = qst.SQLToRun
sqlToExecute = sqlToExecute.Replace("@USERID", "'" + userid.ToString + "'")
sqlToExecute = sqlToExecute.Replace("@TARGETVAL", achmt.AcceptanceNumber)
achieved = searchCtx.ExecuteQuery(Of Boolean)(sqlToExecute).First
If achieved Then
' Add Conquest to User Achievemnets
Dim usrAhmt As New UserAchievement
usrAhmt .UserID = userid
usrAhmt .DateCompleted = DateTime.Now
usrAhmt .AchievementID = achmt .ID
searchCtx.UserAchievements.InsertOnSubmit(usrAhmt)
End If
다음
SqlToExecute은 부울을 반환하는 함수를 호출, 뭔가 같은 :
select count(id) from comment where userid = @userID
그래서 모든 말했다 데, 난이 작동합니다 생각하지만, 나는 퍼포에 대한 걱정 nce. 웹 프로그래밍에 너무 익숙하지 않지만 세션에서 UserStats 객체를 유지하고 작업하여 사용자가 업적을 완료하기에 충분한 댓글을 작성했는지 확인하는 것이 좋습니다. 이것은 동적이지는 않지만 SQL 서버에 대한 스트레스가 적습니다.
모든 의견을 보내 주시면 감사하겠습니다.