Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

montano

Modulo: MVC - Diretorios

Recommended Posts

boa tarde,

 

Gente MVC, duvida cruel, estava lendo um tutorial sobre MVC e era o seguinte, dizia assim:

 

diretorios:

 

Modulo

-MODEL

BEAN

ACTION

DAO

-CONTROLLER

-VIEW

 

Oque seria esse modulo? No caso se eu tiver cadastramento de cliente, produto e etc. cada um deles seria um modulo?

ou dentro de um modulo eu crio um model para cada e etc.

 

Dificil achar conteudo completo a respeito, gostaria que se alguem ja leu algum livro de MVC me aconselha-se,

eu estou querendo compra um : "Head first, design patterns", para design patterns , alguem sabe se ele aborda MVC?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

até onde EU sei, MCV só engloba o MODEL - CONTROLLER - VIEW, o DAO e o BEAN já são outras abordagens de engenharia de software...

Modulo nunca ouvi falar, mais disconfio que seja isso mesmo que você tem em mente...

 

Acho que o livro vá explicar mais na frente, mais quero frizar já que DAO E BEAN n tem nada haver com MCV em si!

 

você usa o DAO no CONTROLLER para acessar o banco, ai sim ...

 

deu pra entender ou enrolei muito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

até onde EU sei, MCV só engloba o MODEL - CONTROLLER - VIEW

 

Essa é uma visão bem simplista.

 

Acho que o livro vá explicar mais na frente, mais quero frizar já que DAO E BEAN n tem nada haver com MCV em si!

 

A camada de negócios irá precisar acessar um banco de dados em algum momento, existem várias formas de se acessar esses dados e DAO é uma delas.

 

você usa o DAO no CONTROLLER para acessar o banco, ai sim ...

 

A camada de controle não acessa dados, isso é atribuição da model.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ih foi mal, desculpe o erro eh o habito do DJANGO :D

toda vida eu confundo isso...

 

 

agora não entendi a afirmação:

até onde EU sei, MCV só engloba o MODEL - CONTROLLER - VIEW....

...Essa é uma visão bem simplista.

o que mais seria o MCV?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vou postar meu codigo, e voce dizem se esta longe de ser um MVC.

 

-MODEL

ACTION

<?php
class Listar
{
    public function execute($modulo)
    {
        switch ($modulo)
        {
            case ('Uf'):
                $listaDAO = new UfDao();
                $lista = $listaDAO->listar();
                break;

            case ('Cidade'):
                $listaDAO = new CidadeDao();
                $lista = $listaDAO->listar();
                break;
        }

        $_REQUEST['lista'] = $lista;  

    }

}
class Deletar
{
    public function execute($modulo)
    {
        switch ($modulo)
        {
            case ('Uf'):
                $deletaDAO = new UfDao();
                $result = $deletaDAO->deletar();
                break;

            case ('Cidade'):
                $deletaDAO = new CidadeDao();
                $result = $deletaDAO->deletar();
                break;
        }
    }

}
class Cadastrar
{
    public function execute($modulo)
    {
        switch ($modulo)
        {
            case ('Uf'):
                $cadastraDAO = new UfDao();
                $result = $cadastraDAO->cadastrar();
                break;

            case ('Cidade'):
                $cadastraDAO = new CidadeDao();
                $result = $cadastraDAO->cadastrar();
                break;
        }
    }

}
?>

DAO

<?php
class UfDao
{
    static $tabela = 'tb_ufs';
    static $ponteiro = 0;
    private $servidor;
    private $usuario;
    private $senha;
    private $bd;

    function __construct()
    {
        include ('config/config.php');
        $this->servidor = $servidor;
        $this->usuario = $usuario;
        $this->senha = $senha;
        $this->bd = $bd;
    }

    public function listar()
    {
        $dao = new Execute($this->servidor, $this->usuario, $this->senha, $this->bd);
        $result = $dao->select(self::$tabela, '*', 'ORDER BY uf ASC');

        $lista = array();

        while ($row = mysqli_fetch_assoc($result))
        {
            $lista[self::$ponteiro] = new Uf();
            $lista[self::$ponteiro]->setUf($row['uf']);
            $lista[self::$ponteiro]->setCod($row['cod']);
            self::$ponteiro++;
        }
        $dao->close();
        return $lista;
    }

    public function cadastrar()
    {
        $dao = new Execute($this->servidor, $this->usuario, $this->senha, $this->bd);
        return $dao->insert(self::$tabela, 'uf', "'" . $_GET['uf'] . "'", '');
        $dao->close();
    }

    public function deletar()
    {
        $dao = new Execute($this->servidor, $this->usuario, $this->senha, $this->bd);
        return $dao->delete(self::$tabela, $_GET['cod'], '');
        $dao->close();
    }
}
?>

BEAN

 

<?php
class Uf
{
    private $uf;
    private $cod;
    
    function setCod($cod)
    {
        $this->cod = $cod;
    }

    function setUf($uf)
    {
        $this->uf = $uf;
    }

    function getCod()
    {
        return $this->cod;
    }

    function getUf()
    {
        return $this->uf;
    }
}
?>

