Overview
Granite is a web development framework for Node.js. The focus of
the framework is providing the foundation for building enterprise
level applications and services. This is achieved by providing the
well designed OOP architecture with solid structural and behavioral
guidelines and enforcements. Granite takes it seriously, therefore
provides an out of the box support for the broad spectrum of service
lifecycle management techniques that allows to bundle each service
with things like documentation, testing and a slew of other aspects.
This unique architecture outlines services as the primary entities
that encompass not only the service implementation but also all the
things that come with it, such as documentation, tests and so on.
These things are well integrated with the framework which allows for
a very rapid creation of extremely well designed and well decoupled
services with a rock solid architecture. Granite also bundles some
unique approaches and systems, such as the class composition system
along with a unique, code driven approach for crafting UI/UX interfaces.
##Concepts
The Granite framework is built around the concept of being entirely
code driven. That means it diverts from the modern ideas of heavily
using markup languages and declarative techniques, such as HTML, CSS,
QML and other of a kind. Instead, it provides a powerful foundation
for expressing everything in terms of coding, objects and events in
an asynchronous fashion, mostly, in order to match the Node.js idioms.
The Granite was engineered for perfectly matching the one-man-show
scenario, when one or more programmers have to do the job of an entire
team. The framework provides a unique way of the client/server site
integration that allows for entirely transparent data, event and code passing.
The overall architecture of Granite makes it perfect for engineers.
Granite makes hard emphasis on the decomposed objective architecture
in order to provide enterprise level design and make the factor of
the reusable code sky high. It also embeds or provides support for
the community standard sort of toolkits, such as NPM and Bower package managers.
##Highlights
In this paragraph we will give you a brief overview of the features
that make Granite what it is. Most of the highlights will refer to
the files containing source code, either as a part of implementation
or as a usage example; please bear with us on this one, as it is the
most up-to-date sort of documentation that we have, due to the fact
that our project is young and its design changes and evolves rapidly.
Below follows a bullet-list of highlights currently implemented. We
also strongly encourage you to browse over the project source codes
and discover more pieces there, ones that haven't been documented yet.
Use http://ts33kr.github.io/granite for browsing.
- Entire code base is written in CoffeeScript with strong OOP; 100% coverage with docs
- Highly advanced JS code emission, translation, transitioning and optimization platform
- Strong OOP model with the unique, dynamic and controlled multiple inheritance approach
- Advanced, composable architecture with high factor of code reuse, employing SOA paradigm
- Natively keeping client-side and server-side code within same class, as normal methods
- Bi-directional, real-time communication channel; entirely transparent, as method calls
- Strong layer for implementing conventional application APIs with HTTP and REST, and more
- Load balancing, with the sticky sessions, provided out-of-the box and immediatelly there
- Real clustering across machines and networks; masters/slaves can come and go in any order
- Scalability technologies, such as clustering and load balancing require no configuration
- Solid architecture for deining services with client & server complements and interactions
- Embedded support for automatic usage of Bower packages on an isolated, per-service basis
- Unified configuration system, with scopes, shipped out-of-the box and used internally too
- Support Mongo as mix-in service component, with zero-to-indefinite configuration approach
- Support Redis as mix-in service component, with zero-to-indefinite configuration approach
- Configurable error recovery, including an automatic rebooting of a failed node, et cetera
- Built-in memory node with a configurable limit, that reboots node if memory gets exceeded
- Localization and translation toolkit shipped out-of-the box, using YAML to store messages
- The 18n toolkit is equally available on server and client; can use many tables per service
- Centralized across entire application (all nodes) event bus; persisting history to Mongo
##Disclaimer
Before considering using Granite framework, you should be well aware
of some of the specifics regarding its usage. The first and foremost
is the fact that Granite design and architecture is fluctuating at
a very rapid rate. In order to achieve the clean and effective design
we change different aspects of the architecture and experimentally
verify the viability of one or another approach. For this very reason
the framework is not covered by any tests at the time of writing this.
But rest assured, once the architecture is solid enough, framework
will be covered with all sorts of test cases that ensure its internal
integrity. One other thing to consider is that you must be prepared to
traverse the framework code in order to discover functionality and a
way of usage. The entire code base is 100% documented. But materials
targeted towards the end users, such as user guide or manual are not
there just yet. So you have to be ready to go digging deep into code.
What should be also mentioned is that framework is under the active
development and we would appreciate the feedback very much. So you
can always count on a friendly support ready to give you a hand with it!