Service objecty dają nam sporo korzyści, ale nie rozwiązują problemów typowych dla dużych aplikacji Railsowych. Ta prezentacja podsumowuje pozostałe problemy oraz prezentuję docelową wizję opartą na DDD/CQRS.
[PL] Service objecty to za mało - jak żyć z Railsami?Andrzej Krzywda
Slajdy z prezentacji na DRUG #105 (zapraszamy co trzeci poniedziałek każdego miesiąca do Wrocławia).
Podczas prezentacji omawiany był etap serwisy i serwisy+ jaki można zobaczyć w wielu projektach Rails. Wskazuję na zalety tego podejścia, ale też wiele nierozwiązanych problemów.
Zanim jednak rzucimy się na kolejne kroki warto zobaczyć las zamiast pojedynczych drzew.
Tym lasem jest Domain Driven Design połączone z CQRS.
Warto zobaczyć jak wygląda taki DDD projekt aby się upewnić czy chce się w tą stronę iść.
Szczęśliwie już mamy taki nietrywialny projekt:
https://github.com/RailsEventStore/ecommerce
Warto go uruchomić, przejrzeć kod - wziąć przykładowy issue do zrobienia. A dopiero po tych doświadczeniach wdrażać kolejne kroki u siebie.
Najlepszą strategią może być strategia "readmodelowa" oparta o eventy.
4Developers 2015: Skalowanie i integracja systemów w asynchronicznym stylu - ...PROIDEA
Szymon Szylhabel
Language: Polish
Jeżeli zastanawiasz się jakie pułapki kryje asynchroniczna komunikacja lub masz wątpliwości czy ją zastosować - to dobrze trafiłeś - jestem tu po to, by rozwiać Twoje wątpliwości. Podczas prezentacji przedstawię różne podejścia do projektowania systemów bazujących na komunikacji asynchronicznej oraz konsekwencje wynikające z ich wdrożenia.
Od strony praktycznej przyjrzymy się szynom danych jak i technologiom, które je wspierają, między innymi pojawi się Azure ServiceBus w wersji „On Premise”, która pozycjonowana jest przez Microsoft jako następca MSMQ.
LocalStack to framework udostępniający łatwe w użyciu mocki usług stosu AWS. Podczas prezentacji Maciej skorzystał z serwisu zbudowanego z użyciem serverlessowego Boilerplate autorstwa The Software House oraz skorzystał z takich usług AWS jak API Gateway, DynamoDB, Lambda, StepFunctions czy SQS. Następnie omówił podejście do testowania rozwiązania. Dzięki prezentacji możecie poznać wady i zalety LocalStack. A na koniec Maciej pokazuje przepływ testowy w GitHub Actions, który zwiększy pewność przyszłych zmian.
Projektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa aplikacjiAntoni Orfin
Część pierwsza prezentacji pochodzącej z warsztatów skupiających się na zagadnieniach projektowania i wytwarzania wysokowydajnych i skalowalnych serwisów webowych.
Prezentacja opisuje problemy związane z warstwą aplikacji:
- Rodzaje skalowania
- Architektury nastawione na zapewnienie wysokiej wydajności i skalowalności
- Zagadnienia Load-Balancingu
- Metody cache'owanie - n-Tier Cache, Varnish, Redis
- Service Oriented Architecture
[PL] Service objecty to za mało - jak żyć z Railsami?Andrzej Krzywda
Slajdy z prezentacji na DRUG #105 (zapraszamy co trzeci poniedziałek każdego miesiąca do Wrocławia).
Podczas prezentacji omawiany był etap serwisy i serwisy+ jaki można zobaczyć w wielu projektach Rails. Wskazuję na zalety tego podejścia, ale też wiele nierozwiązanych problemów.
Zanim jednak rzucimy się na kolejne kroki warto zobaczyć las zamiast pojedynczych drzew.
Tym lasem jest Domain Driven Design połączone z CQRS.
Warto zobaczyć jak wygląda taki DDD projekt aby się upewnić czy chce się w tą stronę iść.
Szczęśliwie już mamy taki nietrywialny projekt:
https://github.com/RailsEventStore/ecommerce
Warto go uruchomić, przejrzeć kod - wziąć przykładowy issue do zrobienia. A dopiero po tych doświadczeniach wdrażać kolejne kroki u siebie.
Najlepszą strategią może być strategia "readmodelowa" oparta o eventy.
4Developers 2015: Skalowanie i integracja systemów w asynchronicznym stylu - ...PROIDEA
Szymon Szylhabel
Language: Polish
Jeżeli zastanawiasz się jakie pułapki kryje asynchroniczna komunikacja lub masz wątpliwości czy ją zastosować - to dobrze trafiłeś - jestem tu po to, by rozwiać Twoje wątpliwości. Podczas prezentacji przedstawię różne podejścia do projektowania systemów bazujących na komunikacji asynchronicznej oraz konsekwencje wynikające z ich wdrożenia.
Od strony praktycznej przyjrzymy się szynom danych jak i technologiom, które je wspierają, między innymi pojawi się Azure ServiceBus w wersji „On Premise”, która pozycjonowana jest przez Microsoft jako następca MSMQ.
LocalStack to framework udostępniający łatwe w użyciu mocki usług stosu AWS. Podczas prezentacji Maciej skorzystał z serwisu zbudowanego z użyciem serverlessowego Boilerplate autorstwa The Software House oraz skorzystał z takich usług AWS jak API Gateway, DynamoDB, Lambda, StepFunctions czy SQS. Następnie omówił podejście do testowania rozwiązania. Dzięki prezentacji możecie poznać wady i zalety LocalStack. A na koniec Maciej pokazuje przepływ testowy w GitHub Actions, który zwiększy pewność przyszłych zmian.
Projektowanie wysokowydajnych i skalowalnych serwisów WWW - Warstwa aplikacjiAntoni Orfin
Część pierwsza prezentacji pochodzącej z warsztatów skupiających się na zagadnieniach projektowania i wytwarzania wysokowydajnych i skalowalnych serwisów webowych.
Prezentacja opisuje problemy związane z warstwą aplikacji:
- Rodzaje skalowania
- Architektury nastawione na zapewnienie wysokiej wydajności i skalowalności
- Zagadnienia Load-Balancingu
- Metody cache'owanie - n-Tier Cache, Varnish, Redis
- Service Oriented Architecture
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...Michal Furmankiewicz
Azure oferuje wiele platform na których możesz uruchomić swoją aplikację. Każda ma swoje zalety i wady. Zrobiłem przegląd tych platform dla Ciebie. W prezentacji wyrażam swoją prywatną opinię.
Wprowadzenie do Kubernetesa oraz omówieni korzyści K8S w kontekście mojego doświadczenia z dwóch startupów, jeden z branży mobile ecommerce i jeden FinTech.
Prezentacja dotyczy architektury aplikacji internetowych od strony back-endu oraz front-endu działającego w środowisku wykonania przeglądarek internetowych.
Omówienie podstawowych wzorców projektowych oraz zasad architektonicznych na przykładzie aplikacji ASP.NET, ale w większości niezależnych od stosowanej technologii. Najważniejsze założenia domain-driven design, SOLID principles, itp.
O zagadnieniu:
Czy następuje taki moment w życiu programisty, kiedy może on stwierdzić, że jego warsztat jest już doskonały? Nie, jeżeli pracuje w technologiach internetowych. Ta dziedzina informatyki rozwija się w niesamowicie szybkim tempie, a stworzone wczoraj rozwiązania warto stosować już dziś!
Cel i korzyści spotkania:
Podczas spotkania słuchacze poznają aktualnie wykorzystywane technologie oraz kluczowe umiejętności w produkcji aplikacji internetowych, jak również metody programowania ekstremalnego i techniki zwinnego wytwarzania oprogramowania. Osobom, które dopiero zaczynają swoją przygodę z web development, zostanie przedstawiona propozycja działań, których sumienne podjęcie się gwarantuje odniesienie sukcesu zawodowego.
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...PROIDEA
Jacek Jagieła
Language: Polish
Każda aplikacja potrzebuje przechowywać dane, potrzebuje łatwego i szybkiego do nich dostępu. Rozwój aplikacji stawia nowe wyzwania przed baza danych, coraz więcej rzeczy potrzebujemy zapisać i odczytać. Klienci oczekuja szybkiego wyszukiwania, które będzie dawać "dobre" odpowiedzi. Dalsza ekspansja działu marketingu powoduje wprowadzenie obsługi wielu języków. Każdy klient potrzebuje raportów i agregat do właściwych wniosków w obsługiwanej przez nasz SaaS firmie. Architekt wybrał silnik bazy, który uchodzi za niezniszczalny - udźwignie wszystko zawsze i wszędzie. Czy jedna baza danych wystarczy? W którym momencie nastapi katastrofa - jak jej uniknać i jak się z niej podnieść. Zapoznamy się z wykorzystaniem baz danych w projekcie SaaS - od niewielkiej funkcjonalności - do aplikacji działajacej na wszystkich kontynentach w kilkunastu językach. Zobaczymy o czym nie wolno zapomnieć projektujac bazę danych. Czy SaaS dotyczy tylko klienta i jego oczekiwań? A może pojęcie SaaS powinno nam towrzyszyć na każdym etapie projektowania aplikacji?
Marek Sokołowski @ "Usługi PaaS oraz IaaS - przegląd dostępnego osprzętu i am...Ewa Stepien
Marek Sokołowski, prezentacja pt.:"Usługi PaaS oraz IaaS - przegląd dostępnego osprzętu i amunicji"@ "I Manewry w Chmurze Partnerów Oracle" - 23-24.czerwca 2015, Serock
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...HighSolutions Sp. z o.o.
Prezentacja, która miała miejsce 2018-10-04 w Poznaniu.
Wykonanie: Marek Tenus (HighSolutions)
Temat: "Praktyczne użycie Repository Pattern w Laravel cz. I"
REvolution, czyli o bardziej obiektowym podejściu w RailsachThe Software House
Prezentacja z meetupu Uszanowanko Programowanko #3 http://www.uszanowanko.pl/rubyonrails
REvolution - czyli o bardziej obiektowym podejściu w rozwiązaniach kolejowych
Framework Ruby on Rails pozwala na szybkie i stosunkowo łatwe tworzenie aplikacji webowych w języku Ruby. Można powiedzieć, że podejście zwane “The Rails Way” w wielu przypadkach zdało swój egzamin. Szybko jednak okazało się, że to podejście nie sprawdza się w przypadku bardziej złożonych systemów. Logika biznesowa w kontrolerach, wypasione modele, logika w szablonach… ogólnie mówiąc chaos. Potrzebna była (r)ewolucja...
Autor: Tomek Jasiulek
Każdy kod ewoluuje. Duży produkt zaczyna jako małe niewinne MVP, by powoli i (oby) iteracyjnie rozrastać się do 'dorosłej' postaci. Równocześnie ze wzrostem produktu od strony 'ficzerów' rośnie jego wewętrzna komplikacja. Powstaje architektura - czasem zła, czasem dobra. Nowe API Getresponse'a jest gdzieś w trakcie tej drogi, juz po kilku iteracjach, juz nie jako MVP. Chciałbym podzielić się doświadczeniem z procesu budowania architektury naszego API, wyboru i implementacji rozwiązań architektonicznych oraz sposobu mierzenia efektywności naszych decyzji.
Serverless w Chmurze. Azure Functions vs AWS Lambda. Porównanie dwóch najwięk...Michal Furmankiewicz
Serverless to dziś bardzo pojemny termin. Niektórzy, niesłusznie, kojarzą go tylko z funkcjami a koncepcja jest szersza i co chwilę dostawcy chmurowi pokazują jakie inne usługi mogą działać w świecie serverless. Tym razem my też się skupimy na funkcjach. W czasie sesji pokażemy 4 krótkie dema by pokazać jak różni się tutaj Azure i AWS i co dobrego znajdziecie u każdego vendora a co mogłoby działać lepiej. A dobroci i smaczków jest wiele:) Ja skupię się na Azure, Przemek Malak na AWS.
Audit logs are an often requested features in many apps.
When you use event sourcing, adding an event log is fairly simple.
Here I'm showing how I'm adding an audit log for an Order in an Ecommerce application. It's a Ruby on Rails application implemented using DDD and CQRS and Event Sourcing
Event-driven is about having modules which are communicating via messages (events and commands).
There's nothing that forces you to go microservices if you want to go event-driven. In fact, it's actually not needed in most cases.
Learn more at http://railsarchitects.com
More Related Content
Similar to [PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami?
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...Michal Furmankiewicz
Azure oferuje wiele platform na których możesz uruchomić swoją aplikację. Każda ma swoje zalety i wady. Zrobiłem przegląd tych platform dla Ciebie. W prezentacji wyrażam swoją prywatną opinię.
Wprowadzenie do Kubernetesa oraz omówieni korzyści K8S w kontekście mojego doświadczenia z dwóch startupów, jeden z branży mobile ecommerce i jeden FinTech.
Prezentacja dotyczy architektury aplikacji internetowych od strony back-endu oraz front-endu działającego w środowisku wykonania przeglądarek internetowych.
Omówienie podstawowych wzorców projektowych oraz zasad architektonicznych na przykładzie aplikacji ASP.NET, ale w większości niezależnych od stosowanej technologii. Najważniejsze założenia domain-driven design, SOLID principles, itp.
O zagadnieniu:
Czy następuje taki moment w życiu programisty, kiedy może on stwierdzić, że jego warsztat jest już doskonały? Nie, jeżeli pracuje w technologiach internetowych. Ta dziedzina informatyki rozwija się w niesamowicie szybkim tempie, a stworzone wczoraj rozwiązania warto stosować już dziś!
Cel i korzyści spotkania:
Podczas spotkania słuchacze poznają aktualnie wykorzystywane technologie oraz kluczowe umiejętności w produkcji aplikacji internetowych, jak również metody programowania ekstremalnego i techniki zwinnego wytwarzania oprogramowania. Osobom, które dopiero zaczynają swoją przygodę z web development, zostanie przedstawiona propozycja działań, których sumienne podjęcie się gwarantuje odniesienie sukcesu zawodowego.
4Developers 2015: Baza danych w aplikacji typu SaaS - błędy w projektowaniu -...PROIDEA
Jacek Jagieła
Language: Polish
Każda aplikacja potrzebuje przechowywać dane, potrzebuje łatwego i szybkiego do nich dostępu. Rozwój aplikacji stawia nowe wyzwania przed baza danych, coraz więcej rzeczy potrzebujemy zapisać i odczytać. Klienci oczekuja szybkiego wyszukiwania, które będzie dawać "dobre" odpowiedzi. Dalsza ekspansja działu marketingu powoduje wprowadzenie obsługi wielu języków. Każdy klient potrzebuje raportów i agregat do właściwych wniosków w obsługiwanej przez nasz SaaS firmie. Architekt wybrał silnik bazy, który uchodzi za niezniszczalny - udźwignie wszystko zawsze i wszędzie. Czy jedna baza danych wystarczy? W którym momencie nastapi katastrofa - jak jej uniknać i jak się z niej podnieść. Zapoznamy się z wykorzystaniem baz danych w projekcie SaaS - od niewielkiej funkcjonalności - do aplikacji działajacej na wszystkich kontynentach w kilkunastu językach. Zobaczymy o czym nie wolno zapomnieć projektujac bazę danych. Czy SaaS dotyczy tylko klienta i jego oczekiwań? A może pojęcie SaaS powinno nam towrzyszyć na każdym etapie projektowania aplikacji?
Marek Sokołowski @ "Usługi PaaS oraz IaaS - przegląd dostępnego osprzętu i am...Ewa Stepien
Marek Sokołowski, prezentacja pt.:"Usługi PaaS oraz IaaS - przegląd dostępnego osprzętu i amunicji"@ "I Manewry w Chmurze Partnerów Oracle" - 23-24.czerwca 2015, Serock
Laravel Poznań Meetup #7 - "Praktyczne użycie Repository Pattern w Laravel cz...HighSolutions Sp. z o.o.
Prezentacja, która miała miejsce 2018-10-04 w Poznaniu.
Wykonanie: Marek Tenus (HighSolutions)
Temat: "Praktyczne użycie Repository Pattern w Laravel cz. I"
REvolution, czyli o bardziej obiektowym podejściu w RailsachThe Software House
Prezentacja z meetupu Uszanowanko Programowanko #3 http://www.uszanowanko.pl/rubyonrails
REvolution - czyli o bardziej obiektowym podejściu w rozwiązaniach kolejowych
Framework Ruby on Rails pozwala na szybkie i stosunkowo łatwe tworzenie aplikacji webowych w języku Ruby. Można powiedzieć, że podejście zwane “The Rails Way” w wielu przypadkach zdało swój egzamin. Szybko jednak okazało się, że to podejście nie sprawdza się w przypadku bardziej złożonych systemów. Logika biznesowa w kontrolerach, wypasione modele, logika w szablonach… ogólnie mówiąc chaos. Potrzebna była (r)ewolucja...
Autor: Tomek Jasiulek
Każdy kod ewoluuje. Duży produkt zaczyna jako małe niewinne MVP, by powoli i (oby) iteracyjnie rozrastać się do 'dorosłej' postaci. Równocześnie ze wzrostem produktu od strony 'ficzerów' rośnie jego wewętrzna komplikacja. Powstaje architektura - czasem zła, czasem dobra. Nowe API Getresponse'a jest gdzieś w trakcie tej drogi, juz po kilku iteracjach, juz nie jako MVP. Chciałbym podzielić się doświadczeniem z procesu budowania architektury naszego API, wyboru i implementacji rozwiązań architektonicznych oraz sposobu mierzenia efektywności naszych decyzji.
Serverless w Chmurze. Azure Functions vs AWS Lambda. Porównanie dwóch najwięk...Michal Furmankiewicz
Serverless to dziś bardzo pojemny termin. Niektórzy, niesłusznie, kojarzą go tylko z funkcjami a koncepcja jest szersza i co chwilę dostawcy chmurowi pokazują jakie inne usługi mogą działać w świecie serverless. Tym razem my też się skupimy na funkcjach. W czasie sesji pokażemy 4 krótkie dema by pokazać jak różni się tutaj Azure i AWS i co dobrego znajdziecie u każdego vendora a co mogłoby działać lepiej. A dobroci i smaczków jest wiele:) Ja skupię się na Azure, Przemek Malak na AWS.
Similar to [PL] PRUG Luty 2022 - Service objecty to za mało - jak żyć z Railsami? (20)
Audit logs are an often requested features in many apps.
When you use event sourcing, adding an event log is fairly simple.
Here I'm showing how I'm adding an audit log for an Order in an Ecommerce application. It's a Ruby on Rails application implemented using DDD and CQRS and Event Sourcing
Event-driven is about having modules which are communicating via messages (events and commands).
There's nothing that forces you to go microservices if you want to go event-driven. In fact, it's actually not needed in most cases.
Learn more at http://railsarchitects.com
We are a remote and async team of 18 developers. Our work and collaboration relies on Slack (before that we'ved used IRC).
Here are some lessons we learnt.
Rails is optimised for the first weeks of development. At the later phases it's no longer the speed of adding new views and data that matters. It's often more about the different (and changing!) ways of using the data. The business logic gets more complicated.
DDD has answers to those problems. Detecting the bounded contexts is the crucial skill. Choose which parts of the app leave as CRUD and which could go into more of the tactical DDD.
This talk was delivered at the PHPers meetup in Wroclaw, 10 August 2015.
I presented a set of techniques which help you transition from a legacy codebase to DDD. I focused more on the strategic DDD patterns like bounded contexts.
The main idea in such refactorings is to:
1. List all your (potential) bounded contexts
2. Decide which ones are deserving the DDD tactical patterns
3. Decide which ones can stay as CRUD
4. Communicate between the BCs via events
Rails applications are always fun for the first 2 months. After some time, the initial conventions don't always fit the project. The controllers get fat, the models get fat, and the views gather more logic. How to deal with this complexity?
We'll show how to apply typical refactoring recipes to put the code back in order. You'll see examples of service objects and other patterns. All of that using the RubyMine refactoring support, extended with custom shortcuts.
The slides from the JetBrains webinar - http://info.jetbrains.com/RubyMine-Webinar-June2015-registration.html
I'm working on techniques that help you safely refactor your Rails codebase. At the start I'm mostly focusing on the Rails controllers.
You can sign up at http://rails-refactoring.com/ for free rails refactoring lessons.
Meanwhile, please send me more examples of Rails controllers, so that I can discover better patterns.
andrzejkrzywda@gmail.com
42. Rails+
DDD+CQRS+Events
•To są uniwersalne metody, nic
wymyślonego tylko w świecie Ruby
•Sprawdzone w Java, .NET, PHP, Python
•Mamy dostęp do nich wszystkich z
dylematami
44. Rails+CQRS
Command Query Responsibility
Segregation
• Railsy idealnie pasują do podziału na odczyty i zapisy
• Odczyty to dedykowane zdenormalizowane "modele" per raport (read model)
• szybsze niż cache
• bez join'ów
• OrderList
• CustomerList
• Ledger
• Trudne do zaakceptowania dla Railsowca, bo:
• dużo denormalizacji danych
• DRY złamane
• Używamy ActiveRecord ale bez walidacji, callbacków itp
• Zapisy to komendy wysyłane do modułów biznesowych (DDD)
46. Domain Driven Design
•Moduły biznesowe odzwierciedlające biznesowe działy
•Mówimy wtedy językiem biznesowym
•Nie ma tu zależności do frameworka
•Dużo duplikacji, bo:
•Order w każdym module znaczy co innego
•podobnie Customer
•podobnie Product
•Każda zmiana jest propagowana jako event, bo:
•inne moduły są tym zainteresowane
•eventy zastępują nam persistence (event sourcing
47. Event sourcing
•Odtwarzamy stan agregatów z krótkiej
listy eventów
•Pełna historia
•Minus:
•Trzeba nauczyć się radzić ze zmianą
schematu eventów (wersjonowanie)