AGORA O CONTROLLER

 

<?php

include_once ('includes/autoload.php');

class Controller
{
    private $modulo;
    private $acao;

    function __construct()
    {
        $this->modulo = $_GET['modulo'];
        $this->acao = $_GET['acao'];
    }

    function action()
    {
        if (!empty($this->acao))
        {
            //BEAN
            require_once ('model/bean/' . $this->modulo . '.php');
            foreach ($this->acao as $acao)
            {
                $acao = new $acao;
                $acao->execute($this->modulo);
            }
        }
    }
    
    function select($campo)
    {
   		$select = new SelectAction();
   		$select->execute($campo);
    }
    

    function view()
    {
        if (!empty($this->acao))
        {
            $listar = array_search('Listar', $this->acao);
            if (isset($listar))
            {
                //MODULO REGISTROS
                require_once ("view/" . $this->modulo . "Registros.php");
            }
        } else
        {
            //MODULO PAGINA
            require_once ("view/" . $this->modulo . ".php");
        }
    }
    

}
if (!empty($_GET['modulo']))
{
    $controller = new Controller();
    $controller->action();
    $controller->view();
}
if (!empty($_GET['select']))
{
	$selects = new Controller();
	foreach ($_GET['select'] as $campo){
	$selects->select($campo);
	}
}
?>

 

OS VIEW

 

<?php

include_once ('head.php');

?>
<body>

<div id='form'>
	  <form>
      <p><b>UF: </b><input type='text' name = 'uf' value = ''/>
      <input type='button' name = 'button' onclick="insert(this.form)" value = 'Cadastrar'/></p>
      </form>
</div>

<div id="Registros"></div>

</body>
<?php

include_once ('foot.php');

?>

viewRegistros
<?php

if (!empty($_REQUEST['lista']))
{

    echo "<div id='listar'>";
    echo '<table>';
    echo '<tr><td></td><td><b>UF</b></td></tr>';
    foreach ($_REQUEST['lista'] as $row)
    {
        echo "<form>";
        echo '<tr>';
        echo "<input type = 'hidden' name = 'cod' value = '" . $row->getCod() . "'>";
        echo "<td><input type='button' name = 'button' onclick='del(this.form)' value = 'Deletar'/></td>";
        echo '<td>' . $row->getUf() . '</td>';
        echo '</tr>';
        echo "</form>";
    }
    echo '</table>';
    echo '</div>';
}

?>

AJAX

function insert (form) {
    var uf = form.uf.value;
    cadastrar(uf);
}
function del (form) {
    var cod = form.cod.value;
    deletar(cod);
}


setInterval("registros()", 200);

var xmlhttp;

function registros()
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  }
var url="index.php";
url=url+"?modulo=Uf";
url=url+"&acao[]=Listar";
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}


function cadastrar(uf)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  }
var url="index.php";
url=url+"?modulo=Uf";
url=url+"&uf="+uf;
url=url+"&acao[]=Cadastrar";
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function deletar(cod)
{
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Browser does not support HTTP Request");
  return;
  }
var url="index.php";
url=url+"?modulo=Uf";
url=url+"&cod="+cod;
url=url+"&acao[]=Deletar";
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}



function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById("Registros").innerHTML=xmlhttp.responseText;
}
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}

INCLUDES EXECUTAR

<?php
class Execute{
    private $link;
    private $errMsg;

    public function __construct($host, $user, $pass, $dbname)
    {
        $this->link = new mysqli($host, $user, $pass, $dbname);

        if (mysqli_connect_errno())
        {
            $this->errMsg = "Erro na Conexão:" . mysqli_connect_error();
            return false;
        }
    }
    
    function execute($query)
    {

        if ($result = $this->link->query($query))
            return $result;
        else
            $this->errMsg = "Erro ao executar:" . mysqli_error();
        return false;
    }   
    
    function close(){
    	mysqli_close($this->link);
    }
}

?>

 

Ta ai uma parte da aplicação, deicho disponivel para quem quizer usar, tem exemplo de um AJAX ( nao sei se esta correto, mas exta funcionando ).

 

Obrigado pela atenção, espero que ajude alguem tambem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

quase todos os frameworks usam mvc, você pode usa-los pra entender o conceito mvc, o tuto do hinom eh um bom, embora haja variacoes por ae....agora, o tuto dele nao usa, ensina a criar....e com o tempo, se você usar sempre a sua estrtura mvc, e com o tempo ir acrescentando mais funcionalidades nele q nao seja so banco de dados, ele ira se tornar um framework...assim como eu fiz com o meu....

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom, no seu topico você utiliza um framework?Estou a procura dos conceitos MVC, sem ajuda de frameworks.

no tópico do tutorial estou tentando transmitir conceitos simples do emprego de MVC em PHP.

 

não é um framework.

 

inclusive não utiliza nenhum conceito OO propriamente dito.

 

estou tentando transmitir da forma mais simples possível removendo conceitos complexos para que os iniciantes entendam o MVC sobre o PHP.

 

resolvi retirar conceitos OO, pois existem diversos patterns e cada um pode aplicar o pattern que julgar necessário.

 

