Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Hexagonal Architecture with Ruby on RailsŠiašiakampė architektūra su Ruby on Rails
Vilius Luneckas
#3 Ruby Meetup2013
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 1 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Turinys
Rails, Hexagonal Architecture
Motyvacija
Igyvendinimo technikos
Pavyzdžiai
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 2 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Rails aplikacijos architektura
Paveikslas pasiskolintas iš Matt Wynne „Hexaonal Rails“ prezentacijos
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 3 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Rails aplikacijos architektura
Privalumai:• projekto pradžioje leidžia greitai kurti naują
funkcionalumą;• viskas yra lengvai pasiekiama.
Minusai:• bėgant laikui kardinalus funkcionalumo keitimas yra
sudėtingas;• testai lėtėja;• naujiems testas reikia paruošti vis daugiau susijusių
objektų.
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 4 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Hexagonal Architecture
Paveikslas pasiskolintas iš Matt Wynne „Hexaonal Rails“ prezentacijos
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 5 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Motyvacija
Atskirdami verslo logiką nuo infrastruktūros gauname šiuosprivalumus:
• Suprantamesnį kodą• Šešiakampio viduje – visas programinis kodas yra skirtas tik
verslo logikai. Išgrynintas, suprantamas.• Išorėje – kodas rašomas verslo logikos duomenims ir
įvykiams perduoti į išorę.• Infrastruktūros pakeičiamumą;• Testų greitį
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 6 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
#1 Use Case Service
Paveikslas pasiskolintas iš Victor Savkin straipsnio („Hexagonal Architecture for Rails Developers“)
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 7 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
#2 Passive Controllers
Paveikslas pasiskolintas iš Victor Savkin straipsnio („Hexagonal Architecture for Rails Developers“)
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 8 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
#3 RepositoriesJei pirmuju dvieju negana
• ActiveRecord ???• Objektai, atsakingi už bendravimą su DB• EDR, git: nulogy/edr
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 9 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Prieš
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 10 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Po
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 11 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Po
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 12 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Pavyzdys su #3 technika
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 13 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Pavyzdys su #3 technika
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 14 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Kas yra kur?
• Išoriniai „įrenginiai“ – UI, DB;• Adapteriai – OrderController, OrderRepository;• Verslo logika – User, Order modeliai ir CreateOrder service.
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 15 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Apibendrinimas
Šis architektūros tipas padeda atskirti verslo logiką nuoinfrastruktūros.
• Verslo logikos branduolys nieko nežino apie Ruby on Railskarkasą. Apie verslo transakcijų vykdimą, rezultatuspraneša adaptariams.
• Kraštutiniu atveju sistema nieko nežino apie duomenųsaugojimo būdą, tam naudoja repozitorijas.
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 16 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
Literatura
• Refactoring with Hexagonal Rails, Agile Planner• Hexagonal Architecture for Rails Developers, Victor Savkin• Hexagonal Rails: Objects, Values and Hexagons, Matt
Wynne
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 17 / 18
Rails, Hexagonal ArchitectureMotyvacija
Igyvendinimo technikosPavyzdžiai
?!
Vilius Luneckas #3 Ruby Meetup Hexagonal Architecture with Ruby on Rails 18 / 18