Jump to content
php.lv forumi

Mysql klase?


shurix

Recommended Posts

  • Replies 52
  • Created
  • Last Reply

Top Posters In This Topic

codez, runa ir par to, vai nedara funkcija q2() vēl kaut kādās perversijas.

Un tavs kods kaut arī ir saprotams, bet taj pašā laikā mazāk saprotams, nekā, piemēram

$user = DB::query("SELECT * FROM user WHERE id = %s", $ID)->result(0, 0);

 

 

Šeit es varu tikai nojaust, ka DB::query atgriež kaut kādu objektu un ka result atgriež rezultātu (man nezināmā formā), bet, ko nozīmē (0,0) man nav ne jausmas, ja vien es neesmu pazīstams ar šīm klasēm. Un kā es varu zināt vai tā funkcija query nedara vēl kādas perversības?

Edited by codez
Link to comment
Share on other sites

Īsti laikam nesaprotu vairs par ko iet runa, bet vismaz es domāju pašas veidotās metodes nosaukumu, Jūs ar Kaklz izskatās jau vairāk runājiet par to vai vispār taisīt klasi, vai izmantot iebūvētās php funkcijas.

 

Es tieši domāju ka pārlieku lielā saīsināšana metožu nosaukumos nav īsti laba, par to ka klases saīsina kodu un ir ērtāk, to neapstrīdu. Šis piemērs:

 

function articlesByTag(){
 $comments=DB::q3('SELECT * FROM comments c, users u WHERE c.uid=u.id and c.aid=%s LIMIT %s,20',$_POST['aid'],$_POST['offset']);
 echo json_encode($comments);  
}

 

domāju labāk un saprotamāk izskatītos, ja būtu funkcija nosaukta pilnīgāk:

 

function articlesByTag(){
 $comments=DB::query_assoc('SELECT * FROM comments c, users u WHERE c.uid=u.id and c.aid=%s LIMIT %s,20',$_POST['aid'],$_POST['offset']);
 echo json_encode($comments);  
}

 

To nosaukumu query_assoc() paņēmu no savas db klases. Tagad sāku domāt par PDO, bet cik atceros pats taisīju nosaukumus, lai saskanētu ar php mysql funkciju nosaukumiem, tā uzreiz intuitīvi varēja saprast un atcerēties ko funkcija dara, nu arī klāt komentāri. Man tās funkcijas bij sekojošas:

 

query_array(),

query_assoc(),

query_row(),

query_value().

 

Query_value atgrieza vienu vērtību, atbilstoši tam, kas tiek atgriezts ar vaicājumu, pārējās atgriež masīvus. Man nebija koloniņas metodes, bet to es visticamāk nosauktu par query_column(). Cik skatos izplatītāki nosaukumi tieši mysql klasēs ir izmantojot 'fetch' nevis 'query', piemēram fetch_assoc().

 

Kavacky, diez vai tas daudz ko mainīs, jo tāda pieeja kur skaitlis norāda uz dimensiju noderēs tikai tad ja Tu paskatoties uz q() sapratīsi un zināsi ka tas pilnīgi noteikti ir query, nevis, piemēram quantity. Pie tam, tieši vaicājumu gadījumā, dimensiju skaits var būt vairākiem variantiem viens. Nedomāju ka saīsinot funkcijas nosaukumu līdz vienam simbolam saekonomēsi laiku. Piemēram es burtus rakstu neskatoties uz klaviatūru, rakstot ciparus un iekaviņas gan, tāpēc kopumā pierakstot funkcijas nosaukumus query_assoc() un q0() ar visām iekaviņām laika ziņā neko īpaši neiegūšu. Pie tam kā jau teicu izstrādāšanas vides ļauj izmantot autocomplete un tur, kad atveras saraksts ar metodēm, viena burta metožu nosaukumi gan lielu priekšstatu par funkciju nedos, protams ja zin viņas no galvas un visā klasē ir tikai 5 metodes, tad jā, bet normāla datubāzes klase parasti satur daudz vairāk metodes, ja ne sākumā, tad ar laiku to parasti nākas paplašināt.

Link to comment
Share on other sites

Codez, tas ka šis kods:

 

$user=DB::q2('SELECT * FROM user WHERE id=%s',$uid);
echo "Hello, $user";

 

ir saprotams neviens neapstrīd, bet kā ir kad Tev vajag atrast metodi kaut kādai konkrētai darbībai no metožu saraksta, kas Tev ir pieejams. Kodā tas viss ir saprotams, bet kā tad sanāks ja situācijai ir jāpieiet no otra gala un jāmeklē metode kas dara darbību, nevis jānosaka darbību ko dara konkrētā metode?

Edited by Maris-S
Link to comment
Share on other sites

