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

ActiveRecord, DataMapper czy Agregacja encji

Krzysztof Wawer
January 21, 2015
94

ActiveRecord, DataMapper czy Agregacja encji

Krzysztof Wawer

January 21, 2015
Tweet

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. 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 full-size slide

  6. FormObject
    Order OrderState
    Receiver

    View full-size slide

  7. FormObject
    OrderForm
    Order
    OrderState

    View full-size slide

  8. FormObject
    ActiveModel

    View full-size slide

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

    View full-size slide

  10. FormObject + 1..n
    Order
    Entry

    View full-size slide

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

    View full-size slide

  12. Współdzielona baza danych

    View full-size slide

  13. Gdy baza danych jest DUŻA

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. 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 full-size slide

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

    View full-size slide

  19. Clean Architecture
    „Clean Architecture” Uncle Bob Martin

    View full-size slide

  20. Agregacja encji
    Tylko Datamappify implementuje
    Entity Aggregation

    View full-size slide

  21. Order - Datamappify

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    Repozytorium
    ORM ORM
    Główna
    Encja

    View full-size slide

  26. 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 full-size slide

  27. 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 full-size slide

  28. 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 full-size slide