CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

22 May, 2023

Database revision vs Event sourcing for tracking changes of entity changes

 Programing Coderfunda     May 22, 2023     No comments   

We are developing a platform where there is the possibility of booking hotels. The booking process can consist of various operations: creation, change of dates, cancellation, confirmation, and so on. We need to have access to the history of booking changes to display this on the front end (for now, only for displaying, who knows what might happen in the future). One of the ways to use this history of changes: Created a booking -> changed the dates -> we show the user the previous dates and current ones. The entity of Booking: { checkInDate: string, checkOutDate: string, amount: number ... +30 fields } Found two approaches: First approach: Versioning the entity at the database level. If our entity is updated, then a copy of the entity is automatically created, but with new fields. In the case of changing the dates of a just created booking, the client will return an array of bookings, each will have all the fields of the booking and an additional field with the status (created, changed dates etc). Pros of this approach: * Faster backend implementation, changes are mostly required at the database level. * One familiar Booking model is used. * Ability to configure rollbacks. * Good performance. Cons: * Difficult to set up auto migration. * The database stores a lot of excess data, which will be returned to the client who does not need them. Second approach: Event-driven architecture There is a described list of possible events that can occur with a booking. An event is created for each operation, which can contain a payload with the data that has changed. In the case of changing the dates of a just created booking, the client will return a booking with an array of events, each of which contains a list of data that has changed. The changed-dates event may contain the previous dates and current ones. Pros: * Only necessary data is stored in the database and returned to the front. * Having a list of described events, the flow becomes transparent, which improves the understanding of the code. * In the event payload, you can add any data, even those not related to the previous booking change. Easier to expand functionality. * Business logic is kept on the backend, the front simply displays the data, business logic does not penetrate the database level. Cons: * Many additional types are added, which need to be used on the front. * More complex backend implementation. Could you suggest which solution is better to choose? Maybe you have a better option?
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook

Related Posts:

  • HTML Paragraphs HTML Paragraphs The HTML <p> element defines a paragraph: Example <p>This is a paragraph.</p><p>This is a… Read More
  • HTML Styles Example I am Red I am Blue I am Big The HTML Style Attribute Setting the style of an HTML element, can be done with the style attrib… Read More
  • HTML Headings Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6 HTML Headings Headings are defined with the <h1> to <h6&… Read More
  • HTML Text Formatting HTML Text Formatting ❮ PreviousNext ❯ Text Formatting This text is bold This text is italic This is subscript and supe… Read More
  • HTML Attributes Attributes provide additional information about HTML elements. HTML Attributes All HTML elements can have attributes Attributes provide … Read More
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Spring boot app (error: method getFirst()) failed to run at local machine, but can run on server
    The Spring boot app can run on the online server. Now, we want to replicate the same app at the local machine but the Spring boot jar file f...
  • Log activity in a Laravel app with Spatie/Laravel-Activitylog
      Requirements This package needs PHP 8.1+ and Laravel 9.0 or higher. The latest version of this package needs PHP 8.2+ and Laravel 8 or hig...
  • Vue3 :style backgroundImage not working with require
    I'm trying to migrate a Vue 2 project to Vue 3. In Vue 2 I used v-bind style as follow: In Vue 3 this doesn't work... I tried a...
  • Laravel auth login with phone or email
          <?php     Laravel auth login with phone or email     <? php     namespace App \ Http \ Controllers \ Auth ;         use ...
  • Enabling authentication in swagger
    I created a asp.net core empty project running on .net6. I am coming across an issue when I am trying to enable authentication in swagger. S...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (68)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

  • Failed to install 'cordova-plugin-firebase': CordovaError: Uh oh - 9/21/2024
  • pyspark XPath Query Returns Lists Omitting Missing Values Instead of Including None - 9/20/2024
  • SQL REPL from within Python/Sqlalchemy/Psychopg2 - 9/20/2024
  • MySql Explain with Tobias Petry - 9/20/2024
  • How to combine information from different devices into one common abstract virtual disk? [closed] - 9/20/2024

Laravel News

  • Sublime Text Releases Update With Support for Right Sidebar - 5/22/2025
  • Enhance Email Validation with Laravel's Fluent Email Rule Object - 5/18/2025
  • Locale-aware Number Parsing in Laravel 12.15 - 5/21/2025
  • Handle Fluent Values as Arrays with Laravel's array() Method - 5/18/2025
  • Chargebee Starter Kit for Billing in Laravel - 5/20/2025

Copyright © 2025 CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda