Dúvida idiota :)

49 views
Skip to first unread message

Elton Minetto

unread,
Jan 25, 2013, 7:26:03 AM1/25/13
to PHP Architect
E aí galera, blz?

Estou com uma dúvida existencial :)
O que é melhor em questão de performance e manutenção:

Caso 1:
Namespace Application\Service
Arquivo Application\Service\Pessoa.php com 20 métodos

Caso 2:
Namespace Application\Service\Pessoa
20 arquivos, cada um com um método

São "serviços" que vão ser usados por outros módulos e aplicações, tanto via RPC quanto acessados localmente (com use e new)
Alguma sugestão?



rodrigode...@gmail.com

unread,
Jan 25, 2013, 7:31:19 AM1/25/13
to php-ar...@googlegroups.com
Eu acredito que o carregamento de múltiplos arquivos do filesystem
para memória seja mais prejudicial do que carregar um único arquivo
com mais métodos.
Talvez você encontre mais informações sobre o assunto nos fórums do
http://phalconphp.com/.

Att,
Rodrigo de Lima Vieira
Gerente de Redes
Dpto. de Infraestrutura
Spider Softhouse
Campo Grande - MS
> --
>
>

Daniel Ribeiro Gomes

unread,
Jan 25, 2013, 7:35:01 AM1/25/13
to php-architect
Vamos lá:
  • Se formos pensar em performance, as conclusões vão nos mostrar diferenças tão insignificantes que nem valerá a pena adotá-las.
  • Do ponto de vista de manutenibilidade, o próprio Uncle Bob diz, nos princípios SOLID, que um objeto deve ter uma única responsabilidade. Dessa forma, vale mais a pena ter vários serviços que executam, cada um, operações distintas e únicas.
  • Utilizando essa ideia de responsabilidade única, fica mais fácil testar de forma unitária a sua aplicação e promover o desacoplamento.
Abração!


Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931


--



Felipe Moura

unread,
Jan 25, 2013, 7:36:32 AM1/25/13
to php-ar...@googlegroups.com
Acho que o caso 1, em termos de performance seja melhor, mas em questão de organização e manutenção acredito que separar em arquivos dependendo do contexto fica mais claro e cada objeto com sua responsabilidade.


Em 25 de janeiro de 2013 10:31, rodrigode...@gmail.com <rodrigode...@gmail.com> escreveu:
--





--

Atenciosamente,

Felipe Moura

Desenvolvedor Web
http://about.me/felipewebdf 
twitter: @felipewebdf
talk: felip...@gmail.com
msn: gu...@hotmail.com

(61) 8490-8156

augustowebd

unread,
Jan 25, 2013, 7:45:08 AM1/25/13
to php-ar...@googlegroups.com
não conheço eu teu Uncle Bob,

mas acho, não fiz nenhum benchmark para ter certeza, que o primeiro modo é mais rápido, porém, menos econmico em memória.

uma vez que IO neste caso é "único", ou seja um arquivo, já no segundo caso teremos 20 IOs e isso é mais custoso do que operação em memória.


--
 
 



--
...vão-se os objetos, ficam-se as referências, passa o System.gc () e leva tudo...
PHP5 ZCE::ZEND004231 | $zendPHPCertified->getCandidateById( ZCE::ZEND004231 );
Fale sobre PHP::PHP-Brasília - Comunidade de usuários PHP do DF

Luís Otávio

