Čau , naprogramoval jsem takovou blbost v C# a zajímalo by mě jestli to mám z hlediska OOP správně. Jestli by třeba nebylo vhodné použít nějaké návrhové vzory atd... Rovněž bych byl rád za rady či návrhy nebo kritiku.
Zde jsou odkazy na zdrojový kód:
http://www.sdilejkod.cz/1164
http://www.sdilejkod.cz/1165
Fórum › .NET
OOP Zhodnocení
Výjimky se používají pro chybové stavy, není vhodné je používat pro řízení toku programu. Tohle bych přepsal, už jenom z toho důvodu, že ti může přijít jiná výjimka než očekáváš (např. OutOfMemory).
try
{
databaze = DatoveOperace.nacti();
}
catch (Exception ex)
{
databaze = new DatabazeZakazek();
}
Všechny streamy ve třídě Datové operace bych přepsal s použítím usinghttp://msdn.microsoft.com/en-us/library/yh598w02(VS.80).aspx (např. operace ulož).
using(FileStream fs = File.Create("data.dat"))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, databaze);
}
Tak jak to máš teď to nebude fungovat správně, pokud bf.Serialize(fs, databaze); vyhodí výjimku, tak se ti nezavolá metoda Close. Ten objektový model se těžko odhaduje, pokud neznám zadání.
Ahoj,
pokud se nám už podaří, shodnout se na tom, co je a co není návrhový vzor, tak stejně bez znalosti zadání moc nevymyslíme. Kromě toho, co psal kolega, tam aktuálně další zásadní nedostatky nevidím. Snad jen pozor na zpracování vstupů od uživatele.
int volba = Int32.Parse(Console.ReadLine());
Zde předpokládáš, že uživatel skutečně zadá číslo, to je chyba. Místo toho použij:int volba = 0;
if (int.TryParse(Console.ReadLine(), out volba))
{
// kód
}
Ty jsi z UHK, že? Nápadně mi to připomíná styl tamějších učitelů Javy. Takže ještě pár drobností:
1. V C# se názvy metod a vlastností píšou s velkým písmenem na začátku.
2. Doporučuji následující pořadí členů třídy (proměnné, konstruktory, vlastnosti, události, metody).
3. Doporučuji používat klíčová slova jazyka, kde je to vhodné (Int32 => int, Int64 => long, String => string, atd).
Poslední dva body není nutné respektovat, protože to vychází především z mých zkušeností. Většina vývojářů, co jsem potkal, byla na tyto a další věci zvyklá a dá se říct, že je pokládají za samozřejmost.
Nejde o zadání ze školy. Kamarád si chtěl udělat Správu zakázek tak jsem mu chtěl ukázat jak by se to dělalo objektově + chtěl jsem se sám pocvičit v C# (ve škole se němu nedostanu, u nás se učí v Javě a C++).
Studuju 2. rokem na Univerzitě Pardububice.
public static DatabazeZakazek nacti()
{
try
{
using (FileStream fs = File.Open("data.dat", FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
DatabazeZakazek temp = (DatabazeZakazek)bf.Deserialize(fs);
return temp;
}
}
catch (Exception e)
{
return null;
}
}
Může to být takhle? Potom v samotný třídě program to mám takhle:
databaze = DatoveOperace.nacti();
if(databaze==null)
databaze = new DatabazeZakazek();
To SeraphCZ : Aha, tak to jsem se o pár kilometrů seknul. Pokud tomu nic nebrání, udělal bych to takhle.
public static DatabazeZakazek Nacti()
{
using (FileStream fs = File.Open("data.dat", FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
DatabazeZakazek temp = (DatabazeZakazek)bf.Deserialize(fs);
return temp;
}
// pokud nic nenačetl, je to stejné, jakoby načetl prázdnou DB, tak proč ji rovnou nevrátit
// ačkoliv v mnoha případech bude lepší vrátit null
return new DatabazeZakazek();
}
Ahoj,
já bych to napsal spíše takto
public static DatabazeZakazek Nacti()
{
using (FileStream fs = File.Open("data.dat", FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
DatabazeZakazek temp = bf.Deserialize(fs) as DatabazeZakazek;
return temp ?? new DatabazeZakazek();
}
}
Pěkný den,
Jarda Jirava
Už jsem si k tomu něco našel http://msdn.microsoft.com/en-us/library/ms173224.aspx!
Díky dneska o tomhle operátoru slyším poprvé. :-)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Zhodnoceni PDA — založil darkerboy
Zhodnocení naprogramovené hry HAD — založil Ahoj3
Js-react, character sheet, zhodnoceni chyb — založil peter
Moderátoři diskuze