Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor
 Discuții despre TVR Sport HD

Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android
 Recomandare bicicleta e-bike 20&#...

Bing-Content removal tool

Nu pot accesa monitorulsv.ro de l...

Cum sa elimini urmele de acnee?
 Wc Geberit

Routere detinute in trecut si in ...

Teii din fața casei

E-Mail in serie prin Excel si Out...
 

Cand prea multa modularizare e prea multa?

- - - - -
  • Please log in to reply
27 replies to this topic

#1
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018
De ce ai avea o metoda cu doi parametri, care tot ce face este sa returneze unul din parametri?
E "future proof"?

Laravel 8.77.1, Illuminate\Database\Query\Processors\Procesor
Doua din trei metode doar returneaza un parametru.

<?php
namespace Illuminate\Database\Query\Processors;
use Illuminate\Database\Query\Builder;
class Processor
{
	/**
	 * Process the results of a "select" query.
	 *
	 * @param  \Illuminate\Database\Query\Builder  $query
	 * @param  array  $results
	 * @return array
	 */
	public function processSelect(Builder $query, $results)
	{
		return $results;
	}
	/**
	 * Process an  "insert get ID" query.
	 *
	 * @param  \Illuminate\Database\Query\Builder  $query
	 * @param  string  $sql
	 * @param  array  $values
	 * @param  string|null  $sequence
	 * @return int
	 */
	public function processInsertGetId(Builder $query, $sql, $values, $sequence = null)
	{
		$query->getConnection()->insert($sql, $values);
		$id = $query->getConnection()->getPdo()->lastInsertId($sequence);
		return is_numeric($id) ? (int) $id : $id;
	}
	/**
	 * Process the results of a column listing query.
	 *
	 * @param  array  $results
	 * @return array
	 */
	public function processColumnListing($results)
	{
		return $results;
	}
}



#2
asiodf

asiodf

    Senior Member

  • Grup: Senior Members
  • Posts: 2,228
  • Înscris: 12.09.2011
Poate sunt facute sa fie suprascrise de utilizator.

#3
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Si ai vrea sa returneze o structura ?

#4
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018
Hm?
As vrea sa fie recursiva. :)
Luata singura pare inutila, intr-un framework te intrebi de ce a facut-o asa.

View Postasiodf, on 25 august 2022 - 10:51, said:

Poate sunt facute sa fie suprascrise de utilizator.

Are sens, probabil ca asta este.

Edited by wolfenste, 25 August 2022 - 14:24.


#5
iulian_1976

iulian_1976

    Active Member

  • Grup: Members
  • Posts: 1,571
  • Înscris: 10.05.2008
Acela este doar un schelet, "umpli" metodele cu cod, sintaxa proprie Query apoi poti sa le apelezi din Controller, desi
ordinea era sa vezi despre Eloquent care face acelasi lucru mai lizibil, adaptat la orice fel de interogari.

Laravel este un framework complex, are diverse destinatii, desigur ca ai multe semne de intrebare.Ar fi bine sa cunosti structura unui proiect Laravel si cam ce face el :  https://laravel.com/docs/8.x/structure

Ca sa intelegi ce face codul respectiv incepi "object-relational mapper (ORM)", in cazul nostru Eloquent apoi despre Query Builder, sunt doua metode distincte de interactionare cu DB. Sintaxa folosita pentru Query de exemplu: https://laravel.com/...-results-lazily strict ca utlilizare https://laravel.com/...Processors.html

Edited by iulian_1976, 25 August 2022 - 23:17.


#6
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018
Pai de acolo vin ... Posted Image Posted Image Nu doar ca stiu ce este un ORM, am vazut si cum face de mi s-a acrit. Nu vorbesc din documentatii sau articole de pe net.

