quinta-feira, 21 de dezembro de 2017

Padrão GRASP

General responsibility assignment software patterns (GRASP)


Conjunto de padrões e princípios para auxiliar no desenvolvimento de arquitetura de software para sistemas orientados a objeto.

Esses princípios são divididos em tópicos, que podem ser aplicados na arquitetura de um sistema. São eles: controller, creator, indirection, information expert, high cohesion, low coupling, polymorphism, protected variations e pure fabrication.

Dentre eles serão destacados apenas 3, que vão fazer mais sentido de maneira geral em qualquer sistema computacional.

 

Controller (Controlador)

O padrão Controller trabalha com o conceito de objetos para controle de regras de negócio. Os objetos definidos neste padrão não possuem atributos ou métodos relacionados com UI ou acesso a dados. Nele devem estar as regras de como os dados serão processados, e a camada UI deverá interagir com ele através de métodos.
Essa separação pode ser vista no modelo MVC.

Visão ->> Controle ->> Modelo.

Dessa forma podem ser criadas várias interfaces (visões), que vão comunicar com um mesmo objeto de controle que irá tratar as requisições da mesma maneira.
Exemplo: um sistema com interface Web e Mobile.


High cohesion (Alta coesão)

Alta coesão significa que atributos e métodos que são intimamente relacionados entre si, ficam definidos em um mesmo objeto, pacote ou módulo. Essa alta coesão facilita a interpretação (e a manutebilidade) de um sistema, pois  as rotinas e funções ficam divididas entre os objetos que possuem responsabilidade específicas.
Pelo contrário, num sistema com baixa coesão, podem existir classes ou módulos de função, ou arquivos com tantas funções com propósitos diferentes, que é difícil entender o que está lá dentro, e é difícil aproveitar trechos de código para outros propósitos.


EXEMPLO:

Em um sistema com alta coesão: 
Classe Colaborador com métodos que validam idade, informações estão cadastradas corretamente, chamar as rotinas de persistência do banco de dados.

Classe Contrato com métodos que validam valor do contrato, categoria do contrato, chamar as rotinas de persistência do banco de dados.


Em um sistema com baixa coesão:
Classe Sistema com todos os métodos das classes que acabei de citar acima + rotinas  de validação de CEP, CPF, etc.

Agora sua tarefa é criar uma classe colaborador em um outro sistema e copiar apenas os métodos pertinentes.
Qual é mais fácil?
Além disso, para realizar uma manutenção numa classe grande, a atenção deve ser maior, pois podem existir variáveis globais, constantes globais, e aí a coisa começa a complicar.

 

Low coupling (baixo acoplamento)

O Baixo acoplamento é a característica que indica que um sistema possui pouca interdependência. Isso significa que os objetos possuem todo o conhecimento para operar sozinhos, e somente para dar vazão ao fluxo é que se comunicam com outros objetos.
Os fatores positivos desse são:
    • Baixa dependência entre objetos
    • Portabilidade de objetos entre sistemas (para reutilização)
    • Mudanças em um objeto tem poucas chances de que seja necessário alterar objetos que interagem com ele.




De <https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)>

quarta-feira, 20 de dezembro de 2017

Outsystems - Mas como assim?


Nesse momento você deve estar se perguntando como esse negócio funciona... E se funciona, claro.
Bom, como diria o ditado: "mil imagens valem mais do que mil palavras" (sim, eu adaptei o velho ditado, pois o post ficou maior do que o esperado).

Ao abrir o ambiente de desenvolvimento, logo de cara são exibidos os aplicativos/módulos já criados. A instalação e etc, eu trato em um outro post mais tarde. Para criar uma nova aplicação, é só clicar em "New Application". 



O sistema fornece duas opções de desenvolvimento: Web ou Mobile.
 


Em seguida são solicitadas informações sobre o nome da aplicação, cor do tema, se terá ou não ícone.
Como eu nunca lembro das datas dos aniversários (só o da minha esposa, claro), vou criar um App para me ajudar nisso. 


Na próxima tela já aparece a aplicação e os seus módulos. O Outsystems sugere a utilização de um conceito de camadas, e cada camada pode conter um ou mais módulos. Basicamente as camadas são os módulos de: visão, controle e bibliotecas. Em outro post irei entrar em mais detalhes dessas camadas.



Ao criar o módulo, a seguinte tela aparece, e nela já vamos criar nossa base de dados. Para isso, basta clicar na aba "Data", no canto superior direito.
 


Vamos adicionar uma entidade chamada "Person". Nela vamos adicionar duas propriedades: nome e data de nascimento.
 

Note que eu adicionei as informações em inglês. O Outsystems possui um parser que realiza a leitura do nome do atributo, e se a expressão no nome do atributo contiver algo que ele consiga reconhecer, ele automaticamente carrega o tipo do atributo.
Por exemplo, "DateOfBirth" automaticamente é criado com o tipo "Date".


Vamos agora à mágica. Para criar as telas, arraste a entidade para o fluxo principal:


Uma chuva de estrelas (de verdade) irá enfeitar sua tela por breves segundos, trazendo enorme felicidade ao desenvolvedor, que agora já tem uma tela de exibição de pessoas.
 O Outsystems já criou uma tela de listagem padrão automagicamente.

Ao arrastar novamente o componente para a tela, o sistema já cria a tela de detalhe:
 

Feito isso, é só publicar a aplicação (com um clique no botão verde no meio da tela), e então acessar o sistema, com as duas telas já criadas:
 


Além dessas telas, é possível criar toda a camada de negócio, que pode conter alertas, disparar e-mails com cartões e mensagens randômicas de feliz aniversário, ou até mesmo consumir serviços REST.

segunda-feira, 4 de dezembro de 2017

Outsystems - Ferramenta Low-Code



Há alguns anos estão surgindo diversas plataformas Low-Code. Essas plataformas permitem a criação de programas, integração com banco de dados e manutenção do ciclo de vida do programa diretamente em uma única ferramenta. Um fator muito relevante em relação à essas ferramentas é que praticamente tudo é criado de maneira visual, ou seja, sem que haja necessidade de conhecer a sintaxe de linguagem de programação.


Nessa próxima série de posts vou apresentar minha saga através de uma ferramenta de desenvolvimento que há alguns anos vem sendo evoluída e na sua última versão apresenta vários recursos interessantes. Essa ferramenta é o Outsystems.




O que é?

Outsystems é uma plataforma de desenvolvimento low-code que permite desenvolver rapidamente aplicativos de maneira visual. Através dos componentes que a ferramenta fornece é possível construir telas, fluxos lógicos, conexão com banco e consumir serviços REST/SOAP e SAP.




Através dos controles de fluxo podem ser criadas lógicas para interagir com sistemas legados, criar novas interfaces de acesso e até mesmo criar um sistema novo completo.

Para que serve?

Podem ser construídos desde simples ferramentas de apoio para exibição de relatórios, ou disparar execução de ações em outros sistemas (aprovar um workflow SAP, por exemplo), como sistemas de controle mais complexos, com várias telas e fluxos.

Os aplicativos mobile são gerados para IOS e Android, e é possível utilizar todos os periféricos dos aparelhos.

Por que utilizar?

A ferramenta permite desenvolver aplicações de maneira rápida. Os processos de construção do software, liberação ao usuário, acompanhamento de performance podem ser feitos através da ferramenta.


Vantagens:Agilidade na entrega de aplicações
Apps são gerados para IOS ou Android
Versionamento é controlado pela ferramenta
Monitoramento e métricas

Desvantagens:Custo alto da licença


Para quem quiser aprofundar:
https://www.outsystems.com
https://success.outsystems.com/Documentation/Development_FAQs
https://success.outsystems.com/Documentation

OutSystems - Validação de arquitetura

  A OutSystems indica a utilização de 3 regras para o desenho da arquitetura. Há uma ferramenta chamada Discovery Tool que analisa as de...