Trick med facadeklasse og serialisering Trick model samles

  • Slides: 7
Download presentation
Trick med facadeklasse og serialisering • ”Trick” – model ”samles” til eet overordnet objekt

Trick med facadeklasse og serialisering • ”Trick” – model ”samles” til eet overordnet objekt • Alle klasser i model skal have attriutten [Serializable] • Når det overordnede modelobjekt serialiseres vil alle de tilknyttede objekter og felter ”følge med” • Der laves en facadeklasse, der ”holder” det overordnede model objekt som en klasse-variabel • Facade-klassen tager sig af evt. indlæsning (load) af model objekt, samt forsynes også med metode for at gemme (save) model-objekt. Tietgen Skolen

Klasser defineres som Serializable For at objekter kan serialiseres skal klassen forsynes med attributten

Klasser defineres som Serializable For at objekter kan serialiseres skal klassen forsynes med attributten [Serializable] og alle objektets data skal ligeledes være serializable Klassen Vare: ……. [Serializable] public class Vare : System. IComparable { …………… Klassen Varekartotek: ……. [Serializable] public class Varekatalog { …………… Klassen Varesalg: ……. [Serializable] public class Varesalg { …………… Tietgen Skolen

Eksempel på Facade med serialisering using System; using System. Collections. Generic; using System. Text;

Eksempel på Facade med serialisering using System; using System. Collections. Generic; using System. Text; using System. Windows. Forms; using System. IO; using System. Runtime. Serialization. Formatters. Binary; namespace Varekartotek. Windows. Application { public class Model. Fasade { // Bemærk at static betyder at felter og metoder er // er på klassen og der ikke laves objekter af typen // Model. Facade private static Varekatalog varekataloget; // klasse instans private static string DEFAULT_FILENAME = "Varekatalog. bin"; Tietgen Skolen

Eksempel på Facade med serialisering // klassemetode der kaldes direkte uden at have et

Eksempel på Facade med serialisering // klassemetode der kaldes direkte uden at have et objekt //. . . = Model. Facade. Varekataloget; public static Varekataloget { if (varekataloget == null) Load. Varekataloget(); // sikre load første gang // det bruges return varekataloget; // bemærk klasse instans } } Tietgen Skolen

Eksempel på Facade med serialisering private static void Load. Varekataloget() { // hent filnavn

Eksempel på Facade med serialisering private static void Load. Varekataloget() { // hent filnavn med "stifinder" facilitet // normalt bør det undgås at placere GUI her, // men det er en praktisk "beskidt" måde for os // at undgå øget kompleksitet / eller fast filnavn Open. File. Dialog open. File. Dialog = new Open. File. Dialog(); open. File. Dialog. File. Name = DEFAULT_FILENAME; // startværdi Dialog. Result dres = open. File. Dialog. Show. Dialog(); if (dres == Dialog. Result. Cancel) { varekataloget = new Varekatalog(); // opret tomt } else { string filnavn = open. File. Dialog. File. Name; File. Stream file. Stream = new File. Stream(filnavn, File. Mode. Open); Binary. Formatter binary. Formater = new Binary. Formatter(); // hent objekt og typecast til rigtig type varekataloget = (Varekatalog)binary. Formater. Deserialize(file. Stream); file. Stream. Close(); } } Tietgen Skolen

Eksempel på Facade med serialisering public static void Save. Varekataloget() { // hent filnavn

Eksempel på Facade med serialisering public static void Save. Varekataloget() { // hent filnavn med "stifinder" facilitet Save. File. Dialog save. File. Dialog = new Save. File. Dialog(); save. File. Dialog. File. Name = DEFAULT_FILENAME; // startværdi save. File. Dialog. Show. Dialog(); string filnavn = save. File. Dialog. File. Name; // Objektet med alle refererede elementer gemmes // serialiseret som fil File. Stream file. Stream = new File. Stream(filnavn, File. Mode. Create); Binary. Formatter binary. Formater = new Binary. Formatter(); binary. Formater. Serialize(file. Stream, varekataloget); file. Stream. Close(); } } } Tietgen Skolen

Tilgang til model gennem facade klassen Her eksempel på tilgang fra en funktionsklasse using

Tilgang til model gennem facade klassen Her eksempel på tilgang fra en funktionsklasse using System; using System. Collections. Generic; using System. Text; namespace Varekartotek. Windows. Application { public class Test. Funktioner { public static void Opret. Testvarer() { // hent varekatalog objekt // dette kunne også være overføret som parameter Varekatalog varekatalog = Model. Fasade. Varekataloget; // Brug objekt til at oprette test varer Vare vare 1001 = varekatalog. Opret. Vare(1001, "A 4 blok ternet med huller", 3. 98 f, "kasser", 3. 68 f, 100); Vare vare 1002 = varekatalog. Opret. Vare(1002, "A 4 blok linieret med huller", 3. 88 f, "boxe", 3. 65 f, 20); Vare vare 1003 = varekatalog. Opret. Vare(1003, "Blyant Viking 400 x 2", 0. 64 f, "æsker", 0. 50 f, 500); Vare vare 1004 = varekatalog. Opret. Vare(1004, "Blyant Viking 800 x 2", 0. 66 f, "æsker", 0. 55 f, 200); vare 1004. Registrer. Varer. Solgt(102); vare 1004. Registrer. Varer. Solgt(23); } } } Tietgen Skolen