I must admit that was one of our expectations when we firstly approximated 
Isis, perhaps because we were following the email list or saw the SQL 
Objectstore, etc.

In fact, seems that recently we have taken the opposite path (by requiring 
nearly all Entity properties to be annotated with 
@Column(allowsTrue="true|false"), instead of improving the JDO Object Store 
usage of the Isis meta-model.

It would also have another advantage: it would be the way to also support JPA 
implementations (or lessen the effort required).

But we cannot expected to map/solve all ORM requirements on the Isis metamodel, 
so the end situation will be some inferred, some explicited for sure.


I think that perhaps we must clarify Apache Isis responsibilities, and 
concentrate on them. 
So let me do a "quick-and-dirty" Envisionning exercise (it's Sunday...).



VISION STATEMENT:
Apache Isis intend to provide programmers with the best framework for 
implementing Domain-Driven Applications that interact with its environment 
without compromising business logic.

For that, I would say (for debating) the following (quick) responsibilities:
- The core responsibilities are:
1. to ease on Domain implementation (Entities, their relationships, and 
behavior / business rules / actions). 
2. to ease on Domain interaction with the environment (establishing ways to 
securely "share" that Domain Rules with the environment - applications or 
humans -).
3. to ease on Business Logic "protection" against "business-logic thieves such 
as UIs and ORMs" (by having all "contextual" info needed for the domain, and 
also for the actors interacting with the Domain).

From such a perspective:
a. From the ORM framework, we only need on the meta-model those annotations 
that affects the behavior of the Domain (read-only / transient, required, etc.) 
or the way the actors interact with it ("memo/blob" fields, etc.). But we don't 
need any information regarding how the ORM framework will store the domain, for 
example (any related to inheritance mappings, table or field names, etc.).

b. From Bean Validation frameworks, in theory we need "all"... It's all related 
to Domain's behavior. But we can simply consider it as "another idiom" to 
express Domain logic, and, as such, we should be able to use it internally on 
the Domain, but also to communicate it to "external actors" such as the UI and 
ORMs (nothing needed for the latter; it's currently implemented on Hibernate 
and seems that previous specification also on DataNucleus). 

c. For viewers (including webapp, RESTful Objects, etc. but also the ORM 
framework - it's just another "adapter"- detailed after), we need to give 
access to the domain structure (mainly Entities, their relationships, and 
behavior / business rules / actions) and contextual information about the 
status of the domain (and, perhaps, about the actors interacting with them, 
acting as a Glue or as a "coordinator" between all those interacting with them 
- like using information about the status of the ObjectStore to show in the 
User Interface, the Security Service, etc.). 


So perhaps "a." would be my response to "auto-inferring" annotations right 
now... Those affecting the Domain's behavior yes, those about internals no...


Please, tell me if any other framework is as close to Alistair Cockburn's 
"Ports and Adapters" or "Hexagonal Architecture" as Apache Isis is [1].

It's interesting to read the "Nature of the Solution" section from the Apache 
Isis perspective. 

------ Citation ------ 

THE PROBLEM
"Both the user-side and the server-side problems actually are caused by the 
same error in design and programming — the entanglement between the business 
logic and the interaction with external entities. The asymmetry to exploit is 
not that between ‘’left’’ and ‘’right’’ sides of the application but between 
‘’inside’’ and ‘’outside’’ of the application. The rule to obey is that code 
pertaining to the ‘’inside’’ part should not leak into the ‘’outside’’ part." 

--> Me: And we have the means to communicate between inside and outside through 
the RESTful Objects specification.


CONSIDERATIONS ABOUT THE USER INTERFACE

For each external device there is an ‘’adapter’’ that converts the API 
definition to the signals needed by that device and vice versa. A graphical 
user interface or GUI is an example of an adapter that maps the movements of a 
person to the API of the port. Other adapters that fit the same port are 
automated test harnesses such as FIT or Fitnesse, batch drivers, and any code 
needed for communication between applications across the enterprise or net.


CONSIDERATIONS ABOUT THE DATABASE

On another side of the application, the application communicates with an 
external entity to get data. The protocol is typically a database protocol. 
From the application’s perspective, if the database is moved from a SQL 
database to a flat file or any other kind of database, the conversation across 
the API should not change. Additional adapters for the same port thus include 
an SQL adapter, a flat file adapter, and most importantly, an adapter to a 
“mock” database, one that sits in memory and doesn’t depend on the presence of 
the real database at all.


EXPLANATION ABOUT THE PROBLEM OF NOT ISOLATING THE DOMAIN

Many applications have only two ports: the user-side dialog and the 
database-side dialog. This gives them an asymmetric appearance, which makes it 
seem natural to build the application in a one-dimensional, three-, four-, or 
five-layer stacked architecture.
There are two problems with these drawings. First and worst, people tend not to 
take the “lines” in the layered drawing seriously. They let the application 
logic leak across the layer boundaries, causing the problems mentioned above. 
Secondly, there may be more than two ports to the application, so that the 
architecture does not fit into the one-dimensional layer drawing.
The hexagonal, or ports and adapters, architecture solves these problems by 
noting the symmetry in the situation: there is an application on the inside 
communicating over some number of ports with things on the outside. The items 
outside the application can be dealt with symmetrically.

------ End of citation ------ 



Please, excuse me for the long email. I felt I needed to contextualize with 
Cockburn's thoughts .... I felt a bit insecure :-)

Regards,

Oscar


[1] http://alistair.cockburn.us/Hexagonal+architecture




El 08/09/2013, a las 10:32, Dan Haywood <[email protected]> 
escribió:

> Folks,
> 
> Been chatting off-list with Kevin, who was the original author of the SQL
> Objectstore.  This predated the JDO objectstore but had the same basic
> intent: to persist domain objects to an RDBMS.
> 
> Kevin originally wrote the SQL OS as the backend from apps he developed
> with Isis and the old HTML viewer.  That was in a "previous life"; there
> hasn't been any development of the SQL OS over the last couple of years.
> 
> Since graduating we haven't ever released SQL OS as a separate component.
> Kevin says he is now happy that we mothball (ie remove from the main
> build) the SQL OS code...  if you have a reason to disagree, please speak
> now.
> 
> ~~~
> 
> Being a home-grown implementation, the SQL OS isn't as sophisticated as the
> JDO OS, but one advantage it does have is to require no additional
> annotations/metadata; in other words the mapping is inferred entirely from
> the Isis metamodel.
> 
> So the next question is: do we want to enhance the JDO Objectstore so that
> it too (so far as possible) requires no JDO annotations to be defined?
> Doing some googling I notice that DataNucleus provides a writeable metadata
> API [1], so it would be possible to do this to some extent at least.
> 
> Or, is it better to be leave things as they are, with the Isis and JDO
> annotations sitting side-by-side?  One metamodel for presentation, one for
> persistence....
> 
> For myself, I think that if it were possible to fully specify the
> DataNucleus metamodel through Isis, then the idea has merit.  However,
> there there are concepts in DataNucleus metadata (such as the mapping of
> bidirectional relationships, the mapping of inheritance hierarchies, and
> the mapping of polymorphic references) that have no equivalent in Isis'
> metamodel.  For these, I think we would have to also support the JDO
> annotations.  One would then end up in a situation where some JDO
> annotations are inferred and implicit, but others must be specified
> explicitly.  I think that'd be quite confusing, myself.
> 
> Any thoughts on this topic welcome.
> 
> Thx
> Dan
> 
> 
> 
> 
> 
> 
> 
> [1] http://www.datanucleus.org/products/datanucleus/jdo/metadata_api.html

Reply via email to