<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Aquele blog de SOA &#187; Metodologias</title>
	<atom:link href="http://www.aqueleblogdesoa.com.br/categoria/metodologias/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aqueleblogdesoa.com.br</link>
	<description>SOA? Veja bem...</description>
	<lastBuildDate>Thu, 08 Jul 2010 14:16:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Projeto de serviços: contratos, camadas e EDA.</title>
		<link>http://www.aqueleblogdesoa.com.br/2008/12/projeto-de-servicos-contratos-camadas-e-eda/</link>
		<comments>http://www.aqueleblogdesoa.com.br/2008/12/projeto-de-servicos-contratos-camadas-e-eda/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 14:04:28 +0000</pubDate>
		<dc:creator>Gustavo S. Sinis</dc:creator>
				<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[Camadas]]></category>
		<category><![CDATA[CBD]]></category>
		<category><![CDATA[Contrato]]></category>
		<category><![CDATA[DbC]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[ETL]]></category>

		<guid isPermaLink="false">http://www.aqueleblogdesoa.com.br/?p=622</guid>
		<description><![CDATA[SOA tem uma base sólida em Design by Contract (DbC) e Component Based Development (CBD). Isso implica em questões interessantes sobre serviços: contratos e interfaces; camadas e serviços; EDA.
Contratos e interfaces 
Podemos considerar serviços como interfaces que definem uma topologia corporativa. Alguns autores enfatizam que é possível definir SOA como “Arquitetura Orientada a Interfaces”, mas [...]


Related posts:<ol><li><a href='http://www.aqueleblogdesoa.com.br/2009/08/principios-basicos-de-soa-servicos-sao-capazes-de-se-compor/' rel='bookmark' title='Permanent Link: Princípios Básicos de SOA &#8211; Serviços são Capazes de se Compor'>Princípios Básicos de SOA &#8211; Serviços são Capazes de se Compor</a></li><li><a href='http://www.aqueleblogdesoa.com.br/2009/10/webinar-maturidade-e-roadmap-soa-participe/' rel='bookmark' title='Permanent Link: Webinar: Maturidade e Roadmap SOA. Participe!'>Webinar: Maturidade e Roadmap SOA. Participe!</a></li><li><a href='http://www.aqueleblogdesoa.com.br/2010/07/como-aumentar-as-chances-de-sucesso-na-nuvem/' rel='bookmark' title='Permanent Link: Como aumentar as chances de sucesso na Nuvem'>Como aumentar as chances de sucesso na Nuvem</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>SOA tem uma base sólida em Design by Contract (DbC) e Component Based Development (CBD). Isso implica em questões interessantes <a rel="nofollow" href="http://www.aqueleblogdesoa.com.br/2008/10/anatomia-do-servico-parte-2/" target="_new">sobre serviços</a>: contratos e interfaces; camadas e serviços; EDA.</p>
<p><strong>Contratos e interfaces </strong></p>
<p>Podemos considerar serviços como interfaces que definem uma topologia corporativa. Alguns autores enfatizam que é possível definir SOA como “Arquitetura Orientada a Interfaces”, mas com um foco corporativo, não no contexto de uma única aplicação. Desenvolver para interfaces traz grandes benefícios.</p>
<p><img src="http://www.sinis.com.br/fig/servicoCliente.png" alt="" /></p>
<p>Uma interface encapsula um determinado backend e deve ser projetada como um contrato, um acordo entre consumidor e fornecedor. De forma que, se o cliente cumprir sua parte (pré-condições), o serviço garante o resultado especificado (pós-condições) com algumas exceções também especificadas. Caso o cliente não garanta a sua parte no acordo, o serviço tem seu comportamento comprometido de forma imprevisível.</p>
<blockquote><p><strong>Pré-condições: </strong>são os parâmetros de entrada e os estados do sistema que devem ser validados antes da “execução” do serviço.</p>
<p><strong>Pós-condições:</strong> especificação do estado do sistema (por exemplo, objetos criados ou destruídos, atributos e relacionamentos alterados) ou os parâmetros de saídas garantidos/válidos após a “execução” do serviço. Em outras palavras, o resultado esperado da “execução” do serviço.</p>
<p><strong>Exceções:</strong> todas as situações em que a “pós-condição” não pode ser garantida, mesmo com a “pré-condição” atendida.</p></blockquote>
<p>As definições de “pós-condições”, “pré-condições” e “exceções” não devem ter um caráter de documentação. A atitude mental deve ser de projetar um contrato que proporcione a maior coesão possível, obtida com refinamentos sucessivos (durante todo o ciclo de vida do serviço o contrato deve ser considerado e evoluído), pois todas as decisões neste âmbito terão conseqüências diretas na arquitetura corporativa.</p>
<p>No contrato é especificado onde ficará a lógica, evitando, sobretudo, redundância e falta de coesão. Se uma determinada lógica estiver coesa com o serviço (normalmente a lógica utiliza somente os dados encapsulados no serviço), ela é implementada no próprio serviço, “disparando” possíveis exceções. Caso contrário, o cliente implementaria ou delegaria a lógica (cumprindo as pré-condições) para garantir a execução e obter o resultado esperado. Portanto, a lógica nunca dever ser duplicada no serviço e no cliente.</p>
<p>Alterações devem respeitar o contrato. Em uma alteração do contrato, ou seja, alteração da interface de um serviço, todos os seus clientes devem ser revistos. Interfaces publicadas devem ser bem projetadas, para garantir mudanças de forma controlada. Testes automatizados para garantir o contrato também são importantes, tornando alterações viáveis.</p>
<p>Serviços encapsulam os dados de seu backend &#8211; essa é uma questão essencial. Caso um determinado cliente esteja utilizando dados obtidos por intermédio de um serviço para a “execução” de uma regra de negócio, provavelmente essa regra ficaria mais coesa no serviço, não no cliente, ou seja, o serviço deveria fornecer uma operação que encapsula a regra, retornando, por exemplo, um boolean, evitando desta forma que o cliente receba dados desnecessários.</p>
<p>Seguindo o mesmo princípio, um serviço não deve receber dados de outros serviços para cumprir uma regra de negócio. Normalmente, tudo o que recebem são seus próprios dados ou, no máximo, identificadores únicos de conceitos de outros serviços, nunca dados/objetos que não estejam coesos.</p>
<p>Eventualmente, temos regras de negócio que não pertencem exclusivamente a um serviço (utilizam dados/objetos de vários serviços). Neste caso, um serviço composto pode oferecer uma pequena camada de código que orquestra dois ou mais serviços, a fim de cumprir a regra. O serviço composto seqüencia as operações de outros serviços mais básicos, criando uma indireção.</p>
<p><img src="http://www.sinis.com.br/fig/servicoComposto.png" alt="" width="480" height="191" /></p>
<p>Serviços encapsulam seus dados, por isso, sempre achei estranhas as abordagens de BI com SOA. BI consolida dados, para isso, consomem dados; serviços seguem o caminho oposto, escondem dados. Ainda temos questões de desempenho envolvidas pela característica distributiva dos serviços. No entanto, <a rel="nofollow" href="http://www.infoq.com/articles/BI-and-SOA" target="_new">um interessante artigo da InfoQ</a>, mostra que SOA com EDA pode, em muitos casos, substituir abordagens ETL para consolidar bases, com vantagens, para apoiar iniciativas de BI. EDA é um tema pouco explorado, mas que merece muito mais atenção do que tem recebido no Brasil. EDA usa mensagens assíncronas e promove baixo acoplamento de forma muito interessante; favorece, também, abordagem com BAM e CEP.</p>
<p><strong>Camadas e serviços</strong></p>
<p>A identificação de serviços é uma tarefa importante. As operações de um serviço devem estar coesas com seus dados e com sua interface. Além disso, os serviços devem fazer sentido para o negócio. <a rel="nofollow" href="http://www.aqueleblogdesoa.com.br/2008/11/anatomia-do-servico-o-que-e-afinal/" target="_new">Neste artigo, existem alguns tipos de serviços básicos definidos por Thomas Erl. </a></p>
<p>Contudo, serviços bem identificados não bastam. Serviços devem ter o máximo de independência possível. <a rel="nofollow" href="http://www.martinfowler.com/bliki/LayeringPrinciples.html" target="_new">Pensar serviços em termos de camadas traz benefícios importantes</a>, pois essa abordagem pode evitar que seus serviços fiquem parecidos com a figura abaixo. <a rel="nofollow" href="http://www.soacorporativa.com.br/2008/10/22/realidade-do-esb-sem-soa/" target="_new">Usar uma ferramenta ESB não resolve.</a></p>
<p><img src="http://www.sinis.com.br/fig/figESB1.png" alt="" width="474" height="261" /></p>
<p>Pode-se citar como exemplo aplicações que são divididas em camadas (apresentação, aplicação, negócios, infra-estrutura), possibilitando que as alterações sejam contidas. Dessa forma, alterações simples na apresentação ou na persistência não obrigam que quase todo o sistema seja alterado como conseqüência direta.</p>
<p>A abordagem com camadas possui regras simples. A camada mais alta usa vários serviços definidos pela camada mais baixa, mas a camada mais baixa ignora a existência da camada mais alta. Além disso, cada camada normalmente esconde suas camadas mais baixas, conceito conhecido como “camada opaca”; mas também são possíveis &#8220;camadas transparentes&#8221;, conforme a figura abaixo.</p>
<p><img src="http://www.sinis.com.br/fig/camadas.png" alt="" /></p>
<p><a rel="nofollow" href="http://www.soamethodology.com/p5.asp" target="_new">Thomas Erl define algumas camadas básicas para SOA </a>(são possíveis abordagens mais elaboradas com mais camadas, por exemplo, uma camada para serviços de entidades compostos e outra para serviços básicos), na figura abaixo.</p>
<p><img src="http://www.sinis.com.br/fig/soaServicos.png" alt="" width="470" height="321" /></p>
<p>No caso de serviços básicos, que encapsulam diretamente o domínio (serviços de entidade, por exemplo), é interessante também que sejam controladas as trocas de mensagens de diretas na mesma camada. Neste caso, podemos usar uma camada superior como indireção, orquestrando serviços da camada inferior. Com essa abordagem, temos um controle da dependência de forma mais simples possível. Apesar de sua característica “procedural”, essa abordagem evita dependências cíclicas. No geral, não existem respostas fácies, pois existem muitas outras variáveis como, por exemplo, desempenho, cada caso deve ser avaliado.</p>
<p><strong>Event-driven architecture</strong></p>
<p>Conforme mencionado anteriormente, abordagens <a rel="nofollow" href="http://en.wikipedia.org/wiki/Event_Driven_Architecture" target="_new">EDA </a>promovem um grande desacoplamento. EDA não é apenas uma questão arquitetural, pois eventos são encontrados no negócio. Um evento pode ser qualquer alteração de estado do negócio. Essa abordagem deve ser seriamente considerada em todos sistemas em uma estratégia SOA.</p>
<p>Normalmente, um sistema que origina o evento envia uma mensagem para uma ferramenta ESB, por exemplo. A ferramenta notifica todos os serviços que assinaram o evento , alterando o fluxo mais comum de uma abordagem SOA ( request-and-reply pattern ) para uma abordagem &#8220;inversa&#8221; ( publish-and-subscribe pattern). Em certos cenários são possíveis combinações das abordagens.</p>
<p>Fluxo mais comum de uma abordagem SOA:</p>
<p><img src="http://www.sinis.com.br/fig/soaRR.PNG" alt="" /></p>
<p>Event Driven Architecture:</p>
<p><img src="http://www.sinis.com.br/fig/soaPS.PNG" alt="" /></p>


<p>Related posts:<ol><li><a href='http://www.aqueleblogdesoa.com.br/2009/08/principios-basicos-de-soa-servicos-sao-capazes-de-se-compor/' rel='bookmark' title='Permanent Link: Princípios Básicos de SOA &#8211; Serviços são Capazes de se Compor'>Princípios Básicos de SOA &#8211; Serviços são Capazes de se Compor</a></li><li><a href='http://www.aqueleblogdesoa.com.br/2009/10/webinar-maturidade-e-roadmap-soa-participe/' rel='bookmark' title='Permanent Link: Webinar: Maturidade e Roadmap SOA. Participe!'>Webinar: Maturidade e Roadmap SOA. Participe!</a></li><li><a href='http://www.aqueleblogdesoa.com.br/2010/07/como-aumentar-as-chances-de-sucesso-na-nuvem/' rel='bookmark' title='Permanent Link: Como aumentar as chances de sucesso na Nuvem'>Como aumentar as chances de sucesso na Nuvem</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.aqueleblogdesoa.com.br/2008/12/projeto-de-servicos-contratos-camadas-e-eda/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Guaraná com Laranja</title>
		<link>http://www.aqueleblogdesoa.com.br/2008/07/guarana-com-laranja/</link>
		<comments>http://www.aqueleblogdesoa.com.br/2008/07/guarana-com-laranja/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 18:08:08 +0000</pubDate>
		<dc:creator>jgalli</dc:creator>
				<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://aqueleblogdesoa.wordpress.com/?p=201</guid>
		<description><![CDATA[SOA é umas das palavras que mais aparecem na boca dos executivos das grandes empresas nos dias de hoje, uma palavra que sempre vem acompanhada de aumento de produtividade, melhoria na governança, redução de custos&#8230; o que, convenhamos, tem tudo a ver com a Arquitetura Orientada a Serviços quando essa é bem aplicada!
Porém, entretanto, todavia [...]]]></description>
			<content:encoded><![CDATA[<p>SOA é umas das palavras que mais aparecem na boca dos executivos das grandes empresas nos dias de hoje, uma palavra que sempre vem acompanhada de aumento de produtividade, melhoria na governança, redução de custos&#8230; o que, convenhamos, tem tudo a ver com a Arquitetura Orientada a Serviços quando essa é bem aplicada!</p>
<p>Porém, entretanto, todavia e contudo existe um assunto que não é muito explorado quando falamos sobre isso: uma vez definida que a Arquitetura a ser utilizada daqui em diante será Orientada a Serviços, como serão desenvolvidos os próximos projetos, os próximos produtos, e como serão criados esses serviços para que depois possamos reutilizá-los?</p>
<p><strong>Arquitetura vs. Metodologia</strong></p>
<p>Bom, definimos nossa Arquitetura: ela será Orientada a Serviços, certo? Ótimo, maravilha! Mas e agora? Que  metodologia iremos utilizar para implementar essa arquitetura, para implementar esses novos serviços?</p>
<p>Quando falamos de Metodologia me vem à cabeça as tradicionais e já muito bem conhecidas metodologias burocráticas, formais, cheias de papéis, documentos, artefatos&#8230; bom, não sei vocês, mas a imagem de sistemas demorando meses para serem concluídos, com aquela documentação gigantesca, diagramas e mais diagramas não me sai da cabeça. E, na grande maioria das vezes, no final temos apenas um sistema que não é mais o que o nosso cliente precisa, além é claro de uma linda e completa documentação.</p>
<p>Então, já que teremos uma grande mudança, porque não mudar também a forma como desenvolvemos nossos produtos e projetos, ou ao menos mudar a metodologia para o desenvolvimento desses novos serviços? Pois, se continuarmos trabalhando como sempre, possivelmente teremos os mesmos problemas, só que eles agora estarão distribuídos em serviços e gerenciados por ESBs.</p>
<p>Então, que tal experimentarmos os Métodos Ágeis (conhecidos, também como <a href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank"><em>Agile</em></a>)!?!</p>
<div id="attachment_203" class="wp-caption alignright" style="width: 225px"><a href="http://aqueleblogdesoa.files.wordpress.com/2008/07/laranjaguarana.jpg"><img class="size-medium wp-image-203" src="http://aqueleblogdesoa.files.wordpress.com/2008/07/laranjaguarana.jpg?w=215" alt="" width="215" height="160" /></a><p class="wp-caption-text">Guaraná com Laranja</p></div>
<p>Dentre os principais objetivos de SOA, temos a governança dos serviços para facilitar o reúso, evitar o retrabalho, aumentar a produtividade e reagir rapidamente às mudanças organizacionais e operacionais. E os principais objetivos das metodologias ágeis são a agilidade (<em>jura?!?</em>), a facilidade de responder às mudanças rapidamente, numa forma muito mais iterativa.</p>
<p>Ora, percebam que muitos dos objetivos de SOA e Agile são os mesmos: ambos reconhecem que mudanças são comuns, e que precisam responder a elas rapidamente. Se vocês perguntarem ao Google sobre SOA e Agile, verão algumas páginas que dizem que eles são como &#8220;Maçãs e Laranjas&#8221;, numa analogia de que não devem ser comparados entre si.</p>
<p>Mas, na minha opinião podemos utilizar uma analogia muito melhor, comparando-os como duas frutas conhecidas por todos como frutas que se completam: Guaraná e Laranja!</p>
<p>Na próxima semana vou tentar mostra um pouco das vantagens e desvantagens (<em>sim, elas existem</em>) de se utilizar Agile para implementar SOA.</p>
<p>Até lá!</p>
<p>Abraços,</p>
<p><em>- Jonas Galli</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aqueleblogdesoa.com.br/2008/07/guarana-com-laranja/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
