My approach is to use object classes, utilising table class instances when performing standard SQL routines like update, delete etc. and this controlled within the object class. I am a bit unique since I also mostly prefer to write the SQL manually instead of relying on the approach using schema classes.
By this approach I can change the entity from being managed by an SQL database to being managed by service calls without changing the overall system architecture since the object is acting as a black box with known contractual APIs and result sets.
Another factor of importance can be that the object can be called during system startup and check if relevant tables etc. are present in the system – simplifies installation. I also use the example of Dan Ridinger using the actual tables on the server to build the table classes used in defining the row variables for the table – less risk of versioning conflicts.
I also separate between objects representing entities and objects representing processes or complex operations.
Have to eat pizza, take care…