Arquivo do mês: outubro 2012

Imagem

Água de beber no Planetário até 4 de novembro

Anúncios

Hexagonal Architecture in Smalltalk series – part 2

Post inicial


UI Adapter

Na pequena aplicação que vamos construir temos uma interface simples com uma caixa de texto, quatro botões e uma área para mostrar mensagens. Para executá-la use o código mostrado abaixo.

A interface é implementada como uma Humble View (Ver o artigo GUI Architectures de Martin Fowler) não tendo nenhuma lógica complexa. Desta forma o teste da interface é trivial.

O objeto responsável por adaptar a interface e o domínio receberá eventos de ambos que converterá em chamadas adequadas para manter o domínio e a interface do usuário sincronizados. Vamos mostrar inicialmente a aplicação desktop deixando a aplicação web para depois.

DesktopAdapter

A classe DesktopAdapter não tem estado e apenas executa wiring entre a interface do usuário e o domínio representadas pelas suas variáveis de instância view e domain. O seu código principal está todo contido no método de inicialização executado na criação do objeto.

O idioma representado pela chamada ao método #when:do: efetua o registro de eventos no qual o adapter está interessado tanto junto à interface do usuário quanto junto ao domínio.

O diagrama de classes e os diagramas de sequência a seguir ilustram o que o código acima efetuará.

O diagrama para o pressionameto do botão Decrement é similar ao acima.

O código completo do adapter segue abaixo. No próximo artigo vamos nos ater ao domínio e à interface do usuário.

'From Pharo1.4 of 18 April 2012 [Latest update: #14457] on 27 October 2012 at 9:28:54 pm'!
Object subclass: #DesktopAdapter
	instanceVariableNames: 'view domain'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'HexagonalArchitecture-Example-Value'!

!DesktopAdapter methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 10/26/2012 19:55'!
initialize
	super initialize .

	view when: ViewOpened do: [
		view setTextEntry: domain value asString
	] .

	view when: ResetButtonPressed do: [
		domain value: 0.
	] .

	view when: UpdateButtonPressed do: [
		domain setValue: view textEntry.
		view showMessage: '@@ Domain updated to ', domain value asString
	] .

	view when: IncrementButtonPressed do: [
		domain incrementValue
	] .

	view when: DecrementButtonPressed do: [
		domain decrementValue
	] .

	domain when: ValueChanged do: [
		view setTextEntry: domain value asString .
		view showMessage: '## Domain updated to ', domain value asString
	] ! !

!DesktopAdapter methodsFor: 'accessing' stamp: 'FranciscoAryMartins 10/23/2012 13:51'!
domain: aDomain
	domain := aDomain! !

!DesktopAdapter methodsFor: 'accessing' stamp: 'FranciscoAryMartins 10/23/2012 13:53'!
view
	^ view! !

!DesktopAdapter methodsFor: 'accessing' stamp: 'FranciscoAryMartins 10/23/2012 13:51'!
view: aView
	view := aView! !

"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!

DesktopAdapter class
	instanceVariableNames: ''!

!DesktopAdapter class methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 10/23/2012 13:48'!
domain: aDomain view: aView
	^ self basicNew
		domain: aDomain ;
		view: aView;
		initialize  ! !

Hexagonal Architecture in Smalltalk series

 

  1. Introdução
  2. UI Adapter
    • DesktopAdapter
  3. Domain
  4. View
    • DesktopView
  5. WebAdapter
  6. WebView

Introdução

Em Hexagonal Architecture há uma inversão da idéia de arquitetura em camadas. A infraestrutura vai para a periferia e o modelo do domínio fica no centro com todo o resto dependendo dele e ele de ninguém. Isto facilita os testes com o uso de mocks e permite considerar a infraestrutura como plugins (inclusive o framework de testes).

Uma aplicação desenvolvida assim pode evoluir com as novidades na infraestrutura sem alterar o seu núcleo. Pode iniciar com uma interface desktop e depois funcionar na Web ou em celulares, publicar web services, conectar-se com mecanismos de persistência etc, sem que o núcleo se altere por este motivo.

Nesta série serão mostradas implementações em Smalltalk para demosntrar o conceito de desacoplamento deste modelo de arquitetura que é também conhecida pelo termo Ports and Adapters.

O desacoplamento será obtido usando o Observer Design Pattern no lugar de interfaces e dependency injection usuais em linguagens estaticamente tipadas. Adotaremos um idioma similar ao do artigo sobre Presenter First (uma variante do MVPBig, Complex, and Tested? Just Say “When”: Software Development Using Presenter First.

No post seguinte vamos iniciar a implementação de uma aplicação simples apenas como prova de conceito. O modelo do domínio será bem simples para não provocar distrações permitindo uma concentração no entendimento dos mecanismos que suportam a arquitetura.

Links relacionados:

Restaurant Week 2012 – sétima edição

Vai começar a 7ª edição do Rio Restaurant Week. O evento nasceu em Nova York e ocorre entre os dias 22 de outubro e 04 de novembro com cerca de 60 restaurantes cadastrados. Clientes MasterCard Platinum terão a oportunidade de aproveitar exclusivamente o evento com uma semana de antecedência, entre os dias 15 e 21 de outubro. Para isso, os pratos oferecidos na hora do almoço vão custar R$ 31,90 e no jantar, R$ 43,90 incluindo entrada + prato principal + sobremesa. Cada restaurante inscrito no evento vai oferecer duas opções de cada item para que o cliente escolha o de sua preferência. Bebidas, couvert e serviço não estão inclusos no valor.

Sailing online

Fonte: http://www.thepirateking.com/ships/sail_simulator.htm

Teoria:

Artigos:

Vídeos:

Dingue na Lagoa

Agora já é possível velejar de Dingue na Lagoa sem precisar ser sócio de algum clube nas margens. Tem também Stand Up Paddle.

  • Dingue
    • 30 minutos R$ 50,00
    • 1 hora R$ 70,00
    • 10 horas R$ 600,00
  • Stand Up Paddle
    • 30 minutos R$ 30,00
    • 1 hora R$ 40,00
    • 10 horas R$ 360,00
  • Monitor para qualquer atividade
    • 30 minutos R$ 20,00
    • 1 hora R$ 30,00
  • Resgate em qualquer ponto da lagoa: R$ 50,00
  • Info: 7841-2390

Basômetro: a política em números

O Basômetro é uma ferramenta interativa que permite medir o apoio dos parlamentares ao governo e acompanhar como eles se posicionaram nas votações legislativas. Cada um é representado por uma bolinha com a cor do partido. Quanto mais próxima ela está do governo (no alto), maior é a taxa de governismo.

Fonte: http://estadaodados.herokuapp.com/html/basometro/

Aparentemente a aplicação do Estadão foi desenvolvida usando o Heroku.