Am pornit din Controller cu o interogare simpla, sa imi dea numele unde id (din baza de date) este 1.
Am trecut prin Eloquent\Model (btw, acesta foloseste Query\Builder) si asa am ajuns la acest Processor. E overingineering. Nu degeaba Laravel e cel mai lent framework PHP si nu degeaba Rasmus l-a criticat. Doar ca sa determine numele tabelului din baza de date trece printr-un carnat de obiecte si metode cand putea sa faca asta cu o functie simpla si sa salveze rezultatul undeva. Noo, daca are nevoie iar de numele tabelului, o ia de la capat. Nu chiar complet ca are un cache cu pluralul, dar si pluralul l-a determinat cu n metode si a creat zeci de obiecte Generator (in Doctrine).

Cand credeam ca in sfarsit s-a terminat si revin in Controller cu rezultatul (aveam rezultatul sub forma de array de obiecte StdClass) ii da hydrate () si boom, o ia de la capat si mai face inca un obiect instanceof Illuminate\Database\Eloquent\Model doar pentru interogarea asta si am impresia ca il face si pe al treilea, nu am ajuns acolo insa am vazut ca exista, sunt trei.

Laravel e plin de layers, layers si iar layers dar cand angajatorul ti-l cere nu ai incotro, decat sa faci freelancing si cum te taie capul.

LE: ca tot am adus vorba, ce rol are 'hidratarea' asta?

Edited by wolfenste, 26 August 2022 - 06:37.


#7
iulian_1976

iulian_1976

    Active Member

  • Grup: Members
  • Posts: 1,571
  • Înscris: 10.05.2008
Defineste ce nu ai reusit din Laravel, pune codul sursa facut de tine.

Uite un exemplu bazic la ce ar folosi o functie de genul pusa de tine, Builder $query este deja injectata nu trebuie sa faci nimic, cam cum ai extrage numele tabelului.
Laravel pare incarcat pentru ca este pregatit pentru diferite sarcini, este imposibil sa stii tot ce este acolo are mult design pattern.

/**
		 * Process the results of a "select" query.
		 *
		 * @param \Illuminate\Database\Query\Builder $query
		 * @param array $results
		 * @return array
		 */
	 public function processSelect(Builder $query, $tableName)
	 {
			 $tableName = $query->getModel()->getTable();

			 return $tableName;
	 }


sau static

class yourModel extends Eloquent {
	 public static $table = "differentTable";
	 function someFunction()
	 {
			 return yourModel::$table;
	 }
}
or
class yourModel extends Eloquent {
public function someFunction()
{
	 return $this->table();
}
}

Hidratarea cred ca te referi la o functie gen hydrate(), daca print-un constructor afectezi o proprietate anume tuturor obiectelor create, cu o metoda hydrate poti sa afectezi sau schimbi proprietatea unui obiect anume.

Laravel nu o sa-l invei pe repede inainte, ai nevoie de timp in acelasi timp nu ai nevoie de tot ce este in el.

Edited by iulian_1976, 28 August 2022 - 03:31.


#8
radu103

radu103

    Guru Member

  • Grup: Senior Members
  • Posts: 12,315
  • Înscris: 15.11.2003
Daca tineti la viitorul profesional si la viitorul planetei renuntati la mizeriile scrise in PHP
https://hackaday.com...mming-language/

Pretul energiei va fi tot mai mare asa ca nu vom ajunge bine cu bitcoin si site-uri php

#9
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018

View Postiulian_1976, on 28 august 2022 - 03:29, said:

Defineste ce nu ai reusit din Laravel, pune codul sursa facut de tine.

Uite un exemplu bazic la ce ar folosi o functie de genul pusa de tine, Builder $query este deja injectata nu trebuie sa faci nimic, cam cum ai extrage numele tabelului.
Laravel pare incarcat pentru ca este pregatit pentru diferite sarcini, este imposibil sa stii tot ce este acolo are mult design pattern.

/**
		 * Process the results of a "select" query.
		 *
		 * @param \Illuminate\Database\Query\Builder $query
		 * @param array $results
		 * @return array
		 */
	 public function processSelect(Builder $query, $tableName)
	 {
			 $tableName = $query->getModel()->getTable();

			 return $tableName;
	 }

