Dominic, I don’t need to blog about the separation of the model tier as it is already well documented best practices in a number of programming languages.
As for the performance, side of things, this again is well documented and why Adobe added the CFClocation to the application settings scope for ORM. I don’t think there is any more I can add to this, that is not already out there.
Now as for my request, lets look at this further. If you want me to blog more about this then I would be happy too, but there is enough information on this out there already.
First of all we all should know what MVC stands for, and this is what came about because of SoC or Separation of Concern. The M part of this is for anything that is consider application specific business logic, so when we break this down we find that M is in actual fact our Domain Model or Data Model, it is our business logic and to some degree our Service Layers.
All 3 of these should be separated again in all application design, if you want to follow best design pattern practices and is why grails has done just that, it has separated these 3 into their own directories. And it is because of this design pattern, that people have done this for many years, now Luis must also agree to this in some part as well, otherwise when he built ColdBox he would not have separated the services from the rest of the framework.
My point is I would like to see the same thing in ColdBox, now it doesn’t mean that older applications will not work, it just means that we can still have a way to continue to adopt these practices. In other words, you are not forced to place your services into the services directory, and you could still do this if you want and the application will still work the same.
However all I am suggesting is that ColdBox continue with current best practices, like grails as an example and provide the means to also allow us to separate to a service layer by convention, as well as domain / entitie if people require DI in those.
Now I am not sure what most of you know about service layers, but service layers could be a window to anything, like a database tier, web service layer or anything else that could be considered further separation from the Application Business Logic. That means one could very well write a Service Factory, that could without the Applications knowledge refer to any one of these without the Application being aware of it.
For example you may write a service factory that is to go and grab a tweet or tweets from twitter, but if that service is down you may opt to then grab a copy from the cached version or even a copy that is stored in the database.
Now although these are Service Layers, they are also not technically considered Application specific models either, which is debatable depending on who you talk too.
But the point is that this is an example of why one should consider Service layers as separate to application specific models, and also a good reason why ColdBox should adopt along the same lines of Grails.
This doesn’t mean anyone else is forced to follow this rule, it just means there is support there for those who want to continue with best practices. I am not asking for everyone else to agree on their methods of development, I am just asking for the ability to allow for it. And I used my current situation as an example, because I did follow these best practices, and I did ask 3 years ago for this to be considered and I am again asking the same thing. Only because when I do release some of my projects, it will be compatible with the framework, without people having to jump through hoops by adding more unnecessary interceptors to allow for it.