The Factory Esclarecendo a arquitetura utilizada no projeto Piloto Autor: Wabber Filho.
Transcript of The Factory Esclarecendo a arquitetura utilizada no projeto Piloto Autor: Wabber Filho.
The Factory
Esclarecendo a arquitetura utilizada no projeto Piloto
Autor: Wabber Filho
Objetivo
Disseminar o conhecimento prático de desenvolvimento na
fábrica
ResumoComo rodar o sistema ?O que é uma classe básica (Entidade) ?O que é uma classe
RepositorioXxxBDR ?PreparedStatamentPra que serve a interface Repositório ?O que é uma classe Cadastro?
ResumoPor que usar Fachada?O que é um Servlet ?O que freemarker faz ?Como é o nosso Servlet ?Para que servem os Handlers ? Como são os nossos Handlers ?
Como rodar o sistema ? Modificar os parâmetros: arquivo_config e
templatePath do arquivo factprocess/piloto/Projeto/piloto/WEB-INF/web.xml
Isso pode ser feito em qualquer editor de texto
Como rodar o sistema ? Modificar o parâmetro HOME do arquivo
factprocess/piloto/Projeto/conf/piloto.properties Clicar no botão Run Project do JBuilder
O que é uma classe básica? A classe básica representa as principais entidades
de um sistema.package thefactory.piloto.studant;public class Studant { private String name; private String password; public Studant( String name, String password ){ setName( name ); setPassword( password ); } public String getName() { return name; } public void setName( String name ) { this.name = name; }}
O que é uma classe RepositorioXxxBDR ?
É classe responsável por fazer acesso ao SGBD-Relacional
public class RepositoryStudantDB implements RepositoryStudant {
private static final String sqlRemove = "delete from fabrica2_studant where cpf = ?";
public void remove( String cpf ) throws RepositoryException { // Envia comando sql de remover estudante do BD substituindo a “?” pelo “cpf”}
PreparedStatamentUsa-se PreparedStatament para que a
aplicação fique “independente” do SGBD utilizado.
Connection connection; try {// recupera connection, cria e executa o statement connection = TransactionControl.getConnection(); PreparedStatement preStmt = connection.prepareStatement( this. sqlRemove ); preStmt.setString( 1, cpf ); preStmt.executeUpdate(); } catch ( Exception e ) { throw new RepositoryException( e ); }
Pra que serve a interface Repositório ?
Uma interface em Java serve para que possa haver vários tipos de implementação diferente para o mesmo serviço.
RepositorioXx
RepositorioXxBDR RepositorioXxFileRepositorioXxList
O que é uma classe Cadastro?
É uma classe de negócios que contem um Repositório e pode acrescentar lógica de negócios nos métodos
RepositorioXx
CadastroXx
O que é uma classe Cadastro?public class StudantBusiness {
private RepositoryStudant repository;
public StudantBusiness( RepositoryStudant rep ) { this.repository = rep; }
public void remove( String cpf ) throws RepositoryException { if ( ( cpf != null ) && ( cpf.length() == 11 ) ) { repository.remove( cpf ); } else { throw new IllegalArgumentException( "CPF invalid." ); } }}
Por que usar Fachada?O sistema segue o padrão de projeto
“Facade”A fachada serve como ponto único de
acesso ao sistema. Isso possibilita a construção de n GUI (Graphic User Interface)
A Fachada deve implementar o padrão de projeto singleton.
Fachada CadastroXx
Por que usar Fachada?
public class Facade { private static Facade instance; private Facade() { this.studants = new StudantBusiness( new RepositoryStudantDB() ); } public synchronized static Facade getInstance() { if ( instance == null ) { instance = new Facade(); } return instance; }
Por que usar Fachada? public void removeStudant( String cpf ) throws RepositoryException, Exception { Transaction transaction = null; boolean ok = false; try { // criar transaction transaction = TransactionControl.beginTransaction(); studants.remove( cpf ); TransactionControl.commitTransaction( transaction ); ok = true; } finally { if ( !ok ) { TransactionControl.rollBackTransaction( transaction ); } TransactionControl.endTransaction( transaction ); } }
O que é um Servlet ?Servelt é uma classe Java que serve
para atender requisições do usuário através de algum protocolo. No nosso sistema protocolo HTTP
O Servlet gera uma Thread para cada requisição
Servlet HttpServlet Nosso Servlet
O que é um Servlet ?
public class ServletBroker extends HttpServlet {
public void init( ServletConfig servletConfig ) throws ServletException { super.init( servletConfig ); }
public void service( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
// Request é a requisição do usuário // Response é a resposta que o servlet deverá prover }}
O que freemarker faz ?O freemarker possibilita isolar código
HTML de código JavaPara isso o freemarker utiliza Tags e
variáveis na página HTML
<select name="cpf" onLoad="this.focus()"> <list studants as s> <option value="${s.cpf}">${s.cpf} - ${s.name}</option> </list> </select>
O que freemarker faz ?SimpleHash modelRoot = new SimpleHash(); SimpleSequence seq = new SimpleSequence();Iterator iter = facade.getIteratorStudants(); while ( iter.hasNext() ) { Studant item = ( Studant ) iter.next(); SimpleHash hash = new SimpleHash(); hash.put( "cpf", item.getCpf() ); hash.put( "name", item.getName() ); seq.add( hash ); }modelRoot.put( "studants", seq );
Como é o nosso Servlet ?
Vamos abrir o ServletBroker ?
Para que servem os Handlers ?
Handlers são classes que recebem a requisição do usuário (repassada pelo Servlet)
Analisam o request feitoChamam algum método da fachadaPreparam a resposta para o usuário
Para que servem os Handlers ?
Vamos abrir o InsertStudantHandler ?
Referências GUIA-DESEN-DefinicaoArquitetura.doc -
http://cvs.factprocess.codigolivre.org.br/cgi-bin/cvsweb.cgi/~checkout~/fabrica/Desenvolvimento/Templates/GUIA-DESEN-DefinicaoArquitetura.doc?content-type=text/plain&cvsroot=factprocess
Freemarker - http://freemarker.sourceforge.net/