Clasa aia Processor are cu totul alta destinatie nu ar trebui sa o poluezi asa. Metoda processSelect () trebuie sa returneze array nu string nu numele tabelului. Eu ma refeream la faptul ca in codul din Laravel pentru a obtine numele tabelului sunt parcurse prea multe functii, recalculeaza acelasi lucru. Uite, cam asa:

getTable () - helper class_basename () - Str pluralStudly () - Str plural () - Pluralizer plural () - Pluralizer uncountable () - Pluralizer inflector () - Inflector pluralize () - CacheWordInflector inflect () - Pluralizer matchCase () - Str snake ()

View Postiulian_1976, on 28 august 2022 - 03:29, said:

sau static

class yourModel extends Eloquent {
	 public static $table = "differentTable";
	 function someFunction()
	 {
			 return yourModel::$table;
	 }
}
or
class yourModel extends Eloquent {
public function someFunction()
{
	 return $this->table();
}
}


Nu exista o clasa Eloquent in tot laravelu'. Nu imi trebuie mie numele tabelului, de aia exista Laravel, face el toate astea in fundal eu doar scriu ceva minimal in controller. Ideea era ca mi se pare stufos codul sursa Laravel, o avea motivele lui sa fie asa. Eu am luat pas cu pas pe unde ma duce fluxul de executie, nu ma asteptam sa fie atat de lung, uneori, destul de des, pare ca se complica pentru nimic.

View Postiulian_1976, on 28 august 2022 - 03:29, said:

Hidratarea cred ca te referi la o functie gen hydrate(), daca print-un constructor afectezi o proprietate anume tuturor obiectelor create, cu o metoda hydrate poti sa afectezi sau schimbi proprietatea unui obiect anume.

Laravel nu o sa-l invei pe repede inainte, ai nevoie de timp in acelasi timp nu ai nevoie de tot ce este in el.

Ma refeream la hidratare in general in programming dar si in cazul special Laravel. In cazul lui Laravel, sa zicem ca ai intr-o metoda din Controller:

$data = SomeInfo::select ('name')->where ('id', 1)->get ();


where () returneaza un obiect Illuminate\Database\Eloquent\Builder. Acesta apeleaza metoda sa get ().
De aici incolo, este facuta toata treaba de conectare la baza de date cu PDO. get () apeleaza getModels ():

	/**
	 * Get the hydrated models without eager loading.
	 *
	 * @param  array|string  $columns
	 * @return \Illuminate\Database\Eloquent\Model[]|static[]
	 */
	public function getModels($columns = ['*'])
	{
		return $this->model->hydrate(
			$this->query->get($columns)->all()
		)->all();
	}


all () (primul) returneaza un array de obiecte stdClass cu rezultatul interogarii. Ai rezultatul, gata!! :) Dar nu se opreste aici, acest rezultat este plasat metodei hydrate () (btw, nu exista metoda, o ia pe calea magica __call ()) iar dupa acest hydrate () sunt facute alte obiecte Eloquent\Model, Query\Builder, Eloquent\Builder samd, cam toata functionalitatea de tip Model.  Pare ca reface acelasi lucru cu alte obiecte de acelasi fel dar proaspete. Adica 'hidrateaza'. De asta intrebai ce rost are hidratarea asta.

View Postradu103, on 28 august 2022 - 08:59, said:

Daca tineti la viitorul profesional si la viitorul planetei renuntati la mizeriile scrise in PHP
https://hackaday.com...mming-language/

Pretul energiei va fi tot mai mare asa ca nu vom ajunge bine cu bitcoin si site-uri php

Vad deseori astfel de discutii, ca limbajul ala e mort samd. Mie mi se rupe. Sunt prea mic sa imi fac griji din asta. Ce limbaj moare peste 5 ani sau 20 e ultma mea grija. La fel si cu salvatu' planetei renuntand la PHP. Daca ma intrebi pe mine sunt pentru performanta (dupa cum vezi mai sus ma irita chestiile stufoase pentru nimic) dar iar spun, sunt prea mic in schema mare a lucrurilor. Daca PHP'u sau Laravelu' imi pun ciorba pe masa e ok.

