{"version":1,"pages":[{"id":"-LBujWpFU1mLePNRmVID","title":"Revo Framework documentation","pathname":"/","siteSpaceId":"sitesp_YVJtl","description":""},{"id":"-LBwLhgFak4N6ATROtMB","title":"Overview","pathname":"/general/overview","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"General"}]},{"id":"-LWCC7fYq6WpvBpb1gnr","title":"Design overview","pathname":"/general/overview/design-overview","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"General"},{"label":"Overview"}]},{"id":"-LWC1OCPYwJcV-tLUWJr","title":"Project structure","pathname":"/general/overview/project-structure","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"General"},{"label":"Overview"}]},{"id":"-LWC3VOUGYp0EexfYcyJ","title":"Features","pathname":"/general/features","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"General"}]},{"id":"-LWC3gtW8UdGXn7Bv5Fv","title":"Super-short example","pathname":"/general/super-short-example","siteSpaceId":"sitesp_YVJtl","description":"So how does it actually look when writing an application with Revo?","breadcrumbs":[{"label":"General"}]},{"id":"-LBwLmCEsJQ_wmzP-R8F","title":"Getting started","pathname":"/general/getting-started","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"General"}]},{"id":"-LWBxbA_lpljrwUo1QGJ","title":"Example: Task list app","pathname":"/general/example-simple-to-dos-task-list-app","siteSpaceId":"sitesp_YVJtl","description":"This quick guide walks you through recreating the simple TO-DOs (task list) app.","breadcrumbs":[{"label":"General"}]},{"id":"-LBwMeqs74lHEpoVpEBW","title":"FAQ","pathname":"/general/faq","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"General"}]},{"id":"-LL07fN0SVYT6A-0FDTZ","title":"Configuration and boostrapping","pathname":"/reference-guide/configuration","siteSpaceId":"sitesp_YVJtl","description":"Prior to bootstrapping a Revo application, one must first set up the framework and specify its configuration, which makes it possible to customize its behavior in a number of ways.","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LL09wTvCHj7TqNNPdFf","title":"Dependency injection","pathname":"/reference-guide/dependency-injection","siteSpaceId":"sitesp_YVJtl","description":"Like many other frameworks, Revo also builds on the principles inversion of control (IoC). For the heavy lifting, the framework uses the open-source Ninject dependency container and injector.","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwKaFpdmISTHo90Qeo","title":"Domain building blocks","pathname":"/reference-guide/domain-building-blocks","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwKh_h4nOj5ahTO0MO","title":"Commands and queries","pathname":"/reference-guide/commands-and-queries","siteSpaceId":"sitesp_YVJtl","description":"The framework implements a number of facilities for working with commands, queries and for implementing CQRS.","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwLdGZ9h4X3Qv2IMwc","title":"Events","pathname":"/reference-guide/events","siteSpaceId":"sitesp_YVJtl","description":"Events are one of the most powerful ways of communication used in Revo. The framework offers a few different ways for implementing an event-driven architecture.","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwKpDX-jXujP4KZ8ed","title":"Data persistence","pathname":"/reference-guide/data-persistence","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-M2-uwCThKdaI9FEuMPq","title":"Database migrations","pathname":"/reference-guide/database-migrations","siteSpaceId":"sitesp_YVJtl","description":"Database migrations in Revo are a simple feature how to version database schema.","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwKw1qTWqCtHPuPR-l","title":"Projections","pathname":"/reference-guide/projections","siteSpaceId":"sitesp_YVJtl","description":"Projection are specialized event listeners used for materializing events published by event sourced aggregates into better usable read models.","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwLSkgANgVXdFuhb8v","title":"Authorization","pathname":"/reference-guide/authorization","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBytKcYb1lnBJ1AJotu","title":"Validation","pathname":"/reference-guide/validation","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwMP1Ls6U1yaBUHK0t","title":"Request life-cycle","pathname":"/reference-guide/request-life-cycle","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBz-iaRZJFuKn1yNEkU","title":"Sagas","pathname":"/reference-guide/sagas","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwLWmEv9vyJljMxrow","title":"Jobs","pathname":"/reference-guide/jobs","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwL_24Zk6jJ_4iRQj-","title":"Messaging and integrations","pathname":"/reference-guide/integrations","siteSpaceId":"sitesp_YVJtl","description":"Scale and integrate by publishing and receiving events, commands and queries using common messaging patterns, e.g. with RabbitMQ message queue (using EasyNetQ connector or Rebus service bus).","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwLX_u5b9C9GXCP009","title":"Multi-tenancy","pathname":"/reference-guide/multi-tenancy","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]},{"id":"-LBwLUY8rcSBpEMa-8Gx","title":"Testing","pathname":"/reference-guide/testing","siteSpaceId":"sitesp_YVJtl","description":"","breadcrumbs":[{"label":"Reference guide"}]}]}