DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Sva početnička pitanja (http://www.devprotalk.com/forumdisplay.php?f=40)
-   -   PHP framework i TDD... Kad? (http://www.devprotalk.com/showthread.php?t=11301)

Ivan988 19. 11. 2012. 19:08

PHP framework i TDD... Kad?
 
Nekoliko meseci ucim php, poceo sam i sa OOP-om. Ustvari ja to zovem OOP, ali vise je nabacivanje funkcija u klasu (na ovom forumu sam procitao tu frazu) :)

I sada me zanima kada da pocnem da koristim PHPUnit ili nesto drugo za TDD?
Kao i kada da pocnem da koristim neki framework?

Kada sam pomenuo Codeigniter jednom iskusnijem programeru rekao mi je da ne treba ni da mislim na ci dok ne budem znao savrseno php.
Ali da li je moguce da neko savrseno zna php?

razno 19. 11. 2012. 20:15

Moguce je, sto nebi bilo ? :)

Sto se tice PHPunit-a zavisi sta pises i koliko kompleksno. Recimo ako radis nesto sa finansijama, svakako to treba posebno istestirati, tu bi ga recimo koristio.
Za prostije stvari istestiras unosenjem primera rucno (moze i automatski,sa nekim alatima) i verifikujes rezultat. Vecinom ljudi ovako rade testiranje. Sa druge strane znam i neke firme koje ni proste stvari ne pustaju u produkciju dok ne prodju ove testove, ali se uglavnom radi o veoma posecenim sajtovima ili specificnim aplikacijama.

Sto se tice framework-a on ti sluzi da ti olaksa neke stvari i da ne izmisljas toplu vodu ponovo. Na timskom radu sigurno je bolje koristiti fw, jer ga svi znaju, dobra je dokumentacija(uglavnom) i dobro je testiran, u odnosu na custom klase i komponente.
Sto se tice kada treba da pocnes da ga koristis, ja bi ti rekao kada mozes da razumes ono sto radis. Svakako da je sto sire php znanje pozeljno

webarto 19. 11. 2012. 21:48

Izvini, je li iskusniji programer koristi CI? :)

Je li se može pogledati neki code što si napisao?

Ivan988 19. 11. 2012. 22:12

Ne ne, ali meni su za jedan posao trazili CI, pa sam resio da prvo njega naucim. :)

Poceo sam da pisem jednu klasu (moju prvu klasu, zato budite nezni :D ), tek sam poceo sa njom, tako da imam jos par metoda da dodam i nesto da popravim.

PHP kôd:

<?php

/**
 * Users
 * 
 * Class for registering new users
 *
 * @author Ivan Toncev 
 */
class Users {
    
    protected 
$conn;    //db connection
    
protected $formStatus//status of form inputs
    
protected $tableName//name of db table where 
    
    
    /**
     * 
     * Connecting to database
     * 
     * @param string $db Name of Database
     * @param string $user User name for MySQL
     * @param string $pass Password for MySQL
     * @param string $host OPTIONAL default is localhost
     */
    
public function __construct($db$user$pass$tableName$host 'localhost'){
        
        try
        {
            
$this->tableName $tableName;
            
$this->conn = new PDO("mysql:host={$host};dbname={$db}"$user$pass);
            
$this->conn->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
        }
        catch(
PDOException $e){
            echo 
'Error: '.$e->getMessage();
        }
        
    }
        
        
/**
         * 
         * This method will validate form
         * 
         * NEED TO BE FIXED
         * 
         * @return boolean
         */
        
protected function checkInputs($userName$password$repPassword$email)
        {
            
            if(!
$userName){
                
$this->formStatus "You must fill User Name field<br />";
                return 
FALSE;
            }
            if(!
$password){
                
$this->formStatus "You must fill Password field<br />";
                return 
FALSE;
            }
            if(
$password !== $repPassword){
                
$this->formStatus "Password and Repeat Password field don't match<br />";
                return 
FALSE;
            }
            if(!
$email){
                
$this->formStatus "You must fill email field<br />";
                return 
FALSE;
            }
            
            return 
TRUE;

        }
        
        
        
/**
         * 
         * Insert new User 
         * 
         * @param string $userName
         * @param string $password
         * @param string $repPassword
         * @param string $email
         * @throws Exception
         */
        
public function createNewUser($userName$password,$repPassword$email)
        {
            
            try
            {
                
                if(!
$this->checkInputs($userName$password$repPassword$email)){
                    throw new 
Exception($this->formStatus);
                }
                
                
$sql "INSERT INTO $this->tableName(userName, password, email) 
                            VALUES(:userName, :password, :email)"
;
                
$stmt=$this->conn->prepare($sql);
                
$stmt->execute(array("userName"=>$userName"password"=>$password"email"=>$email)) 
                            or die(
"Could not insert data in database");
                echo 
"Success<br /><a href='signUp.php'>Back</a>";
                
            } 
            catch(
Exception $e)
            {
                echo 
$e->getMessage();
                echo 
"<a href='signUp.php'>Back</a> ";
            }
            
        }
    
}

