O que é o MVC - Model View Controller

Postado por: Tiago Lemos em 10th jul, 2009 | Categoria: ASP.NET, MVC, Microsoft, PHP

Há certo tempo recebi dois e-mails sobre com alguns questionamentos sobre MVC, que hoje em dia tem sido muito falado por todos (principalmente pelo programadores de .NET). O objetivo deste post é tentar esclarecer o que é o Design Patterns (Padrões de Projeto) MVC.

Bom, MVC significa Model, View e Controller. A ideia básica do MVC é de separar a lógica de negócio da apresentação (muito semelhante ao modelo de 3 Camadas. Bom, posso estar enganado e se estiver por favor comentem pois este é o objetivo). Vamos entender o que significa própriamente cada uma da letras.

M (Model)

Esta “camada” representa os dados da aplicação e as regras de negócio do acesso e modificação desses dados. Ela é quem fornece ao controlador a capacidade de acessar as funcionalidades da aplicação(Insert, Update, Delete).

Ultimamente tenho lido alguns forúns (alguns bem antigos por sinal) e percebi uma certa discussão sobre o que deve ficar no Model. Alguns dizem que a regra de negócio deve ficar no Model, mas eu particularmente acho bem mais interessante deixar o Model como sendo a DAL. Uma “camada” onde são tratadas as ações de Insert, Update, Delete e Select.

V (View)

As Views servem apenas para exibir as informações. São elas que renderizam o conteúdo de uma parte particular do modelo e encaminha para o controlador as ações do usuário. A View também acessa os dados do modelo através do controlador (Controller) e determina como esses dados devem ser apresentados.

Bom, comparando ainda com o modelo 3-tier (3 Camadas) essa seria a Interface.

C (Controller)

O controller define o comportamento da aplicação, é ele que interpreta as ações do usuário (View) e as mapeia para chamadas do modelo (Model).

Aqui sim ficaria a regra de negócio do nosso projeto. Grande partes dos post que li, tem colocado o controller como uma “gatilho” que serve apenas para disparar e identificar quais ações devem ser executadas no Model, mas para mim o Controller seria nossa BLL do modelo 3-tier.

Bom, é claro que esse é meu ponto de visto sobre como se pode utilizar este modelo.

Aqui estou apresentando uma imagem baseada em um modelo que realmente não me lembro onde vi. Ela mostra como são realizadas as requisições:

1 - O usuário realiza uma requisição de uma View (página web) ao Controller. Ex: Preenchimento do formulário de cadastro.

2 - O Controller recupera todas as informações da View e solicita uma ação (Insert por exemplo) para o Model. O Model processa a ação (grava em banco de dados) e devolve o resultado deste processamento para o Controller.

3 - O Controller processa o resultado e devolve para View o que ela deve exibir.

4 - A View recebe o que foi processado pelo Controller e exibe o resultado para o usuário. (Enteda a View como a página exibida) Ex: Imaginando um cadastro que foi realizado com sucesso, o retorno pode ser uma Mensagem de Sucesso.

Em resumo o modelo MVC é muito usado em aplicações para  Web, onde a View é a página  HTML, o controller é quem gera os dados dinâmicos para dentro da View (HTML) e o Model é representado pelo manutenção dos dados, ou seja, armazenagem em BD ou outros tipos de arquivos.

Bom, espero que com este post eu possa ter esclarecido um pouco como funciona esse Design Pattern. A idéia é simples mas pode confundir um pouco, mas nada uma boa leitura não ajude.

Em breve tem mais.

Como funciona o arquivo app_offline.htm

Postado por: Tiago Lemos em 29th mai, 2009 | Categoria: ASP.NET, C#, HTML, VB

Bom, muitos devem conhecer esse arquivo, mas tenho que confessar que eu não sabia da existência dessa excelente funcionalidade do ASP.NET 2.0.

Criando um arquivo HTML com o nome de “app_offline.htm” e colocando esse arquivo na raiz de uma aplicação Web, irá forçar um redirect em toda requisição do IIS para esse arquivo. Bom, ai você deve perguntar qual a vantagem disto?

Imagine que você queira colocar um site em manutenção, onde ninguém em hipótese nenhuma poderá acessar qualquer página do site. Como fazer isso? Simples, coloque um arquivo chamado “app_offline.htm” que você não terá problemas.