esse tutorial estou retirando de uma apostila que desenvolvi em 2005 quando ministrei cursos avançados de PHP no japao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom,

 

Para uma aplicação PHP de medio para grande porte, você aconselha que tipo de design patterns?

 

Sobre o MVC, a minha pergunta inicial, eu devo criar diretorios diferentes para relatorio, cadastros, estatisticas?

ou posso por tudo no mesmo diretorio?

 

MODEL: Existe esse conceito de DAO, BEAN, ACTION no model?

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não me esforcei muito para entender mas pelo pouco que vi não entendi muito não. Devo ser muito iniciante então... :)

Programo PHP a um ano...

Use Cake ou outro framework para aprender o MVC.

Valeu gente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao vejo motivo para aprender algum framework, se nao for em caso de uma grande empresa, com muita demanda.

Oque adianta saber framework e nao saber o conceito que o mesmo usa, pretendo um dia fazer meu proprio framework que supra as minhas necessidades, ou as necessidades da minha empresa.

 

Uma vez eu li um verso em um perfil de algum de nossos colegas aqui no forum que dizia assim: "Programador Analfabeto", para mim programar com um framework sem entender da essência é sinimo de Analfabetismo.

 

Gostaria de saber de algum livro, de autor conceituado sobre MVC + PHP, alguem ja leu e recomenda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sobre os patterns, isso depende da escolha de cada um.

indenpendente do tamanho de um projeto.

 

num mesmo projeto, você pode mesclar mais de um pattern. obviamente desde que seja muito bem organizado e documentado.

 

 

quanto aos diretórios,

 

os modelos devem ficar obviamente dentro da pasta MODEL

 

por questões de organização, recomenda-se criação de subfolders

 

exemplo, vamos supor que existem 2 módulos

 

. "clientes"

. "produtos"

 

MODEL/
     CUSTOMERS/
              list.php
              search.php
              add.php
              edit.php
     ITEMS/
              list.php
              search.php
              add.php
              edit.php

 

outro modo usando ACTION

 

MODEL/
     CUSTOMERS/
              list.php
              search.php
              add.php
              edit.php
              DO/
                  search.php
                  add.php
                  edit.php
     ITEMS/
              list.php
              search.php
              add.php
              edit.php
              DO/
                  search.php
                  add.php
                  edit.php

 

o subfolder "DO/" é uma pasta onde ficam as ações "ACTIONs"

 

entendeu +- ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não digo para você simplesmente utilizar um framework. Você deve utiliza-lo e aprender como ele faz as coisas. Utilizar sem entender realmente é analfabetismo. Frameworks resolvem problemas comuns de forma inteligente. Eles utilizam padrões de projetos (como o MVC) e organizam a estrutura / código de uma forma inteligente. Porque não estudar como estes problemas foram resolvidos para depois implementa-los ?

 

Gosto muito do livro do PHP Programando com Orientação a Objetos, do Pablo Dall'Oglio.

 

Um abraço, tudo de bom!

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom,

 

eu to fazendo assim, ve se eu entendi

 

-app
    -model
       -action
           insert
           delete
           update
           select
       -dao
           cidade
           produto
       -bean
           cidade
           produto
    -template
        cidade
        produto
controller.php
-public
     -css
     -js
     index.php   

No meu entendimento o Action chama o DAO que vai interagir com o BEAN(que encapsula as propriedades)

Como as action sao semelhantes para todos tipos de cadastros eu uso uma entrada para saber qual DAO chamar.

 

Nao sei se eu estou mesclando conceitos que voce me passou com outros que li, sei que nao consigo firmar em um conceito, é a 3 vez que vou remodelar meus diretorios e o modo de fazer meu sistema, e o pior eu nao posso parar para estudar pq sou o unico na empresa que presta suporte.

 

Não digo para você simplesmente utilizar um framework. Você deve utiliza-lo e aprender como ele faz as coisas. Utilizar sem entender realmente é analfabetismo. Frameworks resolvem problemas comuns de forma inteligente. Eles utilizam padrões de projetos (como o MVC) e organizam a estrutura / código de uma forma inteligente. Porque não estudar como estes problemas foram resolvidos para depois implementa-los ?

 

Gosto muito do livro do PHP Programando com Orientação a Objetos, do Pablo Dall'Oglio.

 

Um abraço, tudo de bom!

 

valeu prove, vou ler esse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o prove disse a mesma coisa q eu ali emcima no meu topico, alias eu li o livro q ele indicou, nao me separo dele, e ainda consegui criar meu proprio framework....

agora você pode fazer um trabalho paralelo, ao passo q estuda mvc, pode estudar um framework desse, pois quando for precisar e nao conhecer nenhum perdera tempo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom,

 

eu to fazendo assim, ve se eu entendi

está no caminho certo

 

eu tinha entendido que você estava jogando as pastas fora do MODEL na raiz do projeto, assim:

 

TEMPLATE/
MODEL/
DAO/
ACTION/

 

faça como igor, crie o seu p´roprio fw.

 

mas não deixe de estudar outros frameworks, principalmente os populares, zend, cake, symphony

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.