Vytvořte jednoduchou formulářovou aplikaci pro správu produktů firmy, která vyvíjí počítačové hry.
Každá počítačová hra má nějaké postavy. Některé jsou kladné, jiné záporné.
Každá postava má jisté schopnosti, které se hodí např.:
Firma potřebuje svoje hry evidovat. Obchodníky u určité hry zajímá, kdy vyjde její nová verze a pod jakým kódovým jménem se bude prodávat. Lidé z marketingu zase chtějí kvůli propagaci znát nějaké reálie: Jaké má hra postavy, jestli jsou mezi nimi nějací "klaďasové", anebo jen samí záporáci apod. Také chtějí vědět, kolik má hra úrovní a zda je určena pro více hráčů.
Ze zadání vyplývá, že v aplikaci budeme mít několik business objektů:
Ve hře (Game) jsou postavy (Character). Každá postava má nějaké schopnosti (Ability).
Následující tabulky popisují jednotlivé business objekty formálnějším způsobem.
Vlastnost | Datový typ | Popis |
---|---|---|
Title | Text | Název hry |
LastReleaseDate | Datum | Datum posledního releasu |
Version | Text | Poslední verze hry |
LevelCount | Celé číslo | Počet herních úrovní |
IsMultiplayer | Ano/ne | Je to hra pro více hráčů? |
Vlastnost | Datový typ | Popis |
---|---|---|
Name | Text | Jméno postavy |
EvilGrade | Desetinné číslo | Stupeň zla v postavě |
IsMandatory | Ano/ne | Je to nutná postava v této hře? |
Vlastnost | Datový typ | Popis |
---|---|---|
Name | Text | Název schopnosti |
IsGradable | Ano/ne | Je to schopnost, která se projevuje v nějakém množství (=ano), anebo ji postava pouze má/nemá (=ne)? |
Je třeba určit vztahy mezi jednotlivými business objekty (1:1, 1:N, M:N).
Jakmile je hotová analýza, můžeme začít kódovat.
Založte ve VS nový formulářový projekt (Windows Forms nebo WPF). Zvolte verzi .NET 6.0 (bez "top level statements", pokud vám to VS nabízí).
Ve VS projektu definujte jednotlivé business objekty jako třídy v C#.
Vyberte si databázový engine (MySQL, případně MSSQL Server), založte si databázi (pokud nepoužíváte již nějakou existující) a vytvořte příslušné tabulky.
Pro definici tabulek je vhodné použít tzv. "umělý primární klíč", tj. nějaký pomocný sloupec ID, který jednoznačně identifikuje záznam (řádek) tabulky.
U vazby 1:N mezi tabulkami musí být v tabulce na straně "N" pomocný sloupec,
na kterém bude definovaný cizí klíč do té první tabulky na straně "1".
(Představme si třeba situaci, že modelujeme vztah mezi entitami "dům" a "místnost".
Mezi těmito entitami je vztah 1:N. Jeden dům má několik místností,
ale jedna místnost patří pouze do jednoho určitého domu.
Pokud bychom si pro dům vytvořili tabulku HOUSE a pro místnost ROOM, pak
by v tabulce ROOM musel být sloupec HOUSE_ID, který by byl cizím klíčem
do tabulky HOUSE.)
Do business objektů doplňte vlastnosti, které odpovídají pomocným sloupcům, které jste přidali u tabulek (primární klíče, cizí klíče).
Pokud má být mezi určitými dvěma business objekty, a tudíž i mezi dvěma tabulkami vazba M:N, je třeba si vytvořit pomocnou, tzv. vazební tabulku a tu spojit vazbou 1:N a N:1 s původními tabulkami.
Nezapomeňte do adresářové struktury projektu přidat SQL skript (který jste buď sami napsali, anebo nechali vygenerovat GUI nástrojem pro design databáze), ve kterém budou příkazy CREATE TABLE pro vytvoření jednotlivých databázových tabulek.
Na objektové straně datového modelu (tedy ve VS projektu, v C#) doplňte do business objektů anotace pro objektově relační mapování (ORM).
Definujte databázový kontext pro Entity Framework. Databázový kontext je třída, která dědí ze třídy DbContext (celým jménem Microsoft.EntityFrameworkCore.DbContext) a měla by obsahovat aspoň tyto 2 věci:
"Server=<název-nebo-ip-adresa-serveru>; Database=<název-databáze>; User Id=<uživatelské-jméno>; Password=<heslo>; "
"Server=localhost; Database=<název-databáze>; Trusted_Connection=True; "
"Server=<název-nebo-ip-adresa-serveru>; Database=<název-databáze>; Uid=<uživatelské-jméno>; Pwd=<heslo>; "
optionsBuilder.UseSqlServer("connection-string-do-vaší-MSSQL-databáze");
optionsBuilder.UseMySQL("connection-string-do-vaší-MySQL-databáze");
Pro každý business objekt implementujte příslušnou repo-třídu (datová vrstva). Repo třída má v sobě zapouzdřenou referenci na databázový kontext.
Pro každý business objekt implementujte příslušnou servisní třídu (aplikační vrstva). Servisní třída má v sobě zapouzdřenou referenci na repo třídu. Jedna servisní třída může používat více repo-tříd, může dokonce používat i jiné servisní třídy.
Definujte GUI celé aplikace. Technologicky buď ve Windows Forms, nebo ve Windows Presentation Foundation (WPF).
Hlavní formulář zobrazí seznam her v portfoliu softwarové firmy, jejíž evidenci programujeme.
Na hlavním formuláři bude (např. pomocí tlačítek) možné provádět operace CRUD nad business objektem Game.
Na hlavním formuláři bude také tlačítko pro otevření dalšího formuláře, který bude spravovat seznam schopností herních postav. Tento další formulář bude, co se týče business objektu Ability, funkčně podobný jako ten hlavní formulář pro Game. Budou na něm tlačítka pro operace CRUD nad Ability.
Pokud na hlavním formuláři aktivujeme operaci UPDATE nad vybranou hrou, otevře se formulář, který vedle možnosti editace detailních informací o hře zobrazí také seznam postav, které ke hře patří. Seznam postav bude opět editovatelný přes tlačítka vázaná na operace CRUD nad objektem Character.
Pokud otevřeme pomocí UPDATE detail nějaké postavy (Character), bude možné kromě editace informací o samotné postavě i přiřazovat postavě jí náležející schopnosti. Na takovýto use case se v GUI hodí např. komponenta CheckedListBox.