Get started by learning concepts and exploring example applications.
- - - -The code is automatically generated for all the languages of
- your project, as you update the model.
- Forget about missed hashCode() or equals().
-
With - Protobuf support, a model can be extended preserving backward and - future compatibility with client- and server nodes of your application.
-Transforming a single-tenant application into
- a multi-tenant one requires a few lines of code. You don't have to introduce
- tenantId parameters for all the calls.
Add and remove fields while keeping binary compatibility with older code;
- handle new opportunities with oneof, natively provided by Protobuf.
- Build new Projections based on the whole event history of the system.
Concepts from the DDD books, such as
- Aggregate,
- Projection,
- ProcessManager,
- Repository are right in the code.
- Ever guessed how to cook a BoundedContext?
- Guess no more!
-
Constraints defined in a business model are - automatically checked for commands, events, and entity states. - Learn more.
-Use freely in closed-source projects. - You are also welcome to contribute to improving our framework.
- -All the data types are immutable, which makes it easy to cache - and share. Mutations are performed only in response - to incoming messages using clearly defined cycles.
-Should you need CustomerId or
- WorkEstimate value, you get it within seconds,
- for multiple languages. You can also have binary storage format
- and automatic JSON support.
-
With CQRS and Event-Driven Architecture you can separate development workflows. - More experienced team members can concentrate on the core domain and the - write-side tasks while the read–side and UI are created by the rest - of the team.
-Get ongoing guidance when implementing your project - with Spine
-We become closer for some extra money
-Let us help you start your project with - our framework
-Apply Domain-Driven Design smarter, with less code.
-Loading...
-We are redirecting you
to the order page
Please try again. If the issue persists, contact us at - {{ site.data.support.emailDev | html_encode_email }}.
-Posted on {{ page.date | date: '%B %d, %Y' }}
- {% endif %} - {{ content }} -- Subscribe to - @SpineEngine - on Twitter to get notified of the framework updates.
-Spine Event Engine is a framework for building cloud - applications. It helps applying Domain-Driven Design faster and smarter, - with less code. -
- -Our goal is to free developers from writing boilerplate code as much as possible. - The framework helps and encourages applying architectural patterns such as - Message-Driven Architecture, Event Sourcing, CQRS, and Microservices.
- -The data model is defined in Protobuf and compiled into performant code in - multiple languages. The backend logic is written in Java. - Client libraries are available for - Java, - JavaScript, and - Dart. -
-These are the principles our framework is based on:
-The full list of open-source libraries that we use is available from - the automatically generated - dependency report page. -
-Blog posts:
-To contribute to Spine Event Engine, please fork the GitHub Spine Event Repository repository. -
Email: {{ site.data.support.email | html_encode_email }}
diff --git a/css/style.scss b/css/style.scss deleted file mode 100755 index 5cc40a9e9..000000000 --- a/css/style.scss +++ /dev/null @@ -1,49 +0,0 @@ ---- -# Front matter comment to ensure Jekyll properly reads file. ---- - - -@import url("https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/smoothness/jquery-ui.css"); - -@import "fonts/_roboto"; - -@import "base/_mixins"; -@import "base/_config"; -@import "base/_layout"; -@import "base/_reset"; -@import "base/_colors"; -@import "base/_code-highlight"; -@import "base/_code-theme-switcher"; -@import "base/_footer-at-bottom"; -@import "base/_common"; -@import "base/_text"; -@import "base/_override"; - -@import "modules/_buttons"; -@import "modules/_doc-side-nav"; -@import "modules/_release-notes-side-nav"; -@import "modules/_footer"; -@import "modules/_hero"; -@import "modules/_nav"; -@import "modules/_nav-search"; -@import "modules/_doc-next-prev-nav"; -@import "modules/_cookies"; -@import "modules/_feature-cards"; -@import "modules/_loader"; -@import "modules/snackbar"; -@import "modules/redirect-screen"; - -@import "pages/_docs"; -@import "pages/_blog"; -@import "pages/_faq"; -@import "pages/_landing"; -@import "pages/_about"; -@import "pages/_contribute"; -@import "pages/_privacy"; -@import "pages/_licenses"; -@import "pages/_search-result"; -@import "pages/_release-notes"; -@import "pages/_getting-help"; - -// Styles from submodule `_docs/_sass` folder. -@import "docs"; diff --git a/faq/index.html b/faq/index.html deleted file mode 100644 index cd5a898a6..000000000 --- a/faq/index.html +++ /dev/null @@ -1,164 +0,0 @@ ---- -layout: default -group: 'navigation' -title: FAQ -bodyclass: faq -headline: 'Frequently Asked Questions' ---- -We want to give our users a framework that provides an infrastructure - and connects the “service” parts of applications with their “brains”, - or in other words, business logic.
-As Protocol Buffers are already implemented in a variety of languages, they make - interoperability between polyglot applications in your architecture much simpler. - If you’re introducing a new service with one in Ruby or Go, or even communicating with a - backend written in Node or Clojure, you simply have to hand the proto file to the code - generator written in the target language, and you have some nice guarantees about - safety and interoperability between those architectures. -
-The finer points of platform-specific data types should be handled for you in the target - language implementation, and you can get back to focusing on your - tasks instead of matching up fields and data types in your ad hoc JSON encoding and - decoding schemes.
-Have a look at the comparison matrix - created by Kenton Varda, the author of Protobuf v2 and Cap'n Proto. - Here are the main features that make Protobuf the best choice for our framework:
-Also, proven success of Protobuf technology which Google gained over the years of its - successful usage is a major factor for choosing Protobuf rather than other alternatives.
-The framework is based on and supports only - - proto3 dialect.
-Here are our plans for the future versions of Spine:
-We shall also concentrate on coverage of popular programming languages - and technologies:
-No, and we don't have plans to support it.
-If you are going to add Spine to an existing Maven-based projects, - most likely it would be implemented as a Bubble Context.
-If so, you can have a Gradle-based sub-project with which the outer Maven-based project integrates.
-Look up for answers or post your questions under - Spine-Event-Engine - tag on Stack Overflow.
-Discuss your issues in the mailing list.
-Step 1.
-Describe commands, events, and state of entities using - Protobuf. -
-Step 2.
-Step 3.
-Focus on business logic rather than “plumbing”.
- A Command will be delivered to only one Aggregate.
- Projections will get all Events they need.
- ProcessManagers will cover more complex scenarios. Storage,
- message delivery, and other environment matters are isolated from the main code.
-
Step 4.
-In-memory and JDBC-based storage implementations allow to implement and test - the core logic quickly. Adopt your application to selected deployment - environment(s) with a few lines of code. -
-On page load, the color will be set based on the cookie value. - * If the cookie value is `null`, the default color will be set. - */ - function changeCodeColorTheme() { - const cookieValue = Cookies.get(cookieColorName); - - if (cookieValue == null) { - setDefaultCookieValue(); - } else { - colorDark === cookieValue && setDarkTheme(); - colorLight === cookieValue && setLightTheme(); - } - - $('.' + switcherClass).click(function() { - if ($(this).hasClass(colorDark)) { - setLightTheme(); - } else { - setDarkTheme(); - } - }); - } - - /** - * Sets the default `dark` color to the cookie. - */ - function setDefaultCookieValue() { - Cookies.set(cookieColorName, defaultColor); - setDarkTheme(); - } - - /** - * Sets dark theme color. - */ - function setDarkTheme() { - loadCodeStyles(darkStylesUrl); - $pre.css('opacity', '1'); - updateSwitcher(colorDark); - } - - /** - * Sets light theme color. - */ - function setLightTheme() { - loadCodeStyles(lightStylesUrl); - $pre.css('opacity', '1'); - updateSwitcher(colorLight); - } - - /** - * Loads theme style sheets to highlight the code. - * - *
`