Istnieje już wiele pytań dotyczących kodowania systemu znaczków podobnego do SO, moje pytanie jest inne. Załóżmy, że mam system stron WWW, odznaki/osiągnięcia, przechowywane w DB jako wiersz z kluczem osiągnięcia (identyfikator), identyfikatorem użytkownika i innymi danymi.Architektura osiągnięć/odznak
Moje proste pytanie brzmi: gdzie powinienem przechowywać identyfikator identyfikatora? Mam jedną klasę na osiągnięcie, wszystkie dane i metody testowania, jeśli zostały uzyskane. Wyobrażam sobie, że w pewnym momencie mogę mieć dziesiątki lub setki. Chcę, aby identyfikatory były używane tylko raz i w jednym zwięzłym miejscu, więc nie mam szans na ich przypadkową zmianę lub zmieszanie.
mogę ciężko zakodować je w klasie, jak
public int Key { get { return 15; } } // I'm calling it Key, not ID
ale jeśli podzielić moje osiągnięcia wśród wielu plików nie chcę mieć biegać szukasz najwyższej Key kiedy dodać nowy jeden i ryzykować pomyłkę.
mogę umieścić je w jakimś słowniku w innej klasy ...
public class AchievementSet
{
private Dictionary<int, Achievement> _achievements;
public AchievementSet()
{
_achievements = new Dictionary<int, Achievement>()
{
{ 1, new SomethingAchievement() }
};
}
}
Ale teraz sama klasa nie zna swój własny klucz, a to wymaga (lub nie?) Gdybym przeszedł teraz do konstruktora ryzykuję niedopasowanie liczb.
Jakieś rekomendacje?
Dlaczego nie przechowujesz odznak w bazie danych? –
Przypuszczam, ponieważ kod jest związany z każdą odznaką i nadal trzeba dopasować ten fragment kodu z identyfikatorem identyfikatora. Więc w zasadzie nic nie rozwiąże. – guillaume31