Pensando um pouco mais pra frente, imagine que você tenha duas aplicações Web distintas (uma seria o Site a outra seria o Sistema Administrativo do site). Imagine agora que o Sistema Administrativo possui uma mensalidade e o “donos” do sistema não efetuaram o pagamento do mês. Colocando este arquivo na raiz do Sistema Administrativo você bloquea o acesso de qualquer usuário a esta área sem afetar o Site.

Bem simples e legal essa funcionalidade.

Espero que tenham gostado desta dica. Em breve tem mais.

Criando um COM+ integrado com SVN: Parte II

Postado por: Tiago Lemos em 2nd abr, 2009 | Categoria: ASP.NET, C#, VB

Finalmente vamos encerrar o post: Criando um COM+ integrado com SVN: Parte I. Primeiro, desculpe a demora em finalizar este post, mas realmente não estava conseguindo um tempo para escrever.

No post Utilizando SVN com C# nós vimos a utilização da classe System.Diagnostics.Process para executar algumas ações do SVN.

Bom, juntando o útil ao agradável, o que nós precisamos fazer agora é criar alguns métodos no nosso COM+ para que ele possa executar determinadas ações do SVN.

Abaixo veja alguns exemplos que podem ser criados:


public bool CriaRepositorio(string CaminhoSVNServer, string CaminhoRepositorio, string repositorio)
{
	try
	{
		Process processo = new Process();
		processo.StartInfo = new ProcessStartInfo(CaminhoSVNServer + "svnadmin.exe", "create "+ CaminhoRepositorio + repositorio);

		processo.Start();
		processo.WaitForExit();

		return true;
	}
	catch (Exception ex)
	{
		EventLog.WriteEntry("SVN - Criação de Repositório", "Erro: " + ex.Message.ToString() +" || "+ ex.Source.ToString());
		return false;
	}
}

public bool CriaPasta(string SVNSever, string CaminhoSVNServer, string pasta, string usuario, string password)
{
	try
	{
		Process processo = new Process();
		processo.StartInfo = new ProcessStartInfo(CaminhoSVNServer+ "svn.exe", "mkdir -m[notepad] --username \""+ usuario +"\" --password \""+ password +"\" " + SVNSever + pasta);
		processo.Start();
		processo.WaitForExit();

		return true;
	}
	catch (Exception ex)
	{
		EventLog.WriteEntry("SVN Webroom - Criação de Pasta", "Erro: " + ex.Message.ToString() + " || " + ex.Source.ToString());
		return false;
	}
}

Agora vocês podem usar a imaginação e criar mais métodos. Assim que todos os métodos forem criados o que precisamos fazer é dar permissões ao COM+ para que o mesmo possa rodar no servidor, com permissões para executar os processos do SVN.

Passo 1

Registre novamente a DLL, para isso digite a seguinte linha de comando do Visual Studio.

//Linha de comando para registrar uma DLL:
//Digite o caminho até a DLL que será registrada
//regsvcs D:\Arquivos de programas\Complus\Complus\bin\Debug\nome_da_dll.dll

Passo 2

Uma vez registrado a DLL, devemos acessar o Painel de Controle -> Ferramentas Administrativas -> Componetes de Serviço. Você irá notar que existe um processo com o mesmo nome da DLL, pois é, este é seu COM+ rodando.

Passo 3

Feito isso, você deve agora setar as seguintes permissões no COM+.

Clique com o botão direito no Serviço criado e em seguida na guia de Segurança. Marque a primeira opção Autorização e em Nível de Segurança marque a segunda opção.

Agora vá na guia Ativação, em Tipo de Ativação marque Aplicativo de servidor e executar aplicativo como Serviço NT.

Clique em OK. Bom, após realizar todos esses passos o seu COM+ já deve estar funcionando. Caso vocês tenham algum problema podem me perguntar.

Espero que tenham gostado desta série.

Em breve tem mais.

ASP.NET MVC 1.0

Postado por: Tiago Lemos em 21st mar, 2009 | Categoria: ASP.NET, C#, JQuery, Linq, MVC, VB

Agora é oficial, saiu a versão final do ASP.NET MVC. Com pouco mais de 20 dias de atraso (estava sendo previsto o lançamento para o final de fevereiro) saiu a versão final do ASP.NET MVC e agora a MSDN possui a documentação. (veja a documentação aqui).