#10
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018
Siu si C++ dar cine face site-uri in C++? Directia ar trebui sa vina de sus nu de la cel mai neinsemnat utilizator de PHP.
Fa tu un framework web in C care rupe la viteza de dezvoltare si vor trece baietii la C.

#11
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
Cele mai dese probleme de performanta intalnite de mine in cazul diverselor aplicatii web au avut drept cauza o interactiune ineficienta cu baza de date (interogari prea multe si/sau proaste) nu limbajul in sine.

Exemplu detaliat: https://forum.softpe...online-popular/

ORMurile te fac sa uiti ca interactionezi cu un serviciu extern si nu cu niste structuri de date existente deja in memorie.

Edited by dani.user, 28 August 2022 - 11:13.


#12
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,447
  • Înscris: 06.01.2010

Quote

Siu si C++ dar cine face site-uri in C++?
O sa fii surprins, dar chiar se 'fac' siteuri in c++.

#13
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
Pana la a scrie siteul in C++ se gasesc  destule optimizari de facut astfel incat performanta sistemului sa nu fie o problema.

#14
wolfenste

wolfenste

    Member

  • Grup: Members
  • Posts: 531
  • Înscris: 02.05.2018

View Postparabellum, on 28 august 2022 - 12:03, said:

O sa fii surprins, dar chiar se 'fac' siteuri in c++.

Nu sunt surprins, stiu ca se fac sau mai bine zis ca se pot face. Mie arata-mi ca abunda ofertele de angajare cu facut site-uri in C++

View Postdani.user, on 28 august 2022 - 13:03, said:

Pana la a scrie siteul in C++ se gasesc  destule optimizari de facut astfel incat performanta sistemului sa nu fie o problema.

Facebook este (sau era?) scris in PHP, partea critica e in C.

View Postradu103, on 28 august 2022 - 08:59, said:

Daca tineti la viitorul profesional si la viitorul planetei renuntati la mizeriile scrise in PHP
https://hackaday.com...mming-language/


Din ce vad eu acolo Python sta mai prost ca PHP dar pana acum nu mi-a zis nimeni ca trebuie sa scapam de el.

#15
radu103

radu103

    Guru Member

  • Grup: Senior Members
  • Posts: 12,315
  • Înscris: 15.11.2003

View Postwolfenste, on 28 august 2022 - 10:44, said:

Siu si C++ dar cine face site-uri in C++? Directia ar trebui sa vina de sus nu de la cel mai neinsemnat utilizator de PHP.
Fa tu un framework web in C care rupe la viteza de dezvoltare si vor trece baietii la C.
De vreo cativa multi ani web-ul e spart in frontend si backend frameworks iar php-ul e cel mai prost platit si ineficient din toate punctele de vedere

View Postwolfenste, on 28 august 2022 - 10:15, said:

Vad deseori astfel de discutii, ca limbajul ala e mort samd. Mie mi se rupe. Sunt prea mic sa imi fac griji din asta. Ce limbaj moare peste 5 ani sau 20 e ultma mea grija. La fel si cu salvatu' planetei renuntand la PHP. Daca ma intrebi pe mine sunt pentru performanta (dupa cum vezi mai sus ma irita chestiile stufoase pentru nimic) dar iar spun, sunt prea mic in schema mare a lucrurilor. Daca PHP'u sau Laravelu' imi pun ciorba pe masa e ok.
Nu zic doar ca e mort, zic ca este plin de el si din cauza asta se consuma de 20 ori mai multe resurse decat ar trebui.
E cel mai prost ptr incepatori ptr ca raman blocati in scripting si la un nivel de castig foarte limitat

View Postwolfenste, on 28 august 2022 - 13:17, said:

