По аналогии с паттернами проектирования (как надо проектировать системы), появилось еще одно интересное направление программистской мысли – антипаттерны (самые популярные ошибки совершаемые программистами).
Самым часто встречающимся из них является антипаттерн “Код-спагетти”, с него и начну.
Больше всего этому антипаттерну подвержены небольшие программы, написанные без использования объектно-ориентированной модели. Почему это так – поймете позже.
Основной отличительной особенностью этого антипаттерна является слабая структурированность кода (поэтому он такое название и получил). Другими словами код содержит в себе все вперемешку. Вследствие чего, даже тот человек, который написал этот код, через некоторое время его уже не разберет. Такие системы позже будет очень сложно поддерживать и расширять (иногда легче даже будет переписать заново), не говоря уже о возможности использовать повторно некоторые куски, такие как модули (если их там выделить можно будет), в других системах.
Читать далее »
Бывают такие ситуации, когда несколько методов выполняют одни и те же действия, но с разными значениями внутри. Например, один метод увеличивает значение стоимости товара на 10, а другой – на 30 единиц. И тут конечно лучше было бы создать просто один метод, но для разных значений, который принимал бы параметр, сколько прибавлять единиц к стоимости – 10 или 30, а может и 50 и т.д. Отсюда и название приема – параметризация метода.
Тем самым мы устраним дублированный код и добавим гибкость в объект, т.к. он сможет обрабатывать другие ситуации, нежели 10 и 30. Т.е. любое число, разумеется.
Вот пример: Читать далее »
Некоторые (особенно начинающие или неопытные) разработчики хранят в массивах разнородную информацию. Например:
$arr = Array();
$arr[0] = “Mike”; // имя человека
$arr[1] = 30; // возраст
$arr[2] = 180; // рост
Хорошо, что в PHP есть ассоциативные массивы, которые позволили бы нам написать вот так: Читать далее »
Основное назначение шаблона проектирования Адаптер понятно из названия – он адаптирует элементы для работы в различных средах. Если говорить более конкретно, то адаптер – это класс-обортка для основного класса, предоставляющий другой способ доступа к нему.
Теперь подробно.
Обычно, этот шаблон используют в одном из трех случаев:
- Когда нужно чтобы один класс работал с другими классами, непохожими друг на друга. В этом случае для основного класса создается адаптер для одного из двух других (или для каждого). Ниже подробнее опишу это.
- Приспособить один из старых компонентов для работы в текущей системе или просто обновить интерфейс какого-то класса.
Читать далее »
Иногда в исходном коде выражения бывают настолько сложными, что если даже и мы их написали, то по прошествии какого-то времени не можем понять, что мы имели в виду в том или ином участке кода.
Например, рассмотрим следующее выражение (правда, оно не настолько сложное, но выражения посложнее я покажу далее):
if ((strpos(strtoupper($platform), "MAC") !== false) &&
(strpos(strtoupper($browser), "IE") !== false) &&
wasInitialized() && $resize > 0 ) {
// что-то делаем ...
}
Чтобы нам легче было понять логическое выражение в условии, попробуем упростить его с помощью нашего сегодняшнего приема: Читать далее »
Эта статья будет первой из раздела “Профессиональный php” и начнет она в нем тему шаблонов проектирования. Если простыми словами, то шаблон проектирования это код, который решает какую-то задачу, с которой программисты часто сталкиваются (задача реализации какой-то логики). Если сейчас не понятно, то дальше поймете, на примерах.
Начну я, как и все, с шаблона Singleton (“одиночка”, если по-русски). Но, сначала, небольшое отступление. Если Вы заходили на сайт блога, то могли заметить – справа появилось голосование. У меня просьба ко всем читателям нашего блога – оставить там свое мнение, ведь от его результатов будет зависеть направление развития блога. Спасибо
Теперь продолжу про singleton. Как я уже заметил выше, назначение каждого шаблона – это решение какой-то задачи.
Читать далее »
Представим себе такую ситуацию… Есть у нас метод (функция-член класса), в котором довольно много строк кода. И этот код использует локальные переменные таким образом, что невозможно применить прием группировки кода в отдельную функцию.
Решением этой проблемной ситуации может быть прием, который мы сегодня рассмотрим. Это замена метода объектом. Суть этого приема состоит в том, чтобы исходный метод сделать методом нового класса, а все локальные переменные исходного метода сделать свойствами нового класса. В итоге такой метод в новом классе далее можно декомпозировать на отдельные методы этого же класса.
Чтобы было понятнее, как всегда пример: Читать далее »