The Factory
Esclarecendo a arquitetura
utilizada no projeto Piloto
Autor: Wabber Filho
Objetivo
Disseminar o conhecimento
prático de desenvolvimento na
fábrica
Resumo
 Como
rodar o sistema ?
 O que é uma classe básica (Entidade) ?
 O que é uma classe
RepositorioXxxBDR ?
 PreparedStatament
 Pra que serve a interface Repositório ?
 O que é uma classe Cadastro?
Resumo
 Por
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”
}
PreparedStatament
 Usa-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
RepositorioXxList
RepositorioXxFile
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
CadastroXx
RepositorioXx
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 Java
 Para 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 feito
 Chamam algum método da fachada
 Preparam 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/cgibin/cvsweb.cgi/~checkout~/fabrica/Desenvolv
imento/Templates/GUIA-DESENDefinicaoArquitetura.doc?contenttype=text/plain&cvsroot=factprocess
 Freemarker -
http://freemarker.sourceforge.net/
Download

The Factory Esclarecendo a arquitetura utilizada no projeto Piloto