Jump to content
php.lv forumi

Vai lietot Singleton?


Maris-S

Recommended Posts

Sveiki!

 

Pameklēju pa internetu dažādas atsauksmes un diskusijas par Singleton modeli. No vienas puses tas ir ērts, bet no otras puses ir negatīvas atsauksmes. Piemēram šajā diskusijā:

 

http://stackoverflow.com/questions/4595964/who-needs-singletons

 

lielākā piekrišana ir tieši viedoklim, ka Singleton labāk neizmantot (atbilde no Gordon). Tā nav vienīgā diskusija kur tiek izcelti Singleton trūkumi, īpaši uz php un bieži vien tādiem komentāriem ir diezgan liels atbalsts, kas liek secināt ka daudziem programmētājiem viņš nepatīk.

 

Gribēju pajautāt ko Jūs domājat par Singleton un vai bieži izmantojat? Codez, zinu ka Tu izmanto viņus, vai ir sanākušas kādas problēmas darbojoties ar Singleton modeli?

 

Paldies!

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

PHP singletonus izmanotoju un nekādu problēmu nebija, bet es tikpat kā nerakstīju testus savām aplikācijām, kur varētu parādīties galvenais singletonu trūkums, jo pēkšņi dotā singletona vietā vajadzīgs kaut kāds pseido-obejkts, kurš simulē kaut kādu darbību. Lai gan arī to var mierīgi atrisināt.

Manuprāt, PHP ir tik daudz globālu stāvokļu jau iebūvēti pamatā (visi $_SERVER, $_POST, $_COOKIE, ..., ), ka pieliekot ērtibai dažus pašam, nekas principiāli nemainīsies.

 

Tagad scalā varu atļauties neizmantot singletonus, jo tur var uztaisīt dependancy injection automātiski ar implicit parametriem, pāšā kodā nepadodot parametrus, gala api lietotāja kods sanāk tikpat vienkāršs, bet bez globāliem stāvokļiem un tā kā Play FW ir vienkārsi brīnišķīga testēšana, tad iespējams, ka sākšu to izmantot. Bet par testu lietderību ir atsevišķa diskusija.

Link to comment
Share on other sites

Kāda jēga apspriest, vai lietot vai nelietot vienu no populārākajiem koda dizaina paraugiem (design patterns). Ja vajag un tas ir labākais acīmredzamais risinājums, droši lieto. Ja nezini par "design patterns", tad izlasi grāmatu - silti iesaku, lai izprastu to "štelli", kāpēc tas vispār vajadzīgs... Katrs dizaina paraugs ir paredzēts kaut kādiem noteiktiem tipveida gadījumiem, kas bieži mēdz atkārtoties.

Link to comment
Share on other sites

Simpsons, Tu laikam manis sarakstīto izlasīji neuzmanīgi. :) Domāju diskusiju pēc manis norādītās saites arī neizpētīji. Pie tam populārākais nenozīmē labākais. Es arī nejautāju par popularitāti. Kam Singletons domāts es arī labi zinu un arī lasījis par to esmu. Kā jau teicu vairāk iet runa par kvalitāti un vai ir vērts viņu izmantot. Saitē norādītajā diskusijā var redzēt, ka programmētāju vidū tādas izteikti labas atzinības Singletonam nav un tur ir arī savi pamatojumi tam. Par to arī iet runa, nevis par to, kas tas ir un cik viņš ir populārs.

 

Jebkurā gadījumā paldies par atbildēm. Ērts tas Singleton ir, bet būs laikam pagaidām jāatturas no viņa. Jāpiekrīt arī Codez, ka php varētu izmantot dažus globālos mainīgos, jo tā pat daži jau tur ir.

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

  • 4 weeks later...

Singletons ļauj pieturēties pie OOP paradigmas dažās sarežģītās situācijās, kā, piemēram, gadījumā ar DB savienojumu vai aktīvo sesiju.

 

Ir principiāla atšķirība starp Database::singleton() vai $GLOBALS['db'].

Edited by Mr.Key
Link to comment
Share on other sites

Nu singltons ir moderns veids kā izveidot kkādu globālu mainīgo.

Tāpat kā kallbeks ir moderns goto.

 

/no HackerNews/

Edited by daGrevis
Link to comment
Share on other sites

Man kaut kā liekās, ka singletons nav globāls variablis, singleton klase ir globāli pieejama (ja ir autoloaderis vai sakarīga struktūra), bet ne pats variablis, tas ir privāts klasei.

 

Par to callback = goto gan nepiekritīšu, callback var returnot datus, goto nevar, un parasti ar goto neatgriežas atpakaļ.

Edited by jurchiks
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...