With SOLID principle especially SRP, we have so very many classes..
I mean, it's just like you want to build a database class
Then, you have
DatabaseHandler class which handle the database (select,insert,update,delete,etc),
DatabaseAdapter class which is an extended PDO class (may set the prefered default mode in construction, a new prepare method which directly prepare the statement, bind it with the param, and execute it,
QueryBuilder Class which is the parent of SelectStatementBuilder Class, InsertStatementBuilder Class, DeleteStatementBuilder Class, UpdateStatementBuilder Class (to build SQLStatement),
Expression Class which builds up expression needed in WHERE clause
SQLStatement Class (which acts just like a normal string but its interface is SQLStatementInterface so we can know that it's a SQL Statement etc..
And, I know there will be more classes if I dig it deeper down, and refactor again.
Does SRP principle implementation lead to Lasagna code ? Is Lasagna code alright ?