Din ce vad eu acolo Python sta mai prost ca PHP dar pana acum nu mi-a zis nimeni ca trebuie sa scapam de el.
Python are nisa lui unde e optimizat pe calcul numeric si data science

#16
iulian_1976

iulian_1976

    Active Member

  • Grup: Members
  • Posts: 1,571
  • Înscris: 10.05.2008
Intrebarea ta a fost:

View Postwolfenste, on 25 august 2022 - 10:28, said:

De ce ai avea o metoda cu doi parametri, care tot ce face este sa returneze unul din parametri?
E "future proof"?

Laravel 8.77.1, Illuminate\Database\Query\Processors\Procesor
Doua din trei metode doar returneaza un parametru.

<?php
namespace Illuminate\Database\Query\Processors;
use Illuminate\Database\Query\Builder;
class Processor
{
/**
	 * Process the results of a "select" query.
	 *
	 * @param \Illuminate\Database\Query\Builder $query
	 * @param string $results
	 * @return string
	 */
public function processSelect(Builder $query, $results)
{
	 return $results;
}


Iar acum  Posted Image

View Postwolfenste, on 28 august 2022 - 13:17, said:

Nu sunt surprins, stiu ca se fac sau mai bine zis ca se pot face. Mie arata-mi ca abunda ofertele de angajare cu facut site-uri in C++

Facebook este (sau era?) scris in PHP, partea critica e in C.

Din ce vad eu acolo Python sta mai prost ca PHP dar pana acum nu mi-a zis nimeni ca trebuie sa scapam de el.

Iar bazele Php in ce au fost scrise? Posted Image

View Postradu103, on 28 august 2022 - 13:27, said:

De vreo cativa multi ani web-ul e spart in frontend si backend frameworks iar php-ul e cel mai prost platit si ineficient din toate punctele de vedere
Nu zic doar ca e mort, zic ca este plin de el si din cauza asta se consuma de 20 ori mai multe resurse decat ar trebui.

Tu promovezi C++ atat inteleg din posturile tale.
Atunci hai sa facem situri in C++, incolonarea Radu a spus ca php este mort Posted Image

View Postwolfenste, on 28 august 2022 - 10:15, said:

Clasa aia Processor are cu totul alta destinatie nu ar trebui sa o poluezi asa. Metoda processSelect () trebuie sa returneze array nu string nu numele tabelului.

Daca la inceput ai pus o intrebare de incepator, dupa doua zile acum esti guru in Laravel, schimba in anotation sa returneze ce doresti tu array, string etc

Ti-am dat 3 metode prin care sa obtii numele tablei insa topicul tau are alt scop.

Vin-o cu codul sursa sa vedem ce stii si ce nu stii, restul sunt vorbe.

Edited by iulian_1976, 28 August 2022 - 14:49.


#17
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005

View Postradu103, on 28 august 2022 - 08:59, said:

Daca tineti la viitorul profesional si la viitorul planetei renuntati la mizeriile scrise in PHP
https://hackaday.com...mming-language/

Pretul energiei va fi tot mai mare asa ca nu vom ajunge bine cu bitcoin si site-uri php

C-ul te pune la muncă și nu te tine de mână.
Dar nu despre asta ar trebui sa fie topicul.

#18
radu103

radu103

    Guru Member

  • Grup: Senior Members
  • Posts: 12,315
  • Înscris: 15.11.2003

View PostMarianG, on 28 august 2022 - 16:35, said:

C-ul te pune la muncă și nu te tine de mână.
Dar nu despre asta ar trebui sa fie topicul.
Pai modularizarea aia prea multa aia topic-ului este ultima problema, prima problema e x30 consum de energie fata de C.
Se accepta o gherla de genul x2-x3 (Java, C#) dar peste devine bataie de joc
Daca vrem sa fim responsabili cu asta incepem si dupa aia aruncam la gunoi si Laravel pentru gherlele din dotare

Edited by radu103, 28 August 2022 - 18:02.


Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate