24 de janeiro de 2008

SOA não é WebService!

Esta postagem é apenas uma visão de um estudante de TI, procurando soluções para alguns dos paradigmas encontrados nos conceitos de lógica e desenvolvimento de software.
Em uma série de matérias, artigos, fóruns e discuções. vejo uma grande confusão, a de que SOA somente pode ser concebido com WebServices.

Os WebServices são grandes aliados do SOA, porém não só este tipo de tecnologia que permitem que o conceito de SOA seja reproduzido.

Conceito

Na verdade o SOA é um conceito que define que, para se obter boa aplicabilidade e integração entre sistema deve-se ter, baixo acoplamento e granularidade grossa, criando assim módulos funcionais do sistema, e permitindo a reutilização do código.

Isto sisgnifica que serviços devem ser criados e disponibilizados por completo, por exemplo:

Reservar um quarto de hotel;

O serviço terá que verificar a disponibilidade de quartos, alterar o estado do quarto para reservado e adicionar esta reserva ao banco de dados, isto define uma granularidade grossa, e as classes são de granularidade fina, inserir quarto, inserir reserva. alterar status do quarto, cada uma dessas é um metodo e uma interação diferente com o objeto.

E o baixo acoplamento é reproduzido nas aplicações reduzindo as interdependencias dos módulos do sistemas, que segundo a teoria de "Page-Jones", poderia ser uma classe, mas eu prefiro acreditar que devemos criar uma classe que disponibilize o "serviço" ou que na própria classe seja criada um método que disponibilize o "serviço" com um baixo acoplamente, ou seja o método não irá esperar por tipos complexos como parametros, mas irá cuidar de tudo que se deve existir para resolver o assunto.

Por exmplo, no caso da reserva iriamos tem um método criando um objeto de um quarto que estará disponível e irá alterar seu estado e gravar isto no banco.

C#
class Quarto
{
public void ServicoReservar(int idCliente, DateTime chegada, DateTime saida)
{
List oListQuarto = Quarto.Disponiveis(chegada, saida);
if(oListQuarto.Count > 0)
{
oListQuarto[0].Reservar(new Cliente(idCliente));
}
}
}

Para não se ter um método muito complexo, optei por reservar o primeiro quarto que estiver disponível, mas poderia receber o tipo do quarto que deveria estar disponível para reserva, por exemplo.

Este é o conceito básico, não muito detalhado, mas prometo estudar mais sobre a arquitetura SOA para poder disertar melhor sobre o assunto.

Tecnologias

Existem algumas tecnologias que permitem com que o SOA, possa vir a ser reproduzido.
Algumas delas são:

  • Programas de linha de comando;
Em alguns casos esta pode vir a ser a melhor opção, como integração de sistemas que estão alocados em uma mesma máquina ou rede, permitindo que algumas liguagens e tecnologias diferentes, possam se conversar.
  • Via Protocolo Http (WebServices);
Ótima opção para integrar sistemas via intranet e internet, geralmente, são as mais utilizadas pelos arquitetos, por se tratar de uma tecnologia bem disseminada e difundida, e por grande parte das tecnologias suportarem e serem compatíveis.
  • Via TCP/IP (Sockets);
Esta é uma opção bastante performatica, quando precisamos integrar sistemas em Rede, cada tecnologia tem uma forma para se desenvolver com este tipo de protocolo, mas a integração é bastante performática.
  • Com envio de mensagens;
O envio de mensagens é uma ótima opção para garantir que a integração tenha consistência e garantia, geralmente são feitos com sistemas de terceiros MSMQ (Microsoft), MQSeries (IBM), entre outros.
  • Via arquivos (Text/XML);
Existem vários padrões de gravação de arquivos de integração, alguns como CSV, XML, arquivo posicional, entre outros, e esta seria uma boa opção para casos em que a integração não deve ser imediata, mas este é o serviço mais demorado, pesado e menos performático, porém, pode ser uma solução para algumas empresas.
  • Outros;
Eu não conheço nenhum tipo de integração que seja diferente dessas, mas pode ser que existam, ser alguém conhecer, por favor me avisem, que estudarei melhor.
WCF
O WCF é uma tecnologia que decide qual a melhor forma de se integrar com o sistema legado, ele tem que decidir se a integração deve ser feita com HTTP, TCP/IP, via NamedPipes, Text/XML, entre outros...

Esta tecnologia foi desenvolvida, pensando na arquitetura SOA, e para mostrar que não se deve utilizar apenas uma tecnologia como WebServices, .NET Remoting ou MQSeries para se desenvolver uma arquitetura SOA.

Conclusão do autor

Não devemos dizer que SOA é apenas uma tendência, e também que é uma nova tendência, assim como a OOP os conceitos do SOA, foi desenvolvido a alguns anos atrás, mas hoje existe uma necessidade grande das empresas de integrar seus sistemas, e a melhor forma encontrada para se fazer isto é disponibilizando serviços para esta integração, e ainda isto permite que seja feita uma grande organização dos processos da empresa, na visão comercial, isto é ótimo, mas nem por isso devemos utilizar SOA em qualquer projeto que iremos desenvolver, é isso mesmo, não devemos ser movidos pela empolgação, mas sim pela razão.
SOA não é desenvolvido apenas com WebServices, existem várias opções para se desenvolver SOA.


NOTA: Qualquer erro conceitual tecnologicos, sugestões, criticas, etc... poste um comentário aqui e tentarei entrar em contato.

2 comentários:

Diego Carrion disse...

Muito legal o artigo Luis Henrique.

Luis Henrique Caruso Crescenzo disse...

Agradeço Diego, mas ainda tenho que melhorar muito.
Irei procurar opções em Java, para disponibilizar aqui.
Obrigado