?>

Jos jednom da kazem, nije ni blizu kraju. A verovatno ima i gresaka u spelovanju... :1087:

kickloop 20. 11. 2012. 01:26

Citat:

Originalno napisao webarto (Napišite 109241)
Izvini, je li iskusniji programer koristi CI? :)

Je li se može pogledati neki code što si napisao?

Citat:

Originalno napisao Ivan988 (Napišite 109242)
Ne ne, ali meni su za jedan posao trazili CI, pa sam resio da prvo njega naucim. :)

Sa emfazisom na "tražili za posao".

Primetio sam da @webarto uvek pljuješ CI a nikada ne kažeš zašto. Možeš li pojasniti, pliz.

Kohana, Yii, bla-bla a svi traže CI.

webarto 20. 11. 2012. 02:25

Ne pljujem, samo kažem da ne valja, i da je najgore što možeš preporučiti početniku, jer će stvoriti iskrivljenu sliku u vezi OOP i MVC u glavi koju će teško ispraviti. Kohana je dobra, koliko-toliko. Za Yii nemam mišljenje.
To što je traženo, ne znači da valja (e.g. Wordpress), već da "svi znaju", da se može jeftino naći radna snaga, i da radi posao (samo je pitanje kako)... ali me stvarno to ne zanima, svakome njegovo :)

Prvo, Users ne treba da brine o konekciji na bazu, to ćeš postići koristeći Dependency Injection.

Pročitaj http://nikic.github.com/2011/12/27/D...ASP-SOLID.html i nadam se da će ti biti jasno šta da ne koristiš (a ovoga je CodeIgniter prepun), i šta da koristiš.

Nemam više vremena :D

PHP kôd:

 <?php

class Users
{

  protected 
$_db;
  protected 
$_errors = array();

  public function 
__construct(PDO $db)
  {
    
$this->_db $db;
  }

  protected function 
checkInputs($userName$password$repPassword$email)
  {
    if (
$password !== $repPassword)
    {
      
$this->_errors[] = "Password and Repeat Password field don't match";
    }
    return empty(
$this->_errors);
  }

  public function 
createNewUser($userName$password$repPassword$email)
  {

  }

}


ivanhoe 20. 11. 2012. 02:28

TDD i pravljenje testova nije bas sasvim ista stvar. TDD podrazumeva da se prvo napisu testovi, pa se tek onda kodira. Time se (jednom kad se naviknes) stedi vreme jer nema potrebe da radis 2x istu stvar tako sto prvo rucno testiras (kako to vecina nas ima obicaj), pa tek onda dodajes testove. Da ne pricamo koliko je smaranje pisati testove za stari kod, kad moras da se prisecas sta kako radi...

A inace testovi imaju smisla samo za kod koji ce se menjati u buducnosti. Znaci ako pravis sajt za frizerski salon za 300e, nema smisla da se time gnjavis. Ako pravis web aplikaciju i ocekujes da ce se to razvijati, refaktorisati, prosirivati onda su testovi spas. Izmenis sta treba, pustis testove, i ako prodju znas da najverovatnije nista nisi pokvario... ako nemas testove onda moras sve to da proveravas rucno i ako to radis cesto (u mnogim web aplikacijama se to radi na dnevnom nivou) onda se to svede na isto kao da pravis unit testing, samo kao da svaki put pises sve testove iz pocetka....

webarto 20. 11. 2012. 02:33

Backing up @ivanhoe with links...
http://stephenwalther.com/archive/20...nit-tests.aspx
http://www.martinfowler.com/bliki/Te...velopment.html

Ivan988 20. 11. 2012. 23:05

Hvala na pomoci!

Citat:

Originalno napisao webarto (Napišite 109245)
Ne pljujem, samo kažem da ne valja, i da je najgore što možeš preporučiti početniku, jer će stvoriti iskrivljenu sliku u vezi OOP i MVC u glavi koju će teško ispraviti.

Ok, da znam, jer je to jos jedan razlog zasto sam hteo da naucim neki framework. Mislio sam da cu tako videti kako MVC treba da izgleda.

mangia 21. 11. 2012. 00:09

Ja nisam neki programer ali čisto da preporučim da prevode definišeš negdje van klasa i da pustiš samom korisniku da koristi jezik koji želi...


Vreme je GMT +2. Trenutno vreme je 10:19.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.