Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ActiveRecord, DataMapper czy Agregacja encji

Krzysztof Wawer
January 21, 2015
89

ActiveRecord, DataMapper czy Agregacja encji

Krzysztof Wawer

January 21, 2015
Tweet

Transcript

  1. ActiveRecord, DataMapper
    czy Agregacja encji
    Kiedy warto stosować ?
    Krzysztof Wawer

    View Slide

  2. O mnie
    Krzysztof Wawer
    [email protected]
    Github: wafcio
    Twitter: @KrzysztofWawer
    Neubloc Polska

    View Slide

  3. 1. Wzorzecz „ActiveRecord”
    http://www.martinfowler.com/eaaCatalog/activeRecord.html

    View Slide

  4. 2. Wzorzecz „DataMapper"
    http://www.martinfowler.com/eaaCatalog/dataMapper.html

    View Slide

  5. Aplikacja

    View Slide

  6. ActiveModel, Presenter, FormObject
    ActiveModel pozwala na tworzenie dowolnych formularzy =>
    zapis wielu obiektów ActiveRecord nie jest już taki dużym
    problemem
    „Presenter" Jay Fields (1) => „FormObject” CodeClimate (2)
    (1) http:/
    /blog.jayfields.com/2007
    /03/rails-presenter-pattern.html
    (2) http:/
    /blog.codeclimate.com/blog/2012/10/17
    /7-ways-to-
    decompose-fat-activerecord-models/

    View Slide

  7. FormObject
    Order OrderState
    Receiver

    View Slide

  8. FormObject
    OrderForm
    Order
    OrderState

    View Slide

  9. FormObject
    ActiveModel

    View Slide

  10. FormObject
    Virtus
    • rzutowanie atrybutów
    • walidacji (z ActiveModel)

    View Slide

  11. FormObject + 1..n
    Order
    Entry

    View Slide

  12. FormObject
    Reform
    • rzutowanie atrybutów
    (z Virtus)
    • zagnieżdżone atrybuty
    + walidacja

    View Slide

  13. Współdzielona baza danych

    View Slide

  14. Gdy baza danych jest DUŻA

    View Slide

  15. 3. Wzorzecz „Aggregate Entity”
    http://www.drdobbs.com/enterprise-javabeans-201the-aggregate-en/184414592

    View Slide

  16. Dodatkowa warstwa obiektów
    Warstwa danych
    Warstwa obiektów

    View Slide

  17. Domain-Driven Design
    Part II, The Building Blocks of a
    Model-Driven Design
    Chapter 6: The Life Cycle of a
    Domain Object
    AGGREGATES

    View Slide

  18. Entity + Repository + Data
    dostępne gemy
    Datamappify (nie rozwijany od Listopada 2013)
    • ActiveRecord (4.0.x)
    • Sequel
    Edr (nie rozwijany od Maja 2013)
    • ActiveRecord (3.2.x)

    View Slide

  19. Entity + Repository + Data
    dostępne gemy
    Curator
    • mongo
    • riak
    • Memory
    Lotus::Model
    • Sequel
    • Memory

    View Slide

  20. Clean Architecture
    „Clean Architecture” Uncle Bob Martin

    View Slide

  21. Agregacja encji
    Tylko Datamappify implementuje
    Entity Aggregation

    View Slide

  22. Order - Datamappify

    View Slide

  23. Problemy

    View Slide

  24. https:/
    /github.com/fredwu/datamappify

    View Slide

  25. Repozytorium
    http:/
    /hawkins.io/2013/10/implementing_the_repository_pattern/
    Bezpośrednie
    odwzorowanie encji w
    strukturze bazy danych
    Brak agregacji i
    deagregacji danych

    View Slide

  26. Schemat - czy wszystko jest OK ?
    Główna
    Encja
    Repozytorium
    ORM ORM

    View Slide

  27. Po co ORM ?
    Czy elementy ORM są
    potrzebne ?
    obsługa formularzy
    callbacki
    zagnieżdżone atrybuty

    Repozytorium
    ORM ORM
    Główna
    Encja

    View Slide

  28. Po co ORM ?
    Czy elementy ORM są
    potrzebne ?
    obsługa formularzy
    callbacki
    zagnieżdżone atrybuty

    Repozytorium
    ORM ORM
    Główna
    Encja
    DATA DATA

    View Slide

  29. Warstwa DATA
    Wykorzystanie warstwy z ORM do mapowania danych
    ActiveRecord -> arel
    Sequel
    rom -> axiom
    rom-sql -> sequel
    rom-mongo -> moped
    Mongoid -> moped
    MongoMapper -> mongo

    View Slide

  30. FormObject czy Encja
    FormObject
    Agregacja kilku modeli w
    jednym formularzu
    Gdy agregacja modeli
    występuje w jednym lub kilku
    ściśle określonych miejscach
    aplikacji
    Struktura bazy danych jest
    ważna
    Encja
    Agregacja danych z kilku
    tabel, dokumentów, …
    Gdy w większości aplikacji
    zależności modeli są ze
    sobą mocno powiązane
    Nie musimy przejmować
    się strukturą bazy

    View Slide

  31. Pytania ???

    View Slide