Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стиль кодинга. Рациональность 
:(
    Опции темы
awers
  Дата 24.9.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: нет
Всего: 31



Доброй ночи.

Сегодня хотел бы поговорить на тему стилей программирования.
Начнем со следующего:
 В функции обычно выносят повторяющиеся куски кода
 Для удобства можно использовать классы

Так вот где та грань, когда к примеру в классе мы разделяем функцию __construct на несколько частей, при этом зная что функции, которые получились после разделения другой - более использоваться не будут. 
Что бы не быть голословным приведу пример исходного класса:
Код

class a{
      function a(){
           mysql_query ...;
           mysql_fetch_array ......;
           $a=$b;
           $c++;
           $g = new XML ... ;
      }
}

и пример после разделения:
Код

class a{
      function a(){
           $this->workSQL;
           $a=$b;
           $c++;
           $g = new XML ... ;
      }
      function workSQL($param){
           mysql_query ...;
           mysql_fetch_array ......;
      }
}

Так вот какие нужны мативации для разделения функций?
Как определить рациональность? Ведь где-то разделение делается для логической развязки, в другом случае для упрощения жизни, а где-то для удобочитаемости кода. Как держать середину между всем этим.

П.С. писал на сонную голову, если что простите .... 

С уважением, Адам.
PM MAIL WWW ICQ Skype   Вверх
SelenIT
Дата 25.9.2007, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 2
Всего: 401



Цитата(awers @  24.9.2007,  23:19 Найти цитируемый пост)
где-то разделение делается для логической развязки, в другом случае для упрощения жизни, а где-то для удобочитаемости кода

По-моему, эти цели не противоречат друг другу, а скорее друг из друга вытекают. Например, какой класс в Вашем же примере проще/быстрее/удобнее модифицировать, если возникнет необходимость перехода на другую СУБД?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
-=Ustas=-
Дата 25.9.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(awers @  24.9.2007,  23:19 Найти цитируемый пост)
Так вот какие нужны мативации для разделения функций?

Логически правильные. Почитай про рефакторинг кода.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
CyClon
Дата 29.9.2007, 07:26 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Хоть я в ООП новичок, но у меня сложилось на данный момент свое ИМХО - на чем больше методов разбит класс, тем продуктивнее будет использоваться наследование. Например, можно написать класс для работы с базой данных. Есть два варианта - написать все в 2 метода, например, коннект к базе и вытягивание данных. А можно - в 10. Если у нас класс из двух методов, наследуя его и переопределяя как раз эти два метода мы никакой пользы не извлекем. А унаследовав класс с 10 методами, и переопределив допустим два, мы как минимум уменьшим время написания smile Коротко говоря, чем больше % всех методов нам приходится переопределять в классе-наследнике, тем хуже. Но это далеко не говорит о том, что каждое действие нужно загонять в свой метод smile Просто нужно искать золотую середину и перед написанием основного класса задумываться о наследовании этого класса и группировать код по методам, как бы smile


--------------------
user posted image
PM   Вверх
webevt
Дата 7.10.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



Пихать все, что только можно в движок тоже не очень хорошо. Если нужен сайт, состоящий максимум из 2-3 страничек, то, имхо, и движка никакого не нужно  smile Но если это какой-то портал, игра или чат, то движок должен быть максимально быстр и в то же время максимально эффективен. 
Вот, я сейчас пишу движок-винегрет  smile Собираю туда все, что только можно..а потом буду чисто выбирать отдельные классы, которые мне понядобятся для того или иного сайта\проекта.
PM MAIL   Вверх
WhiteWind
Дата 7.10.2007, 09:53 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.7.2006

Репутация: нет
Всего: нет



Исповедуйте принцип бритвы Оккама: не плодите функций больше, чем нужно.
Выделять кусок кода в отдельную функцию совершенно точно надо в следующих случаях:
  •  Этот кусок кода используется более одного раза
  •  Функция занимает более одного экрана
  •  Этот код больше подвержен изменениям, чем окружающий его код

Так же следует руководствоваться принципом KISS (Keep It Simple, Stupid).
А баланс между бритвой Оккама и делением на множество методов определить невозможно - его нужно находить для каждого отдельного случая.
PM   Вверх
Dollor
Дата 19.10.2007, 18:43 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Цитата

Этот код больше подвержен изменениям, чем окружающий его код

С этим я абсолютно согласен, да и поступаю точно так. Так же как и в том слечае. если этот код у меня вызывается не однократно в движке.

Цитата

Этот кусок кода используется более одного раза

Я не думаю, что будет рациональынм заводить функцию если код используется, скажем, два или три раза...
PM MAIL WWW ICQ   Вверх
flashaa
Дата 19.10.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 1
Всего: 25



Обычно делю код в зависимости от требований к приложению. Скажем, надо написать чат, значит, функции или методы должны быть, соответственно, прием сообщений, отправка, валидация, ну и все что потребуется в чате. Если приложение объёмное, стараюсь смотреть вперед. После написания нескольких приложений стараюсь их оценить, увидеть что можно было бы вынести в "ядро", т.е. полезный на будущее код.
PM MAIL   Вверх
Fally
Дата 27.10.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Во всём по этой теме согласен с WhiteWind.
Цитата(Dollor @  19.10.2007,  18:43 Найти цитируемый пост)
Я не думаю, что будет рациональынм заводить функцию если код используется, скажем, два или три раза... 

Ага, а если эти 2-3 раза используется одинаковый код, размером, скажем хотя бы в 30 строк? Мне лишние строки в коде допустим ни к чему, к тому же, как известно PHP тратит львиную долю времени именно на синтаксическую проверку скрипта, то можно сделать вывод что выделение дублирований в отдельные методы позволит повысить скорость работы приложения.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
AlexShop
Дата 27.10.2007, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 20.2.2007

Репутация: нет
Всего: нет



А я все больше склоняюсь к тому, что функции можно заводить, даже если вызов к ней делается один раз.

И вот почему:
  • Обособлять и инкапсулировать куски кода которые занимаются конкретной задачей (даже если задача такая конкретная, что она не используется более чем в одном месте).
  • Четко видно какие переменные нужны для исполнения кода + проверка входных данных.
  • И самое важное не засорять глобальное пространство переменными.

PM MAIL   Вверх
Всемогущий
Дата 28.10.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: нет
Всего: 13



Цитата(AlexShop @  27.10.2007,  23:44 Найти цитируемый пост)
даже если задача такая конкретная, что она не используется более чем в одном месте

это говорит о том что задачу следует разбить мельче


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
awers
Дата 29.10.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: нет
Всего: 31



Ну так-же можно разделять код на функции когда написанием занимается более одного человека
PM MAIL WWW ICQ Skype   Вверх
dsCode
Дата 31.10.2007, 11:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

Репутация: нет
Всего: 26



один из принципов ООП - "Если считаешь какую-то вещь чем-то отдельным - сделай ее отдельным классом".


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.