Você pode acompanhar tutorias liberados para Microsoft aqui ou também pode ver alguns exemplos que criei aqui no blog nas categorias MVC, Linq ou JQuery que é a biblioteca javascript oficial do MVC.

Pegue a versão do MVC 1.0 e aproveite este lançamento, que eu particularmente estou gostando.

Espero que vocês tenham gostado desta dica.

JQuery + LINQ = JLinq

Postado por: Tiago Lemos em 27th fev, 2009 | Categoria: ASP.NET, JQuery, Linq

Você já está realizando consultas em LINQ? Acredito que sim. Agora imagine você realizando consultas LINQ no JQuery?

Sim, essa é a proposta do JLinq, permitir que você execute os mesmos comandos do LINQ nas coleções (dados) que estão na memória do JQuery. O JLinq tem algumas das implementações existentes no LINQ que facilitam o trabalho na montagem de consultas no JQuery. Veja o código abaixo:


var results = $.from(data)
    .ignoreCase()
    .startsWith("firstName","m")
    .or("n")
    .isNot("administrator")
    .orderBy("lastName")
    .select();

Essa consulta é idêntica tanto para o LINQ quanto para o JQuery (JLinq). Está interessado? Veja mais exemplos aqui.

Achei muito legal esta iniciativa e espero que vocês tenham gostado desta dica.

Em breve tem mais.

Criando um COM+ integrado com SVN: Parte I

Postado por: Tiago Lemos em 24th fev, 2009 | Categoria: ASP.NET, C#, VB

Vou mostrar em uma série de 2 posts como criar um COM+ para realizar ações do SVN. Há um tempo atrás precisei criar um COM+ que realiza-se as principais ações do SVN, como por exemplo: Criar pastas, repositórios, “commitar” (se é assim que posso falar) e deletar ações, além de outras funções.
Mas antes de começarmos a mexer com o código, vamos entender o que é o SVN.

O que é SVN e pra que serve um SVN

O SVN é um sistema de controle de versão e com esse controle nós podemos gravar o histórico de todos os arquivos. A idéia é simples, manter um controle de backup do seus arquivos, não utilizando o “Ctrl+C” e “Ctrl+V”.
O SVN mantém um versionamento do projeto, podendo garantir a recuperação de versões antigas do mesmo.
Imagine que você criou um projeto e gravou no SVN. Passado um mês você realizou diversas alterações neste projeto, pois o escopo do mesmo foi alterado (o que é normal na nossa área rsrs).
Ok, você acabou o projeto e gravou tudo no SVN. Vamos imaginar agora que se passaram alguns meses e você precise criar agora um projeto idêntico à aquela primeira versão gravada no SVN.
Pronto, ai entra o controle de versão. Basta você recuperar aquela versão e seu projeto já estará pronto.

Criando o COM+

Chega de teoria chata (mas importante) e vamos ao código. A primeira coisa a ser feita é a criação de um projeto com uma classe que neste caso chama: SVN
Adicione a biblioteca System.EnterpriseServices e a linha [Transaction(TransactionOption.Required), JustInTimeActivation()].


using System;
using System.EnterpriseServices;
using System.Configuration;

namespace Integracao
{
    [Transaction(TransactionOption.Required), JustInTimeActivation()]
    public class SVN : ServicedComponent
    {
    }
}

Agora será necessário criar uma chave e registrar a DLL como Service Component. Para isto, execute as seguintes linhas de comando usando os arquivos sn.exe e regsvcs.exe. Você pode executar no prompt de comando.


//Linha de comando para criar uma Chave:
//Digite o caminho da raiz do projeto e o nome da chave a ser criado
//sn -k "C:/Arquivos de programas/ComPlus/Complus/nome_da_chave.snk"

//Linha de comando para registrar uma DLL:
//Digite o caminho até a DLL que será registrada
//regsvcs D:\Arquivos de programas\Complus\Complus\bin\Debug\nome_da_dll.dll

Assim chegamos ao final do primeiro post. Já estamos com o COM+ praticamente pronto e agora só falta criar os métodos para acessarem as ações do SVN e dar as devidas permissões ao COM+, para que o mesmo funcione corretamente.
Em breve irei finalizar essa integração. Espero que tenham gostado.