unread,
Jan 25, 2013, 7:56:50 AM1/25/13
to php-ar...@googlegroups.com
Robert Martin ou Uncle Bob (http://www.objectmentor.com/omTeam/martin_r.html) =P

Como o povo falou, em termos de performance está bem resolvido.
A questão da manutenção é um pouco mais embaixo :P

Na minha visão não dá pra radicalizar e falar que os 20 métodos não podem fazer parte de um único contexto (e nem exagerar dizendo que fazem =p).

Acredito que você esteja tentando montar uma camada de serviçoes para isolar o funcionamento da aplicação e depender apenas das classes contidas nela, dando uma olhada na definição do Service Layer Pattern a gente tem isso: "Defines an application's boundary with a layer of services that establishes a set of available operations and coordinates the application's response in each operation." (http://martinfowler.com/eaaCatalog/serviceLayer.html).

Dessa forma sugiro você dar uma olhada nos métodos que você tem e agrupá-los de acordo com o contexto deles, dando nomes consistentes às classes a que eles pertencem (de forma a resumir tal contexto).

Tipo:
Application\Service\CadastramentoDePessoas.php (4 métodos)
Application\Service\BlablablaPessoa(s).php (5 métodos)
....

Abraçow,

Luís


2013/1/25 augustowebd <augus...@gmail.com>

Domingos Teruel

unread,
Jan 25, 2013, 8:00:03 AM1/25/13
to php-ar...@googlegroups.com
Eu vou mais na linha do Luís, tenho organizado os meus Services desta forma.


2013/1/25 Luís Otávio <lcob...@gmail.com>
--
 
 



--
Mingo
+55 48 9156 7278 (Vivo)
BlackBerry Device (9800 Torch OS 6.0)
Florianópolis
Desenvolvedor

Daniel Ribeiro Gomes

unread,
Jan 25, 2013, 8:01:59 AM1/25/13
to php-architect
Complementando a minha resposta com a ajuda das argumentações do Luís e do Domingos, realmente você pode organizar seus métodos por contexto em serviços específicos.

Procure trabalhar em cima da responsabilidade de cada objeto.


Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931


--
 
 

augustowebd

unread,
Jan 25, 2013, 8:23:55 AM1/25/13
to php-ar...@googlegroups.com
Em termos de performance, para embasar meu achismo (peço desculpas por não usar o pastbin, mas não tenho acesso de onde estou), com o uso de vários requires, mesmo sendo once, o tempo é praticamente o dobro para cada comparação:

RESULTADO CODIGO #1
1      = Did nothing in 0.00031495094299316 seconds
10     = Did nothing in 0.00061702728271484 seconds
100    = Did nothing in 0.0051381587982178 seconds
1000   = Did nothing in 0.047922849655151 seconds
10000  = Did nothing in 0.47959589958191 seconds
100000 = Did nothing in 4.8598599433899 seconds


RESULTADO CODIGO #2
1      = Did nothing in 0.00011610984802246 seconds
10     = Did nothing in 0.00030708312988281 seconds
100    = Did nothing in 0.0025839805603027 seconds
1000   = Did nothing in 0.025318145751953 seconds
10000  = Did nothing in 0.24161100387573 seconds
100000 = Did nothing in 2.4257280826569 seconds



# -- codigo 1
<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();

for ($i = 0; $i < 1; $i++) {
  require_once './lote/CL0.php';
  require_once './lote/CL1.php';
  require_once './lote/CL2.php';
  require_once './lote/CL3.php';
  require_once './lote/CL4.php';
  require_once './lote/CL5.php';
  require_once './lote/CL6.php';
  require_once './lote/CL7.php';
  require_once './lote/CL8.php';
  require_once './lote/CL9.php';
  require_once './lote/CL10.php';
  require_once './lote/CL11.php';
  require_once './lote/CL12.php';
  require_once './lote/CL13.php';
  require_once './lote/CL14.php';
  require_once './lote/CL15.php';
  require_once './lote/CL16.php';
  require_once './lote/CL17.php';
  require_once './lote/CL18.php';
  require_once './lote/CL19.php';

  $instance0 = new CL0;
  $instance1 = new CL1;
  $instance2 = new CL2;
  $instance3 = new CL3;
  $instance4 = new CL4;
  $instance5 = new CL5;
  $instance6 = new CL6;
  $instance7 = new CL7;
  $instance8 = new CL8;
  $instance9 = new CL9;
  $instance10 = new CL10;
  $instance11 = new CL11;
  $instance12 = new CL12;
  $instance13 = new CL13;
  $instance14 = new CL14;
  $instance15 = new CL15;
  $instance16 = new CL16;
  $instance17 = new CL17;
  $instance18 = new CL18;
  $instance19 = new CL19;

  for ($j = 0; $j < 20; $j++)  {
      $instance = 'instance' . $j;
      //echo $$instance; die;
      $$instance->m0();
  }

}

$time_end = microtime_float();
$time = $time_end - $time_start;
echo "Did nothing in $time seconds\n";



código #código #2
<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}


$time_start = microtime_float();


for ($i = 0; $i < 100000; $i++) {

  require_once './benchmark/CL1.php';
  $instance = new CL1;

  for ($j = 0; $j < 20; $j++)  {
      $method = 'm' . $j;
      $instance->$method();
  }

}

$time_end = microtime_float();
$time = $time_end - $time_start;
echo "Did nothing in $time seconds\n";
2

<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
for ($i = 0; $i < 100000; $i++) {
  require_once './benchmark/CL1.php';
  $instance = new CL1;

  for ($j = 0; $j < 20; $j++)  {
      $method = 'm' . $j;
      $instance->$method();
  }
}

$time_end = microtime_float();
$time = $time_end - $time_start;
echo "Did nothing in $time seconds\n";


Elton Minetto

unread,
Jan 25, 2013, 11:47:03 AM1/25/13
to php-ar...@googlegroups.com
Valeu pelas ótimas respostas galera
Ajudaram bastante
até+
Reply all
Reply to author
Forward
0 new messages