Author: dleangen
Date: Fri Feb 17 07:44:31 2017
New Revision: 1783338

URL: http://svn.apache.org/viewvc?rev=1783338&view=rev
Log:
Introduction of README file to explain the objective of this experimental module

Signed-off-by: David Leangen <dlean...@apache.org>

Added:
    felix/trunk/converter/schematizer/readme.txt   (with props)

Added: felix/trunk/converter/schematizer/readme.txt
URL: 
http://svn.apache.org/viewvc/felix/trunk/converter/schematizer/readme.txt?rev=1783338&view=auto
==============================================================================
--- felix/trunk/converter/schematizer/readme.txt (added)
+++ felix/trunk/converter/schematizer/readme.txt Fri Feb 17 07:44:31 2017
@@ -0,0 +1,71 @@
+# Apache Felix Converter - Schematizer module
+
+## Overview
+
+The Schematizer follows the concept of "DTO-as-Schema", meaning the idea that
+the DTO describes the data schema, and using this idea to make the schema a
+first-class citizen in the design and implementation of a domain model.
+
+## DTO-as-Schema
+
+DTO-as-Schema (DaS) takes a step away from common Object Oriented (OO) design 
principles.
+When learning OO programming, common convention was to "hide away" the data in 
+order to "protect" it from the wild. Instead of accessing a field directly, the
+idea was to make a field private, and provide "getters" and "setters". The 
getters
+and setters were supposed to ensure the invariants of the object. Often, 
however,
+we would end up with code like this:
+
+```java
+public class SomeClass {
+    private String value;
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue( String aValue ) {
+        value = aValue;
+    }
+}
+```
+
+The above is really just a complicated and misleading way of doing this:
+
+```java
+public class SomeClass {
+    public String value;
+}
+```
+
+Even when OO-style classes are well written, it can be argued that the idea of 
data-hiding
+is a farce anyway when dealing with distributed systems. The reason is because 
the classes
+need to be serialized before they are put on the wire, and deserialzed again 
by the remote system.
+This requires exposing the system in the form of an "API", these days usually 
as a REST API.
+So, when the system is seen as a whole, we recognize that it is simply not 
possible to have
+a working complex system while "hiding" the core data.
+
+DaS is based on this admission. We admit that there are really *two* 
interfaces: 
+a *programmatic API* and a *data API*.
+
+In the [WHICH?] OSGi specification, DTOs were introduced as a convention for 
describing objects
+and transferring their state between system sub-parts. It so happens that the 
rules for DTOs
+describe a schema, in Java code, for the data objects being transferred. By 
taking advantage of this
+schema and elevating it as a first-class citizen during the design and 
implementation of domain
+objects, we can elegantly expose both the programmatic API and the data API in 
code, and reap a few
+other benefits as well, as described below.
+
+Building also on other ideas, notably some of the ideas emerging from 
functional programming,
+it is possible to develop domain models with a leaner--and thus more 
productive--code base.
+
+# STATUS
+
+This module is highly experimental and is *not* recommended for production.
+
+# Coding conventions
+
+[TODO]
+
+# Topics to Explore
+
+## Schema transforms
+## Lenses
\ No newline at end of file

Propchange: felix/trunk/converter/schematizer/readme.txt
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to