ASP.NET MVC: Criando um HTMLHelper

Postado por: Tiago Lemos em 15th fev, 2009 | Categoria: ASP.NET, C#, MVC, VB

No novo MVC você tem a capacidade de criar seus elementos HTML personalizados atráves da classe HTMLHelper.
O objetivo é que você possa criar uma estrutura na qual diminua a quantidade de HTML padrão que você irá escrever.
Vamos ver o exemplo abaixo:

Imagine que você queira criar um HTMLHelper que crie este HTML padrão.


<label for="usuario">Usuario:</labe>
<input type="text" id="usuario" value="" />

Para que tenhamos essa funcionalidade teremos que criar a seguinte classe.


namespace Controles {
public static class HtmlHelperBase
{
   public static string LabelTextbox(this HtmlHelper helper, string identificador, string label_texto, string tipo)
     {
          return String.Format("<label for='{0}'>{1}</label><input type='{2}' id='{3}' value='' />", identificador, label_texto, tipo, identificador);
     }
  }
}

Uma vez criada a classe, agora precisamos importar a namespace e utilizar o método criado em uma View. Veja o exemplo abaixo:


<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="Mvc.Views.Home.Index" %>
<%@ Import Namespace="Controles" %>
  <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<%= Html.LabelTextbox("usuario", "Aqui vem o texto", "text") %>

</asp:Content>

Bem simples e muito útil esse “poder” de personalização que temos.
Espero que tenham gostado. Em breve tem mais.

C# para Iniciantes: Comentários

Postado por: Tiago Lemos em 8th fev, 2009 | Categoria: ASP.NET, C#

Esse assunto pode até parecer muito simples, mas é de extrema importância no desenvolvimento de sistemas, sejam eles simples ou complexos, na verdade em sistemas complexos os comentários são fundamentais.

No C# possuímos 2 tipos de comentários:

Em linha - usando duas barras: //

Este tipo de comentário é utilizado quando necessitamos comentar apenas uma linha de código.

Exemplo:


//Aqui vem um comentário de uma linha
string a = "teste";

Bloco - usando barra asterico para iniciar /* e asterisco barra para fechar */

Este tipo de comentário serve para comentar um bloco de código.

Exemplo:


/*
* Aqui vem um comentário de bloco
* com mais texto descritivo
*/
string a = "teste";

Bom, pode até parecer inútil, mas na verdade comentários são extremamente importantes em um detalhamento do sistema, pois, nem sempre será você que irá dar manutenção no sistema.

É importante comentar os pontos chaves criados por você, para que outros programadores possam enteder o que quer dizer aquele trecho de código.

Espero que tenham gostado.

Em breve tem mais.

ASP.NET MVC Release Candidate … Agora falta pouco

Postado por: Tiago Lemos em 1st fev, 2009 | Categoria: ASP.NET, Linq, MVC

Pois é, já está disponível a versão Release Candidate do ASP.NET MVC e em breve (mais precisamente no próximo mês) deve ser liberada a versão 1.0 do MVC.

Bom, aqui você já pode encontrar dicas de como começar a estudar MVC e o LINQ nos posts:

E você pode ver mais sobre LINQ na categoria LINQ clicando aqui.

Espero que vocês gostem.

C# para Iniciantes: Criar e escrever em um arquivo txt

Postado por: Tiago Lemos em 22nd jan, 2009 | Categoria: ASP.NET, C#

Continuando a série C# para iniciantes, irei mostrar neste post como é simples criar e escrever em arquivo txt usando C#.

Primeiro devemos escolher onde iremos criar o arquivo


string nome_arquivo = "C:/Teste/arquivo.txt";

Depois devemos verificamos se o arquivo existe, se não existir então criamos o arquivo


if (!System.IO.File.Exists(nome_arquivo))
  System.IO.File.Create(nome_arquivo).Close();

Agora usamos a classe TextWriter para escrever no arquivo


System.IO.TextWriter arquivo = System.IO.File.AppendText(nome_arquivo);
arquivo.WriteLine("Escrendo no arquivo");

Fechamos o arquivo


arquivo.Close();

Bem, simples né. Espero que tenham gostado.
Em breve tem mais.