![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
awers |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: нет Всего: 31 |
Доброй ночи.
Сегодня хотел бы поговорить на тему стилей программирования. Начнем со следующего: В функции обычно выносят повторяющиеся куски кода Для удобства можно использовать классы Так вот где та грань, когда к примеру в классе мы разделяем функцию __construct на несколько частей, при этом зная что функции, которые получились после разделения другой - более использоваться не будут. Что бы не быть голословным приведу пример исходного класса:
и пример после разделения:
Так вот какие нужны мативации для разделения функций? Как определить рациональность? Ведь где-то разделение делается для логической развязки, в другом случае для упрощения жизни, а где-то для удобочитаемости кода. Как держать середину между всем этим. П.С. писал на сонную голову, если что простите .... С уважением, Адам. |
||||
|
|||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 2 Всего: 401 |
По-моему, эти цели не противоречат друг другу, а скорее друг из друга вытекают. Например, какой класс в Вашем же примере проще/быстрее/удобнее модифицировать, если возникнет необходимость перехода на другую СУБД? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
-=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: нет Всего: 69 |
Логически правильные. Почитай про рефакторинг кода. -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Хоть я в ООП новичок, но у меня сложилось на данный момент свое ИМХО - на чем больше методов разбит класс, тем продуктивнее будет использоваться наследование. Например, можно написать класс для работы с базой данных. Есть два варианта - написать все в 2 метода, например, коннект к базе и вытягивание данных. А можно - в 10. Если у нас класс из двух методов, наследуя его и переопределяя как раз эти два метода мы никакой пользы не извлекем. А унаследовав класс с 10 методами, и переопределив допустим два, мы как минимум уменьшим время написания
![]() ![]() ![]() |
|||
|
||||
webevt |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 235 Регистрация: 5.5.2005 Репутация: нет Всего: 3 |
Пихать все, что только можно в движок тоже не очень хорошо. Если нужен сайт, состоящий максимум из 2-3 страничек, то, имхо, и движка никакого не нужно
![]() Вот, я сейчас пишу движок-винегрет ![]() |
|||
|
||||
WhiteWind |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.7.2006 Репутация: нет Всего: нет |
Исповедуйте принцип бритвы Оккама: не плодите функций больше, чем нужно.
Выделять кусок кода в отдельную функцию совершенно точно надо в следующих случаях:
Так же следует руководствоваться принципом KISS (Keep It Simple, Stupid). А баланс между бритвой Оккама и делением на множество методов определить невозможно - его нужно находить для каждого отдельного случая. |
|||
|
||||
Dollor |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 19.10.2007 Репутация: нет Всего: нет |
С этим я абсолютно согласен, да и поступаю точно так. Так же как и в том слечае. если этот код у меня вызывается не однократно в движке.
Я не думаю, что будет рациональынм заводить функцию если код используется, скажем, два или три раза... |
||||
|
|||||
flashaa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 1 Всего: 25 |
Обычно делю код в зависимости от требований к приложению. Скажем, надо написать чат, значит, функции или методы должны быть, соответственно, прием сообщений, отправка, валидация, ну и все что потребуется в чате. Если приложение объёмное, стараюсь смотреть вперед. После написания нескольких приложений стараюсь их оценить, увидеть что можно было бы вынести в "ядро", т.е. полезный на будущее код.
|
|||
|
||||
Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: нет Всего: 4 |
Во всём по этой теме согласен с WhiteWind.
Ага, а если эти 2-3 раза используется одинаковый код, размером, скажем хотя бы в 30 строк? Мне лишние строки в коде допустим ни к чему, к тому же, как известно PHP тратит львиную долю времени именно на синтаксическую проверку скрипта, то можно сделать вывод что выделение дублирований в отдельные методы позволит повысить скорость работы приложения. |
|||
|
||||
AlexShop |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 20.2.2007 Репутация: нет Всего: нет |
А я все больше склоняюсь к тому, что функции можно заводить, даже если вызов к ней делается один раз.
И вот почему:
|
|||
|
||||
Всемогущий |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 25.6.2006 Где: Челябинск Репутация: нет Всего: 13 |
||||
|
||||
awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: нет Всего: 31 |
Ну так-же можно разделять код на функции когда написанием занимается более одного человека
|
|||
|
||||
dsCode |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
один из принципов ООП - "Если считаешь какую-то вещь чем-то отдельным - сделай ее отдельным классом".
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |