1) I am curious to see how SS would support a scenario where an already existing datamodel has to be used as the basis. It seems a bit odd having to start with defining php classes as a means to establish data relationships. Second a datamodel is more than just relationships, constraints for instance should be considered part of it.
It is a little odd - I am used to SQL scripts to define the db and any changes to it, but I must say sapphire is very nice to use, especially some of the features of defining the model...
$price = $product->price;//field
$source = $product->source();//relating object
$locations = $product->locations();//relating objects
the last two statements are written very neatly, but actually perform a joins and return relating object(s).
2) When working with an existing datamodel, it looks like accessing the data services would be done from the controller classes. Please comment.
If "data services" means "business logic" or operations to read/process/update the data then yes... you need to write code somewhere to operate on the data - MVC is s nice architecture (or if you have been around for a while the three-tier architecture) the alternative I am guessing is to write your application in something like PL/SQL...
3) Where does the DataObject class originate from? Is it a Silverstripe class? It does not seem to make much sense to hardwire the business objects to a vendor specific class. Please comment.
a quick search of the downloaded code would tell you that yes it is a ss class sapphire\core\model\DataObject.php.
My comment would be that it is standard practice to pick a database access library rather than coding your own one from scratch (which no-one is stopping you from)
4) How is persistency handled and more specifically how are transactions handled? What control does one have over this?
Transactions, within mysql are off by default, please see here... http://silverstripe.org/data-model-questions/show/288434#post288434