OOP Zhodnocení – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

OOP Zhodnocení – .NET – Fórum – Programujte.comOOP Zhodnocení – .NET – Fórum – Programujte.com

 

SeraphCZ0
Stálý člen
6. 5. 2010   #1
-
0
-

Č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

Nahlásit jako SPAM
IP: 195.113.124.–
ahl
~ Anonymní uživatel
8 příspěvků
6. 5. 2010   #2
-
0
-

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í.

Nahlásit jako SPAM
IP: 86.61.140.–
6. 5. 2010   #3
-
0
-

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.

Nahlásit jako SPAM
IP: 89.203.157.–
Dušan Janošík | web: djanosik.cz, @djanosik
SeraphCZ0
Stálý člen
6. 5. 2010   #4
-
0
-

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.

Nahlásit jako SPAM
IP: 85.71.98.–
SeraphCZ0
Stálý člen
6. 5. 2010   #5
-
0
-

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();

Nahlásit jako SPAM
IP: 85.71.98.–
6. 5. 2010   #6
-
0
-

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();
}

Nahlásit jako SPAM
IP: 89.203.157.–
Dušan Janošík | web: djanosik.cz, @djanosik
JardaJirava0
Stálý člen
7. 5. 2010   #7
-
0
-

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

Nahlásit jako SPAM
IP: 194.213.35.–
MCAD, MCPD
http://jirava.net/blog
http://xaml.cz - Magazín moderních technologií založených na XAML
SeraphCZ0
Stálý člen
7. 5. 2010   #8
-
0
-

Neznám operátor ?? :smile1:

Nahlásit jako SPAM
IP: 85.71.98.–
SeraphCZ0
Stálý člen
7. 5. 2010   #9
-
0
-
Nahlásit jako SPAM
IP: 85.71.98.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý