Blz,
Aqui tenho feito o seguinte (uso Faces):
tenho uma classe que representa o meu modelo de dados do banco:
public class Pedido {
    private Long idPedido;
    private Cliente cliente;
    private Date dataCompra;
    
    ... 
    
}
Tenho então um repositorio para consultas
public class RepositorioPedidos{
public List<Pedido> listarPedidosDoCliente(Cliente cliente){...}
public Pedido recuperarPedidoPorCodigo(Long codigo){...}
    
}
Por fim tenho a minha camada de negócios
public class ServicoDeOrcamento{
    public efetuarNovoPedido(Cliente cliente,Pedido pedido){
        PedidoRepositorio pr = new PedidoRepositorio();
        List<Pedido> pedidos = pr.listarPedidosDoCliente(cliente);
        if (pedidos.size() ==0) {
            // cliente novo não fez nenhum pedido ir para analise de crédito 
        }
        
        // salva novo pedido do cliente e faz mais alguma coisa
    }
}
Ai no final eu crio uma camada WEB para acessar o serviço:
public class BeanFormOrcamento {
    public fazerPedidoCliente(Long idCliente,Pedido pedido){
        RepositorioCliente rc = new RepositorioCliente();
        Cliente cliente = rc.recuperarClientePorCodigo(idCliente);
        
        ServicoDeOrcamento so = new ServicoDeOrcamento();
        so.efetuarNovoPedido(cliente,pedido);
    }
}
Desta forma basta eu fazer outra VIEW em SWT que toda a minha lógica de negócio foi aproveitada. Não Preciso reescrever a lógica ou adapta-la, basta usar.
Ps. Adapter é um padrão que é usando quando se deseja adaptar sua classe para ser usada por outro objeto. exemplo:
Sua tomada em casa é de 2 pinos, mas o computador é de 3 pinos então usa-se um adaptador para ligar na tomada (beijamin).
O mesmo em Software:
tenho o seguinte problema:
Preciso comparar uma array de bytes com regex. só que regex somente aceita objetos do tipo CharSequence.
    byte[] sca = "helo carlos".getBytes();
    Pattern p = Pattern.compile("^(?i)(helo) .+");
    Matcher m = p.matcher(sca);
    return m.matches();
o código acima vai da erro, mas eu preciso usar array de bytes. o que fazer?
use um adaptador (Adapter) que adapta a array para ser usada como uma CharSequence, veja a interface da charSequence:
public interface CharSequence {
    int length();
    char charAt(int index);
    CharSequence subSequence(int start, int end);
    public String toString();
}
Aqui está o adaptador:
public class CharSequenceByteArray implements CharSequence {
    private byte[] buffer;
    public CharSequenceByteArray(byte[] buffer) {
        this.buffer = buffer;
    }
    public int length() {
        return buffer.length;
    }
    public char charAt(int index) {
        return (char) buffer[index];
    }
    public CharSequence subSequence(int start, int end) {
        return new CharSequenceByteArray(Arrays.copyOfRange(buffer, start, end));
    }
}
agora eu faço assim uso o adaptador:
    byte[] sca = "helo carlos".getBytes();
    Pattern p = Pattern.compile("^(?i)(helo) .+");
    Matcher m = p.matcher(new CharSequenceByteArray(sca));
    return m.matches();
Este código não da erro, porque eu adaptei uma interface em outra.
Isto é o padrão adapter.
att. Carlos