Entre Puertos y Adaptadores: La Arquitectura Hexagonal.

@totheralistair @andras_io

Presentación

BurnLino

Código fuente presentado en la charla dictada por Alistair Cockburn y Andrés N. Robalino. Se implementa el hexágono pedazo por pedazo hasta cumplir con todas las funciones (PriceMaker) que son:

  1. Devolver el mismo valor entregado.
  2. Devolver tasa de impuesto para algún estado del país Estados Unidos (El estado Florida sería ~6%)
  3. Precio total tomando en cuenta la tasa de impuesto de un estado en particular.

Adicionalmente se incluyen adaptadores demostrando el intercambio de tecnologías y las ejecutadoras (actores) principales.

Dependencias

Para poder ejecutar las pruebas se necesita JUnit y Hamcrest (maneras de descargarlo aquí).

Ejecución de la aplicación CLIApp.

Puedes hacerlo directamente desde el IDE o también compilar todas las clases. Asumiendo que burnlino.jar existe y se encuentra en /Users/andrasio/Code/cobolin/burnlino.jar podemos hacer:

java -cp .:/Users/andrasio/Code/cobolin/burnlino.jar com.andrab.flares.cobolino.Main echoValue 500
java -cp .:/Users/andrasio/Code/cobolin/burnlino.jar com.andrab.flares.cobolino.Main getTaxRateForState FL
java -cp .:/Users/andrasio/Code/cobolin/burnlino.jar com.andrab.flares.cobolino.Main calculatePriceWithTaxRate 50 FL

Este repositorio proporciona burnlino.jar para usarlo de esa manera. Si deseas experimentar con puertos e intercambiarlos, necesitas editar el código fuente y recompilar. Puedes realizar la generación de burnlino.jar usando uno de los scripts en la carpeta bin o nu también de la siguiente manera:

En Nushell

nu nu/generate_jar.nu

Bash

./bin/generate_jar

También puedes ejecutar el script para ejecutar la aplicación (verifica que la fuente donde se encuentra burnlino.jar en el script es el mismo de tu máquina). Solamente está de conveniencia para ejecutar tres veces la aplicacíon y generando burnlino.jar previo a ese paso también.

BurnLino CliApp

En Nushell

nu nu/cli_examples.nu

Bash

./bin/cli_examples

Ejecución de la aplicación WebApp

BurnLino WebApp

Para poder arrancar la aplicación web, vas a necesitar instalar JRuby 9.2.13.0. Una vez hecho eso, asegúrate de que se encuentre en el PATH los binarios de la carpeta bin de JRuby en la shell que usas de preferencia y que no hayan conflictos si se tienen otros ámbitos de desarrollo de Ruby (rvm también es otra opción).

Verifica que se encuentra satisfactoriamente lo siguiente:

 Ⲗ > which gem
─────────┬───────────────────────────────────────────────────────
 arg     │ gem
 path    │ /Users/andrasio/code/cobolin/jruby-9.2.13.0/bin/gem
 builtin │ No
─────────┴───────────────────────────────────────────────────────
 Ⲗ > which jruby
─────────┬─────────────────────────────────────────────────────────
 arg     │ jruby
 path    │ /Users/andrasio/code/cobolin/jruby-9.2.13.0/bin/jruby
 builtin │ No
─────────┴─────────────────────────────────────────────────────────

Si logras ver algo similar (es decir, gem y jruby se encuentren dentro del directorio de JRuby que descargaste jruby-9.2.13.0), instala bundler:

gem install bundler

Ahora en la carpeta web_app, instala las dependencias así:

bundle install

Si todo sale bien y se instalan las dependencias, puedes instanciar la aplicación web (¡y no olvides que tiene que existir burnlino.jar también!) así:

./price_maker