Вот я не понимаю, почему, когда делают какой-нибудь метод, то у него получается много вложений? Вот давайте разберём компонент league/plates, который есть на сайте packagist. В нём есть метод render, если кликнуть на него, то он работает, через метод make, который работает, через ещё другой метод render. Метод make, создаёт новый объект, в котором создаётся другой объект и там ещё много всяких вложенностей. Так вот я к чему, правильно ли я думаю, то, что эти вложенности (очень много небольших методов) создаются, для того, что бы использовать, для других методов, что бы не дублировать код? Это и есть, правильное использование ооп?
расскажу на своем примере про слои)) 1. Есть у меня мой велосипед.. 2. Он должен работать с БД как "взрослый" велосипед... 3. Что я делаю, я делаю класс с статическими методами query fetchAssocc numRows freeResult и т.п. 4. Я делаю интерфейс которые описывает эти же методы.. 5. Я делаю два класса DbMysqli и DbSQLite3 имплементированных от интерфейса в п4 6. Я делаю в конфиге выбор БД и настройки.. 7. Я делаю синглтон класс Db со статическими методами, такими как в интерфейсе в статистическом свойстве которого храню объект одного из классов из пункта 5 8. Когда я запускаю приложение то в классе Db (п7) создается нужный объект.. 9. Я делаю абстрактный класс ModelBase в котором есть свойства tableName - имя таблицы tableColumns - колонки таблицы в этом же классе делаю методы getRow getRows insertRow updateRow deleteRow в этом же классе делаю метод который обращается к таблице tableName и берет оттуда ее данные.. имя столбца, тип столбца, величина столбца и добавляю все это в свойство tableColumns метод для заполнения tableColumns у меня в каждом классе из пункта 5 свой, а обращаюсь я к этому методу через класс из пункта 7 10. Делаю модель Users и наследую ее от ModelBase в этой модели сразу заполняю свойство $this->tableName = 'users' и грубо говоря все)) у меня готова модель в которой есть базовые методы для работы с таблицей)) остается только делать методы которые подготавливают специфические данные.. вот так я в своем велосипеде в его ядре использовал принципы ООП)) --- Добавлено --- сейчас делаю проект который должен работать без базы.. нужно упростить процесс переноса)) начал я его делать на mysqli, а потом оказалось что надо что бы база была на файлах)) я просто в настройке переключился на sqlite3 (правда через PDO) и учитывая то что я стараюсь использовать простые запросы, а в этом проекте сложных и не должно быть.. мне ничего не пришлось переделывать)) вообще ничего)) все продолжило работать на sqlite3 так же само как 15 минут назад работало на mysqli
в sqlite3 тоже не учитывается?) а то я и для него сделал)) --- Добавлено --- я в sqlite столкнулся с тем что там не работает num_rows)) пришлось костыль делать что бы мое наследование работало)
не проверялось --- Добавлено --- интересно. --- Добавлено --- SQLite3 doesn't implement buffered results so the total number of results isn't available. This is down to the fact that libsqlite really doesn't implement it either and its emulated by the old SQLite extension. --- Добавлено --- http://grokbase.com/t/php/php-bugs/098m0ypzck/49303-new-sqlite3-numrows-not-implemented
Мелкие классы и методы это следствие принципа единственной ответственности (обязанности) в ООП. Благодаря этому облегчается тестирование и модификация в будущем. ИМХО, меру надо знать в любом правиле --- Добавлено --- https://ru.wikipedia.org/wiki/Принцип_единственной_ответственности --- Добавлено --- https://ru.wikipedia.org/wiki/Разделение_ответственности