Maris-S, paskatoties uz abiem koda piemēriem, nav nozīmer, vai tiek lietots DB::q3 vai DB::query_assoc, jo abos ir pilnīgi skaidrs, kas tur tiek darīts un, ja vien tās metodes nedara nekādas perversības (bet tas nav atkarīgs no metodes nosaukuma) tad ir vienlīdz saprotami abi kodi, tikai viens mīnusiņš ir tavam variantam. Piemēram, man, portatīvā monitorā, tavs variants ir ar scrollbar-u un es neredzu pašas beigas, kamēr mans ir bez - sīkums, bet tomēr.

Link to comment
Share on other sites

Kā jau teicu, kodā ir skaidrs, bet kad jāmeklē metode pēc nosaukuma un jādomā ko tad īsti viņa dara, tad gan ir atšķirība. Par rindas garumu saekonomējot kādus 10 simbolus, pat 30 simbolus Tu neko īpaši neiegūsi, nopietni vaicājumi dažreiz izveido skrullīti ne tikai uz sāniem, bet arī uz augšu un leju.

Link to comment
Share on other sites

ir saprotams neviens neapstrīd, bet kā ir kad Tev vajag atrast metodi kaut kādai konkrētai darbībai no metožu saraksta, kas Tev ir pieejams. Kodā tas viss ir saprotams, bet kā tad sanāks ja situācijai ir jāpieiet no otra gala un jāmeklē metode kas dara darbību, nevis jānosaka darbību ko dara konkrētā metode?

 

Tur jau tā lieta, ka datubāzes kverija metode ir viena no visbiežāk lietotajām un programmētājam, kurš strādā attiecīgajā ietvarā, viņas ir zināmas no galvas.

Piemēram, es visām klasēm, kur ir singletoni, izmantoju i(), metodi nevis instance(), lai atgrieztu instanci. Kods daudzās vietās dēļ tā ir daudz lasāmāks, vienkārši tāpēc, ka tas ir īsāks un tākā es zinu, ka i() vienmēr nozīmēs instance mana FW ietvaros, man tas nesagādā problēmas.

 

Vienīgais arguments, ko šeit min, galvenokārt ir tas, ka tas nav intuitīvi un uzreiz saprotami, bet šāds arguments ir ārpus prakstiskās realitātes, jo realitātē cilvēkam, kurš kodē vai uztur sistēmu ir kaut nedaudz jābūt pazīstamam ar FW, kurā šī sistēma ir veidota, šinī gadījumā manu FW. Jo tāpat katrā freimworkā līdzīgām klasēm var būt atšķirīgi metožu nosaukumi, kas dara vienu un to pašu. Tāpēc realitātē ir jābūt pazīstamam ar FW, kurā strādā. Mēs te protams varam teoretizēt, ka ome lasot, nesapratīs, kas ir DB::q3, bet DB::queryRowSet sapratīs, bet tas ir tikai teorijā.

Edited by codez
Link to comment
Share on other sites

Codez, šis iemesls nu vienkārši gāž mani gar zemi! :))

 

Daži tavi argumenti nav labāki. :)

 

codez, praksē ir gadījumi, kad ir vajadzīgs pliks, neapstrādāts results.

 

DB::q() atgriež pliku result objektu.

Edited by codez
Link to comment
Share on other sites

Konkrētas klases pārzināšana gan ir jautājums, kurš būtu jāapskata no visām pusēm. Piemēram, man ir gadījies, kad izveidoju klasi un dažas no metodēm neizmantoju bieži, gadās pie viņām atgriezties pēc ilgāka laika, ka pat neatceros nosaukumu, kamēr nepaskatos metožu sarakstu, paskatoties protams var izsecināt kura no metodēm ir šitā. Tādā situācijā man metožu nosaukumi q1(), q2(), q3() nepalīdzētu. Protams Tev taisnība ka datubāžu vaicājumu metodes tiek izmantotas ļoti bieži, bet piemēram klasei ko es iepriekš aprakstīju es pārsvarā vienmēr lietoju query_assoc() un query_value() metodes, dažreiz query_row(), pat neatceros vai vispār esmu lietojis query_array() un ja man retāk izmantojamās metodes, piemēram query_row() un query_array(), būtu nosauktas ar cipariem, es noteikti viņas kaut reizi, bet sajauktu.

 

Mans viedoklis par šo tāds. Savējās bieži izmantojamās klases metožu nosaukumos lietot nosaukumus kā qn() ir pieļaujams, bet nav ieteicams, jo nevar zināt vai kādam vēl būs jāstrādā pie projekta un vai nesanāks tā ka ilgstoši nevajadzēs izmantot klasi. Taisot reti izmantojamas klases vai pat vienreizējās konkrētam projektam vai arī klasēm plašākai publikai tādi nosaukumi ir pilnīgi izslēgti.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...