Passiday / OOP-Cards

Library for card games
4 stars 8 forks source link

CukasGame (de) serialization, game loading #31

Open Phanty133 opened 4 years ago

Phanty133 commented 4 years ago

Implementēju serialization CukasGame un CukasPlayer klasēm (Cards un CardSet uzliku temporary toJSON() metodi, lai debuggotu).

Save/Load example:

const currentGame = newGame(4, true); // Create a new game and save the CukasGame object
const savedData = CukasGame.saveToJSON(currentGame); // Serialize current game to JSON, insert metadata

const loadData = CukasGame.loadFromJSON(savedData); // Deserialize game
const loadedGame = loadData.saveData; // Get the CukasGame object

console.log("Game saved at ", loadData.created);
cukasController.updateModel(loadedGame); // Update controller with new CukasGame object
loadedGame.init(); // Initialize the newly loaded game
3starblaze commented 4 years ago

Add tests

Passiday commented 4 years ago

Man būtu tikai viens komentārs, un tas ir filozofiskas dabas - tiklīdz serializācija ietver papildus "gudrību", tādu kā īpašo replacer funkciju (un deserializācijas gadījumā īpašo reviver funkciju), tad atstāt to izsaukšanu "lietotāja rīcībā" ir apgrūtinoši. Tā kā serializācija/deserializācija ir darbības ar objektu "no ārpuses" (nevis objekta stāvokļa maiņa), tad tādas lietas var salikt klases statiskajās metodēs: CukasGame.toJSON(cukasGame) metode, kas atgriež pareizo JSON, un CukasGame.fromJSON(), kas atgriež dzīvu CukasGame objektu. Abas metodes izmantotu īpašās replacer un reviver metodes, un lietotājam nav tas jāzina, kuras un kāpēc lietot. Savukārt pašas replacer/reviver metodes tādā scenārijā nav nepieciešams atstāt globālai piekļuvei, tās var ienest minēto statisko funkciju scope.

Deserializētā objekta iedarbināšana lietotāja interfeisā jau ir pavisam cita opera, kontrolierim piesaistītā modeļa uzjaunošana un modeļa inicializēšana ir neapejams ļaunums, jo tos ir jāizsauc tam, kurš uzrauga MVC darbību.