Diskuze: Správný návrh třídy
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ja treba moc dotazu nerozumim. Muzes treba pridat ukazku kodu ke kazde
variante?
V php bych to resil tak, ze mam tridu, ktera resi pripojeni k db a prijima
odesila dotazy. A pak mam druhou tridu, ktera je napojena na tuhle db tridu a v
ni mam jednotlive dotazy. Takze db tridu pouzivam jenom 1x.
Pseudo-kod nejak takto:
class classDb
function __construct() {..}
function connect () {...}
function disconnect () {...}
function query () {... return $dataToArray;}
function error () {...}
---
class classQueries()
var $db, $queries;
function __construct($db) {
$this->db = $db;
$this->db->connect();...
$this->queries = array();
$this->queries['rozumnynazev'] = 'SELECT ... FROM tab';
}
function query($name) {return this->db->query($this->queries[$name]);}
---
$db = new classDb;
$queries = new classQueries($db);
$data = $queries->query('rozumnynazev');
Vyhoda tehle konstrukce je, ze ted treba se hromadne meni mysql na pdo. Tady
si jen prepises tridu db, aby davala stejne vysledky. Opravis sql dotazy na
jednom miste, pokud bude treba. A vse bude fungovat jako driv.
Take muzes chtit udelat neco jako web-services:
adresa.cz/ws?query=rozumnynazev&format=xml
Tady pak si ale musis pohlidat opravneni uzivatele.
A kdyz jsme u opravneni, tak je dobre u pristupu k db nastavit pro kazdy druh
uzivatele i specialniho uzivatele pro db. Cili, kdyz se nekdo naloguje do
systemu jako user, tak i k db ma pristup jako user a userovi nedas pravo menit
tabulku users v db. Takze hacker si nemuze zmenit sve opravneni, protoze ho sql
nepusti k editaci tabulky.
(coz na free hostingu moc nejde delat, tam mas jedineho usera v db, ktery muze
vsechno jako admin )
Děkuji za odpověď, ale příklad v PHP opravdu nechci...
Mám na mysli jak třídu navrhnout a i jiné třídy co budu dělat.
1. Pouze vytvořit objekt a přes ten se dostávat k metodám a vlastnostem
public class Ukazka {
public SqlConnection con { get; set; }
public Ukazka() {
con = new SqlConnection(connetionString);
}
}
2. Doprogramovat si metody (skládání)
public class Ukazka {
public SqlConnection con { get; set; }
public Ukazka() {
con = new SqlConnection(connetionString);
}
public void Open() {
con.Open();
}
}
3. Dědičnost
public class Ukazka : SqlConnection {
public Ukazka() : this(connetionString) {
}
}
Použití:
1. Connector.Con.Open();
2. Connector.Open();
3. Connector.Open();
Jde mi prostě jenom o to co je lepší použít, jak tady tak i například
u jiných tříd díky moc.
Poradi jini
Ja bych pouzil vlastni tridu, ktera se na sql odvolava. Viz, jak jsem psal. Z
duvodu, ze pak staci upravit moji tridu a uz treba misto sql ziskava data z csv
souboru nebo oracle sql, ldap tree a pod.
Pokud das ten objekt connector dovnitr tridy, pak bys jej mel volat jen a pouze
uvnitr a nikoliv pres Connector.Con.Open(). Cili: 1 je spatne, 2 je spravne, 3
nemuzu posoudit (diky neznalosti, co to presne dela). 3, podle mne klonuje tridu
pod jiny nazev. To asi v pripade connection postrada smysl. Leda bys k tomu
chtel pripojit jeste dalsi vlastni funkce.
1 je pouzitelna na strukturovane pole pro ukladani dat. Nejsem si jisty, zda
jsem to pouzil i jinak.
Misto 3 je lepsi 2. Ty vlastne klonujes celou tridu. To je ok. Ale, kdyz z venci
pouzijes funkci te tridy, tak jsi zavisly na shode nazvu. Zitra nastane update,
rozhodnou se prejmenovat funkci open na openConnection a ty v celem svem
programu budes muset prepisovat open na openConnection. Nebo se rozhodnes pouzit
oracle a to pracuje s db jinak, uprednostnuje transakce. Tam mas openConnection
a openTransaction (kdo vi, jak to pojmenovava c#), ale urcite oboje neni open a
open.
Navíc nic dělat nemá. Jediné co je, že v ní bude natvrdo zadaný connection string. Myslím si, že vysvětlení od Petra je celkem v pohodě. Že nejlepší bude to skládání. A ani mi ted nejde o tu sql třídu jde mi o to jak obecně ty třídy nejlíp navrhovat. Díky
Ten connectionstring se většinou dává do nějakýho configu ven z kódu
aplikace. Není tak úplně dobrý nápad dávat ho přímo do kódu. Takže
tato třída nemá podle mě smysl.
Jinak obecně k těm třem řešením
A taky se vyplatí přečíst tohle :
Zobrazeno 9 zpráv z 9.