Emílio
- Post date: 07 Junho 2011
- Outros
Bem amigos! Essa é uma verdade universal do ensino, seja no colégio ou na facu.

Fonte: failblog.com.br
- Post date: 03 Junho 2011
- Dicas

É isso ae pessoal! O @fibodev vai sortear um livro TDD - Desenvolvimento Guiado por Testes, do Kent Beck.

Não perca tempo! Acesse o link da promoção, clique em participar. Dai é torcer para ganhar.
Sorteio dia 01/07/2011
Saiba mais no site do FiboDev
- Post date: 02 Junho 2011
- Outros
Olá caros leitores.
Alguns dias atrás estava procurando como fazer uma integração do zend framework com twitter. Estava com uma certa dúvidas, pois muitos sites que vi faziam requisições REST e passavam uma url de callback.
No meu caso não precisava fazer isso, era só autenticar e poder obter a timeline, enviar um novo tweet.
Pesquisando por algum tempo, achei partes da solução que desejava. Neste post vou mostrar como fazer um cliente para twitter usando o Zend Framework. Este cliente vai poder obtera timeline do usuário, enviar tweets e fazer busca por algum termo. Não fiz páginação apesar da api do Zend permitir isso. Para mais detalhes veja a API de Twitter que a Zend disponibiliza.
- Post date: 27 Maio 2011
- Outros
Ola caros leitores! Depois de muito tempo(devido a correria) estou postando a segunda parte do "Criando uma pequena aplicacao usando nhibernate".
Na segunda parte fiz uma pequena aplicação em windows form, o qual usa a arquitetura definida na parte 1. Fiz a aplicação com um basico de MVC,para assim separar as responsabilidade de cada objeto. Nesse post não vou colocar o código do windows form, somente as interfaces. Ao finaldesta página você pode baixar o código-fonte da aplicação.
- Post date: 13 Dezembro 2010
- Outros
Este tutorial será dividido em duas partes.
- Criação do projeto, definição dos objetos de domínio e seus repositórios, instalação e configuração do NHibernate.
- Criação da aplicação em usando Windows Forms e integrando com a parte de persistência.
Esse tutorial é baseado no artigo Your first NHibernate based application
NHibernate
O NHibernate é um framework open source, desenvolvido usando .NET framework, baseado no Hibernate do Java, que possibilita o mapeamento de objetos-relacionais(ORM).

Visão geral em alto nível de como trabalha o NHibernate
Basicamente tem-se a aplicação com seus objetos persistentes que são usados pelo NHibernate, mapeados por XML(ou Atributtes) onde relaciona-se a classe e seus atributos com a tabela e suas colunas. O NHibernate precisa de alguns arquivos de configuração para funcionar e conectar no banco de dados.
Mais o que é ORM?
É uma técnica de desenvolvimento para fazer uma abstração do banco de dados usando orientação a objetos, onde as tabelas do banco são representadas por classes.
É uma técnica de desenvolvimento para fazer uma abstração do banco de dados usando orientação a objetos, onde as tabelas do banco são representadas por classes.
Usando o ORM caí muito à necessidade de escrever SQL para inserir, remover, atualizar ou consultar dados no banco, pois geralmente essas SQL serão geradas automaticamente.
Obviamente não vai excluir por completo a necessidade de escrever código SQL(Query), pois existem casos onde o ORM não consegue atender.
Nesses casos você tem que escrever a query. Isso geralmente acontece quando é uma query é bem customizada.
A forma como o mapeamento é feito varia da ferramenta(ou framework) que estiver usando. No Hibernate em java você pode fazer o mapeamento tanto usando XML, quanto usando as Anotações. No NHibernate o mapeamento pode ser feito também com XML ou usando Attributes.
Para informações mais afundo sobre ORM Visite esse link(en)
Sobre a Aplicação
Nossa aplicação será bem simples, usando um banco de dados local (SQL Server Compact Edition). Uma aplicação Windows form que vai listar, inserir, editar e excluir dados de uma pessoa que pertencem a uma categoria. Categoria pode possuir uma ou várias pessoas.

Representação UML das classes da aplicação

DER do banco da aplicação
Um pequeno detalhe, é que no nosso mapeamento o ID não vai ser um int vai ser um Guide. Isso é só uma representação de como vai ficar as colunas nas tabelas.
Criei um projeto “PrimeraAplicacaoNHibernate”

Criando o projeto da aplicação
Criando Estrutura de Pastas
Crie as pasta de acordo com a figura abaixo:

Estrutura de pasta da aplicação
Descrição dos diretórios:
- Dados – Diretório que conterá banco de dados
- Dominio – Diretório que conterá classes de domínio (entidades persistentes)
- Lib – Diretório onde ficara as .dlls
- Mapeamentos – Diretório que conterá os arquivos de mapeamentos .hbm.xml
- Repositório – Diretório que conterá as classes para fazer a persistência.
Criando Banco de Dados Local
Crie um banco de dados local dentro da pasta "Dados". Crie um banco chamado “BancoDaAplicacao.sdf”

Criando o banco da aplicação
Baixando e Instalando NHibernate
Baixe o NHibernate nesse link
Copiando dlls
Descompacte o arquivo e copie para a pasta Lib as bibliotecas que aparecem figura abaixo:

Dlls que deve estar na pasta Lib da aplicação
A dll System.Data.SqlServerCe.dll pode ser encontrada em “Arquivos de Programa(Program Files)\ Microsoft SQL Server Compact Edition\v3.5\Desktop”. As outras serão encontradas “Microsoft SQL Server Compact Edition\v3.5”.
Adicione referencias as dlls System.Data.SqlServerCe.dll , NHibernate.dll, LinFu.DynamicProxy.dll e NHibernate.ByteCode.LinFu.dll. Nas propriedades de cada no campo “Copy Local” coloque “True”.
No Windows 7 x64 tive problemas com a System.Data.SqlServerCe.dll. Quando chega na parte "configuration.BuildSessionFactory()", uma exceção era lançada com a mensagem "Could not create the driver from NHibernate.Driver.SqlServerCeDriver". Para resolver isso tive que instalar uma atualização do SQL Server Compact. Link da Atualização.
Configurando com hibernate.cfg.xml
O NHibernate precisa de um arquivo de configuração chamado hibernate.cfg.xml que conterá as configurações do tipo: mostrar SQL; string de conexão. Crie esse arquivo na raiz da aplicação. Nas propriedades do hibernate.cfg.xml a propriedade "Copy to Output” tem que estar “Copy always”

Criação do hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property> <property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property> <property name="connection.connection_string">Data Source=Dados\BancoDeDadosAplicacao.sdf</property> <property name="show_sql">false</property> <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property> </session-factory> </hibernate-configuration>
Os parâmetros “connection.provider”, “dialect”, “connection.driver_class”, “connection.connection_string”, são referentes a conexão. O parâmetro connection.connection_string diz onde conectar(no nosso caso é um banco local, então informa-se o caminho do banco). O parâmetro show_sql informa se as querys geradas devem ser mostradas.
Se você tiver muitos problemas com o banco local. Faça download e instale o SQL Server Express e o SQL Server Management.
Link do Microsoft SQL Server 2005 Express Edition
Link do Microsoft SQL Server Management Studio Express
Se você está usando Windows 7 provavelmente vai ter que instalar uma atualização do SQL Server 2005
Link da atualização Microsoft SQL Server 2005 Express Edition Service Pack 3
Não vou detalhar como instalar o SQL Server. Depois de instalar e configurar crie uma nova base de dados "BancoDeDadosAplicacao".
Usando o SQL Server o hibernate.cfg.xml deve sofre algumas modificações.
<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> <property name="connection.connection_string"> Data Source=.\SQLEXPRESS; Integrated Security=True; Initial catalog=BancoDeDadosAplicacao; User Id=sa;Password=sa </property> <property name="show_sql">false</property> <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property> </session-factory> </hibernate-configuration>
Esse usuário "sa" já vem por padrão no SQL Server. "Initial catalog" informa o nome da base de dados.
Criando objetos de domínio e seus mapeamentos
Depois de ter copiado as dlls e escrito os arquivos de configuração, vamos criar os objetos de domínio e seus mapeamentos. As classes de domínio serão criadas na pasta “Dominio” os arquivos .hbm.xml serão criados na pasta “Mapeamentos”.
using System; namespace PrimeraAplicacaoNHibernate.Dominio { public class Categoria { public virtual Guid Id { get; set; } public virtual string Descricao { get; set; } } }
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PrimeraAplicacaoNHibernate" namespace="PrimeraAplicacaoNHibernate.Dominio"> <class name="Categoria" table="categoria"> <id name="Id"> <generator class="guid" /> </id> <property name="Descricao" /> </class> </hibernate-mapping>
Agora vamos criar para pessoa.
using System; namespace PrimeraAplicacaoNHibernate.Dominio { public class Pessoa { public virtual Guid Id { get; set; } public virtual string Nome { get; set; } public virtual string SobreNome { get; set; } public virtual bool Sexo { get; set; } public virtual DateTime DataNascimento { get; set; } public virtual Categoria Categoria { get; set; } } }
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PrimeraAplicacaoNHibernate" namespace="PrimeraAplicacaoNHibernate.Dominio"> <class name="Pessoa" table="pessoa"> <id name="Id"> <generator class="guid" /> </id> <property name="Nome" /> <property name="SobreNome" /> <property name="Sexo" /> <property name="DataNascimento" /> <many-to-one name="Categoria" class="PrimeraAplicacaoNHibernate.Dominio.Categoria" column="categoria_id" cascade="none"/> </class> </hibernate-mapping>
Observe que no mapeamento de Pessoa tem um “many-to-one” que indica que categoria pode ter várias pessoas e pessoa pertence a uma categoria. O many-to-one que representa a relação da pessoa com a categoria, lá na tabela pessoa tem uma foreign key de categoria_id que referencia a tabela categoria. Na classe pessoa tem-se uma propriedade que é do tipo Categoria.
Um detalhe é a palavra “virtual” antes do tipo de retorno, essa palavra é obrigatória para propriedades persistentes. Colocar o método virtual é permitir que ele seja sobrescrito.
Gerando as tabelas
Vamos fazer um pequeno teste de unidade que gera as tabelas no banco local. Mas antes de escrever o teste, adicione nas referencias as dlls do nunit. "nunit.core.dll" e "nunit.framework.dll"
using NHibernate.Cfg; using NHibernate.Tool.hbm2ddl; using NUnit.Framework; using PrimeraAplicacaoNHibernate.Dominio; namespace PrimeraAplicacaoNHibernate { [TestFixture] public class TesteParaGerarTabelas { [Test] public void testeIniciacao() { var cfg = new Configuration(); cfg.Configure(); cfg.AddAssembly(typeof(Categoria).Assembly); new SchemaExport(cfg).Execute(false, true, false); } } }
Antes de iniciar a aplicação rode o teste (só uma vez), para criar as tabelas. Depois de rodar não precisa mais rodar de novo (só se criar um novo objeto de domínio e seu mapeamento).