2007-02-16

ECO JumpStart

I've been up quite late working out what I want to cover in the "ECO jump start" document. The trick is to start at a level where the user knows absolutely nothing, and end up where they know enough to decide whether or not they wish to spend some time learning how to use ECO or not.

I think I should start off explaining why multi-tiered app development is a good idea; then I think I should go on to creating a package in a DLL; then onto creating a non-persistent WinForm app using that package; then make it persistent; and so on. My problem is that ECO just does so much!

I'll paste what I have so far at the bottom of this blog entry to get any feedback. As the list progresses the subjects become more advanced and I am worried that the jump start might actually frighten people off by making them feel overwhelmed. Maybe I should just take it so far and then leave the more advanced items out? Maybe I should just include a section at the end of the document explaining what advanced features are available without demonstrating how to use them? Then maybe do an "Advanced ECO" document in which I follow on where I left off and demonstrate the more advanced stuff.

At the moment I am undecided, what do you think? Remember, this document is really intended to server two purposes; it should be there to help new users to understand ECO, and also to act as a promotional ("marketing" if you like) document to boast how good ECO is without scaring people away.

And now the table of contents:


Overview
Why create separate layers (GUI / Business / Data access)
An overview of how ECO uses UML as the design tool to sepcify the business layer
Explain that ECO can persist those business objects in a number of ways, the DB being switched in a matter of seconds


Creating a business classes package
Create project
Add references
Configure package settings
Add 2 classes with n--m association
Add properties
Add association
Generate code

Creating a non-persistent WinForm app
Create ECO WinForm project
Add reference
Select packages

Adding some simple GUI
Delete all but rhRoot
(Design support)
Set EcoSpace type
Add DataGrid
Set EcoSpaceType
Add ExpressionHandle (allInstances)
Bind the datagrid to the ExpressionHandle

Adding new objects
Add EcoListActions
Set RootHandle
Add button
Set the ListAction to Add

Drag and drop
Add another ExpressionHandle
Add another DataGrid
Add another "Add" button
Add CurrencyManagerHandle, set parent = DataGrid1
Add ExpressionHandle, expression = "self.AssociationToOtherClass"
Add a DataGrid
Add DragDrop extender
DataGrid2 = DragSource
DataGrid3 = DropTarget
Run + create + drag/drop

Making the objects persistent
Add XML persistence to EcoSpace
Add EcoGlobalActions to form
Connect to RootHandle
Add button
Set GlobalAction to UpdateDatabase
Run, create, save, close, run

Creating a database
Remove the XmlPersistence
Add DB persistence + set configuration
Add connection
Generate DB
Run, create data, save

Evolving a database
Add new properties
Rename a property + set FormerName
Add new super class + move property up
Evolve DB
Run, show same data

Quick prototyping the model
Set AutoForm = True on grids
Run app, show auto forms
Add button
Set GlobalAction = debugger
Run app, show debugger, show access to auto forms

State machines
A simple state machine with triggers
Triggers with paramters
Transitions with guards
Multiple transitions out of a single state with guards (explain how only 1 must be true)
Multiple transitions out of a single state with the same trigger
Nested regions
Concurrent regions
Final state

Multi user
Unloading the cache to see changes by other users
Turning on optimistic locking
Getting conflict information
ChangeActionKind
Locking regions

Remote persistence
Creating the remote persistence server
Registering as a remotable server
Registering as a HTTP remotable server available via IIS
Switching the WinForm to RemotePersistenceClient

Multi user synchronization server
What it is, how it works
Adding it to the remote persistence server
Requesting changes from the WinForm client
Run two apps, show the propagation of changes between them

ECO and ASP .NET
Create ECO web application
Reference the same model
Explain why we have a PersistenceMapperProvider component (only about caching the mapping information for now)
Show how to generate DB / evolve from PersistenceMapperProvider instead of the EcoSpace

ECO ASP .NET autoforms for protoyping in ASP .NET

Show the ECO WebForm
Recreate the same WinForm gui in a WebForm

ASP .NET performance
Show the pool size in Web.Config
Explain what happens when more people request pages than there are EcoSpaces in the pool
Explain the SessionStrategy
Explain the maximum lifetime setting in Web.Config

