Duplication
"Hetzelfde maar dan anders"
Stel je hebt een mooie website in elkaar geklust...
- Vertalingen?
- Input van formulieren opslaan per taal?
- Duplicatie?
- Publiceren functionaliteit?
- Afschermingen binnen de website?
- Master- en local objecten?
- Versiebeheer en versies terugzetten?
- Veranderingen in objecten goed/afkeuren?
Maar de klant vraagt om:
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Master object:
Local object 1:
Local object 2:
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Master object:
Local object 1:
Local object 2:
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Master object:
Local object 1:
Local object 2:
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Draft
Document
Content
Content
Content
Published
Document
Content
Content
Content
Master object:
Local object 1:
Local object 2:
Versioning:
Hoe is dit overzichtig te implementeren?
- Welke soorten duplicaties hebben we?
Soorten duplicaties
- Vertalingen van tekst
- Vertalingen van input
- Losgekoppeld dupliceren
- Gekoppeld dupliceren
- Versiebeheer simpel
- Versiebeheer met versies terugzetten
Vertalingen van tekst
- I18n gem
- Overzichtelijk met vertaalbestanden
- Geïntegreerd in Rails
Vertalingen van input
- globalize gem
- Officieel gesupporte Rails versies: 4.2.10, 5.1.6, 5.2.1
- Slaat input op op basis van de ingestelde locale
- In te stellen welke attributen globaal en locale-afhankelijk zijn
- Fallbacks zijn in te stellen
Losgekoppeld dupliceren
- amoeba gem
- Officieel gesupporte Rails versies: 4.x, 5.0, 5.1
- Dupliceren van objecten inclusief geassocieerde objecten
- In te stellen welke attributen wel en niet overgekopieërd moeten worden
- Geassocieerde objecten zijn te includen/excluden
Gekoppeld dupliceren
- amoeba gem met koppeling tussen origineel en kloon
Versiebeheer simpel
- PaperTrail gem (Rails 4.2-6.0(!) ) of Audited gem (Rails 4.2-5.2)
- Overeenkomsten
- Beiden slaan de attributen van een object op als een apart versie-object
- Beiden zijn in staat om versies te instantiëren als objecten
- Bij beiden is een max_versions in te stellen
- Overeenkomsten
Versiebeheer simpel
- PaperTrail gem (Rails 4.2-6.0(!) ) of Audited gem (Rails 4.2-5.2)
-
Verschillen
- PaperTrail heeft meer controle over wanneer wel en geen versie opslaan
- PaperTrail slaat pre-change versie op, Audited post-change
- Audited kan geassocieerde objecten opslaan
- Audited slaat attributen standaard op in JSON, PaperTrail in YAML
-
Verschillen
Versiebeheer met versies terugzetten
- Audited gem (vanwege opslaan van geassocieerde objecten)
- Combineren met soft-delete
- Paranoia gem (Rails 3/4/5) en Discard gem (Rails 4.2, 5.0, 5.1)
- Paranoia overschrijft ActiveRecord delete en destroy methodes (permanent vernietigen mogelijk met really_delete en really_destroy)
- Discard heeft discard methode
- Let op: soft-deleted users kunnen nog inloggen (overschrijf Devise active_for_authentication methode)
- Paranoia gem (Rails 3/4/5) en Discard gem (Rails 4.2, 5.0, 5.1)
Tips om het overzichtelijk te houden:
- Gebruik duidelijke namen voor variabelen en methodes
- Methodes om te onderscheiden welk object we hebben
- Stap tijdig over op soft-deletes wanneer versie terugzetten een mogelijkheid kan zijn
- Crosslinks tussen gekoppelde objecten, ook tussen geassocieerde objecten
- max_versions definiëren om database te onderhouden
Duplication
By mjorden
Duplication
- 23