Arquitetura do BIS: mudanças entre as edições

De BIS Wiki
Ir para navegação Ir para pesquisar
Sem resumo de edição
Linha 1: Linha 1:
O BIS (ou BISERP) é um sistema focado em atender de forma ampla as necessidades de uma empresa. Com esse objetivo a arquitetura do BIS precisa ter uma organização que permita escalabilidade a medida que sua abrangência se torna mais ampla, o desenvolvimento e organização do código não devem ser comprometidas. Com isso em mente o BIS foi dividido seguindo principalmente 2 'patterns': Modularidade e Camadas.
O BIS (ou BISERP) é um sistema focado em atender de forma ampla as necessidades de uma empresa. Com esse objetivo a arquitetura do BIS precisa ter uma organização que permita escalabilidade a medida que sua abrangência se torna mais ampla, o desenvolvimento e organização do código não devem ser comprometidas.


Para entender de maneira mais fácil, a princípio imagine o BIS como sendo uma 'coisa' única:
'''Para entender a arquitetura é imprescindível algum conhecimento básico em J2EE'''




[[File:ArquiteturaBIS_1.jpg|center]]
= Camadas =




== Modularidade ==
O BIS é montado em cima de três camadas 'básicas' de arquitetura:


A primeira divisão a entender é quanto a modularidade. O pattern de modularidade define que o sistema deve ter o código dividido em 'blocos' para que permitam: sua reutilização, a centralização do código facilitando a manutenção, tempo e praticidade de desenvolvimento. A modularidade é aplicada no projeto em diferentes níveis. O primeiro nível a se entender é a separação do BIS é por suas funcionalidades. Essa primeira divisão compõe o [[BISKernel]] e o [[BISPlugin]].
[[File:ArquiteturaCamadas_1.jpg|center]]


* '''Camada de Persistência''' - é a responsável por 'guardar' os objetos no banco de dados. É a única parte do sistema que "conhece" o banco de dados. Sabe como guardar e recuperar os objetos solicitados pela camada de lógica.
* '''Camada de Lógica''' - é a responsável por armazenar a lógica do sistema. Aqui encontram-se as rotinas que validam e processam os dados do sistema.
* '''Camada de Apresentação''' - é a camada onde estão configuradas as interfaces entre o sistema e o usuário. Nesta camada temos apenas a programação da própria interface (botões, listas, combos, cores, etc.) Embora seja possível ter alguma validação para agilizar e impedir o usuário de entrar dados inválidos, TODAS AS VALIDAÇÕES devem constar na camada de lógica.


[[File:ArquiteturaBIS_BISCore_Plugins.jpg|center]]


= Modularidade =


Essa divisão permite que concentremos no [[BISKernel]] os códigos que são usados por toda a aplicação, e serve de base para o desenvolvimento dos [[BISPlugin]] que oferecem funcionalidades distintas para o BISERP. Cada Plugin pode ser colocado ou tirado da aplicação para incluir ou não a funcionalidades que aquele Plugin implementa, devendo-se apenas observar as dependências entre Plugins na documentação de cada Plugin.


O principal [[BISPlugin]] em desenvolvimento atualmente é o [[BISModules]].
O BIS apresenta uma organização interna de módulos. O Módulo nada mais é do que uma parte do sistema responsável por cuidar de algum assunto específico da necessidade da empresa. Por exemplo:
* '''Módulo de Items''' - Módulo responsável por cadastrar e gerencias os itens do sistema. Itens são os produtos vendidos ou comprados, serviços prestados ou recebidos, material comprado para consumo ou ativo da empresa, e assim por diante.
* '''Módulo de Fluxo de Caixa''' - Módulo responsável por gerenciar a parte financeira da empresa. Contas a pagar e de receber, caixas e orçamentos locais ou bancários, etc.
* '''Módulo de Vendas/PDV''' - Módulo que permite a venda em checkouts, emissão de cupons SAT/NFCe, etc..


== Camadas ==
Apesar dessa divisão em módulos, o sistema não permite o destacamento dos seus módulos (como plugins). A separação de módulos é feita em relação aos 'packages' do java, mas todo o código, ou seja, todos os módulos andam juntos e estão presentes.


O desenvolvimento por camadas, permite que o sistema seja dividido conceitualmente. O patter define que deve-se separar o código de acordo com sua finalidade. No BIS usamos praticamente 3 camadas de separação: persistencia, lógica e apresentação.


{{nota|Habilitação do Módulo|Apesar de todo o código estar presente (o que evita chegar a presença das classes durante a programação), casa módulo pode ser 'vendido' separadamente para a empresa. O que significa dizer que o usuário pode não ter acesso à algum módulo.


[[File:ArquiteturaBIS_Layers.jpg|center]]
Assim ao se implementar código em que um módulo gere, manipule ou dependa de dados de outro módulo é necessário considerar se o outro módulo está ou não presente para determinada empresa.}}




As camadas tem a seguinte função:
= Serviços do BIS =
* <b>persistência</b> - Camada responsável por ter o código usado para salvar os dados recebidos. Nada além disso! Não testa se os dados são válidos, não faz formatações nem conversões além do que for necessário para salvar/persistir os dados.
* <b>lógica</b> - muitas vezes chamada de CRUD é onde toda a lógica do programa é colocada. Entende-se por lógica do programa o código que processa e 'cumpre' o que fora definido como requisitos do sistema. Por exemplo as validações, os cálculos, processamentos, manipulação de dados, etc. Aqui não teremos lógicas de formatação de dados para a localidade do usuário nem manipulamos controles de UI.
* <b>apresentação</b> - esta camada é a responsável por interagir com o usuário, ou mesmo com outros sistema no caso de integração. Aqui mantemos o código que habilita/desabilita controles, traduz mensagens e códigos de erro para a língua do usuário (i18n), etc. É possível, por exemplo termos mais de uma classe de apresentação ao mesmo tempo, por exemplo: uma para exibição de aplicação desktop, outra para mobile, alguma para visualização web, e ainda alguma camada que seja usada para integrar com algum sistema legado ou de outro fabricante. Todas essas diferentes implementações da camada de apresentação acionam a camada de lógica para realizar as funcionalidades do sistema.


== Módulos do Plugin ==


Aqui vamos tomar cuidado para não confundir a 'modularidade' citada acima, com o que o projeto chama de 'módulos'. O módulo é uma divisão interna ao Plugin, que tem mais a função organizacional e lógica do que de implementar o conceito do pattern de modularidade. Essa divisão não é obrigatória, mas normalmente ocorre de acordo com as funcionalidades que o Plugin vai oferecer. Por exemplo, um Plugin desenvolvido para gerenciar compras de uma empresa. Pode ter um módulo de cadastro dos produtos, um módulo para fazer cotação, outro módulo para gerenciar o cadastro dos fornecedores e assim por diante.
Serviços do BIS são como pequenos módulos (as vezes não tão pequenos) mas que muitas vezes não tem uma funcionalidade própria além de prover agilidade ou de centralizar as informações para outros módulos. Por exemplo:
Os módulos de um plugin não são destacáveis, andam sempre junto do plugin!
* '''Cadastro de Pessoas''' - O BIS oferece o cadastro de pessoas, que podem ser utilizadas como clientes, fornecedores, funcionários, contatos, etc. por qualquer outro módulo.
* '''Localização''' - Há uma base de dados com País, Estado, Cidade e Endereços que permite que qualquer módulo obtenha localidades de forma organizada sem ter de implementar todos esses dados de forma autônoma.
* '''Mail Boxes''' - O serviço de e-mail permite que caixas de e-mail sejam configuradas, e posteriormente os módulos as utilizem tanto para enviar quanto para receber e-mails.


[[File:ArquiteturaBIS_Modules.jpg|center]]


No BISCore essa divisão lógica é chamada de serviços, já que em geral eles não tem uma grande funcionalidade se não servir e centralizar funções comuns a toda a aplicação.
= Empacotamento =
 
 
Empacotamento da aplicação é o arquivo para distribuição e execução da aplicação. Por ser uma aplicação J2EE o BIS é distribuido em um arquivo EAR. Atualmente dentro dele, de forma simplificada, encontramos os seguintes conteúdos:
* '''BISEJB'' - Pacote da camada de lógica do BIS e camada de Persistência. Por conta da camada de persistência simplificada do BIS, ela acabou sendo unificada dentro do próprio pacote da camada de lógica. Mas embora empacotada de forma diferente, a camada continua existindo de forma lógica e organizacional no código.
* '''BISVaadin''' - Pacote contendo a camada de apresentação do BIS destinada a WEB para Desktops.
* '''Bibliotecas''' - Bibliotecas de terceiros necessárias para execução do BIS. Como conectores de banco de dados, ferramentas de Logs, manipulação de equipamentos, etc.

Edição das 16h24min de 19 de maio de 2019

O BIS (ou BISERP) é um sistema focado em atender de forma ampla as necessidades de uma empresa. Com esse objetivo a arquitetura do BIS precisa ter uma organização que permita escalabilidade a medida que sua abrangência se torna mais ampla, o desenvolvimento e organização do código não devem ser comprometidas.

Para entender a arquitetura é imprescindível algum conhecimento básico em J2EE


Camadas

O BIS é montado em cima de três camadas 'básicas' de arquitetura:

Arquivo:ArquiteturaCamadas 1.jpg
  • Camada de Persistência - é a responsável por 'guardar' os objetos no banco de dados. É a única parte do sistema que "conhece" o banco de dados. Sabe como guardar e recuperar os objetos solicitados pela camada de lógica.
  • Camada de Lógica - é a responsável por armazenar a lógica do sistema. Aqui encontram-se as rotinas que validam e processam os dados do sistema.
  • Camada de Apresentação - é a camada onde estão configuradas as interfaces entre o sistema e o usuário. Nesta camada temos apenas a programação da própria interface (botões, listas, combos, cores, etc.) Embora seja possível ter alguma validação para agilizar e impedir o usuário de entrar dados inválidos, TODAS AS VALIDAÇÕES devem constar na camada de lógica.


Modularidade

O BIS apresenta uma organização interna de módulos. O Módulo nada mais é do que uma parte do sistema responsável por cuidar de algum assunto específico da necessidade da empresa. Por exemplo:

  • Módulo de Items - Módulo responsável por cadastrar e gerencias os itens do sistema. Itens são os produtos vendidos ou comprados, serviços prestados ou recebidos, material comprado para consumo ou ativo da empresa, e assim por diante.
  • Módulo de Fluxo de Caixa - Módulo responsável por gerenciar a parte financeira da empresa. Contas a pagar e de receber, caixas e orçamentos locais ou bancários, etc.
  • Módulo de Vendas/PDV - Módulo que permite a venda em checkouts, emissão de cupons SAT/NFCe, etc..

Apesar dessa divisão em módulos, o sistema não permite o destacamento dos seus módulos (como plugins). A separação de módulos é feita em relação aos 'packages' do java, mas todo o código, ou seja, todos os módulos andam juntos e estão presentes.


Habilitação do Módulo
Apesar de todo o código estar presente (o que evita chegar a presença das classes durante a programação), casa módulo pode ser 'vendido' separadamente para a empresa. O que significa dizer que o usuário pode não ter acesso à algum módulo.

Assim ao se implementar código em que um módulo gere, manipule ou dependa de dados de outro módulo é necessário considerar se o outro módulo está ou não presente para determinada empresa.


Serviços do BIS

Serviços do BIS são como pequenos módulos (as vezes não tão pequenos) mas que muitas vezes não tem uma funcionalidade própria além de prover agilidade ou de centralizar as informações para outros módulos. Por exemplo:

  • Cadastro de Pessoas - O BIS oferece o cadastro de pessoas, que podem ser utilizadas como clientes, fornecedores, funcionários, contatos, etc. por qualquer outro módulo.
  • Localização - Há uma base de dados com País, Estado, Cidade e Endereços que permite que qualquer módulo obtenha localidades de forma organizada sem ter de implementar todos esses dados de forma autônoma.
  • Mail Boxes - O serviço de e-mail permite que caixas de e-mail sejam configuradas, e posteriormente os módulos as utilizem tanto para enviar quanto para receber e-mails.


Empacotamento

Empacotamento da aplicação é o arquivo para distribuição e execução da aplicação. Por ser uma aplicação J2EE o BIS é distribuido em um arquivo EAR. Atualmente dentro dele, de forma simplificada, encontramos os seguintes conteúdos:

  • 'BISEJB - Pacote da camada de lógica do BIS e camada de Persistência. Por conta da camada de persistência simplificada do BIS, ela acabou sendo unificada dentro do próprio pacote da camada de lógica. Mas embora empacotada de forma diferente, a camada continua existindo de forma lógica e organizacional no código.
  • BISVaadin - Pacote contendo a camada de apresentação do BIS destinada a WEB para Desktops.
  • Bibliotecas - Bibliotecas de terceiros necessárias para execução do BIS. Como conectores de banco de dados, ferramentas de Logs, manipulação de equipamentos, etc.