ASP .NET multi-user
Explain how EcoSpaces are kept in sync with each other via the PersistenceMapperProvider
Demonstrate how WebForm data is in sync
Demonstrate how the WinForm / WebForm apps do not stay in sync with each other
Migrate the ASP .NET app to use the persistence server
Demonstrate WinForm app reflecting changes to data made in a WebForm app

Overview of each of the ECO components

ECO in code
Switching between Object and IObject
Overview of some of the ECO services
UndoService, In-memory transactions + undo blocks
DirtyListService
PersistenceService
OCLPS Service
OCL service
OCL action language service


Advanced modeling techniques
HasUserCode = true
OCL derived attributes
Overriding OCL derived attributes in subclasses
Code derived attributes
Code reverse derived attributes
Derived associations
Transient properties
Transient classes
Transient associations
Association classes
Platform independant property types
AutoInc
Blob
Memo
Delayed fetch properties
Referencing other packages
Extending classes
Adding associations
Adding class constraints
Enforcing in a WinForm application
Enforcing the same constraints in a webform application
Disabling the auto-generated multiplicity constraints
Object versioning
Navigating historical data
Retrieving all historical versions of an object

Advanced database techniques
Reverse engineering a database
Cusomizing the mapping information to fit an existing database
Evolving the structure of an existing database
Using a single model to pull data from multiple databases (including mixed servers) and updating the data too

7 comments:

Pentti said...

Great, Great and Great
Sure it will be a must have to me, just a beginner.
I’d like to see using Treeview; it’s so useful in many applications.
I’m interested also in XML in database (DB2 Expression-C, …). I’ve heard it’s fine using hierarchical structures, and those are just what I need.
Marketing also is VERY important. ECO world needs much users to be alive and on top also in future.
I think it’s good idea to be separate “Jump Start” and “Advanced ECO” documents.
Thanks Peter
Greetings Pena

Anonymous said...

I'd stop at "Quick prototyping the model", that section being the last one to cover. Up to that point it's stuff that any ECO app would (al)most certainly use. Beyond that, it's more "pick and choose". Leave the remaining sections under "Advanced features" or something, and only describe what's there, what can be done, its uses, etc. If you're up to it, add additional detailed tutorials or docs about those features and link to them.
/Kjell Rilbe

Dmitriy Nagirnyak said...

Hi Peter,
Personally I would like to see as much as possible of "advanced techniques" in ECO.

But many times I was explaining people why ECO should be used they say I can use NHibernate, DevExpress', Microsoft's tools (including LINQ).

They at least say to search Internet for "Object Relational Mapping".

It would be good to describe that ECO is not only ORM tool and compare it to some of others. So people just see a comparison table and do their decision.

Cheers.

Anonymous said...

Those are all very good subjects. Especially using the HTTP protocol via IIS, it's surprising that there's no documentation on that yet. I haven't touched that yet and it's goinging to be sometime in the next few months. And, I do agree with Pena, that it could be good to divide the documentation in two "Jump Start" and "Advanced ECO". But, if you can keep it under 750 pages, do just one book, otherwise separate them into two books.

Best regards,
Daniel Rail

Peter Turtle said...

All good stuff Pete. I'm new to MDA in general and things I would like to see (i.e. had problems with when dabbling my toes in the ECO pond) are 1) using non-grid net components for displaying/editing ECO data and 2) using patterns. Other than these my newbie status precludes me from commenting further. This looks like developing into a full blown beginner to expert doorstop book. If there's anything I can do to help please let me know.

Serge Barth said...

I've just started with ECO for 3 days scanning all sites talking about ECO. I bought the ECO III book from Alois Schmid yesterday and today I fall on your blog through OCL documents investigations. It seems to be quite interesting. Here are my feellings of what I read:


>> ...Marketing also is VERY important. ECO world needs much users to be alive and on top also in future.

- Ok, You have to introduce all good things ECO accomplishes, why we should use it ? Examples of projects ? Small and big. I want to be conviced in the way why I didn't use it before.

>> I'd stop at "Quick prototyping the model".

- Ok, for "Jump Start",

>>...good to divide the documentation in two "Jump Start" and "Advanced ECO". But, if you can keep it under 750 pages, do just one book, otherwise separate them into two books.

- No, does "Jump Start" need a
book, it's a tutorial. All stuffs need to be in one book.


>>...would like to see as much as possible of "advanced techniques" in ECO.

- Ok

Best regards

Pentti said...

I hope sample codes in C# too.
Thanks
Greetings Pena