Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Очень даже тянет. Зип, регион, страна - не используются, копипаста с одной закомментированной строчкой... Да и вообще этот код выглядел бы логичнее в том же классе, с вариациями для разных локалей.
Это не говнокод -- это прослойка между программистом и дизайнером.
Этот код точно, ясно и верно выполняет свою работу.
И о локалях тут даже ошмётки не брякали.
Дело даже не в том что можно было сформировать $addressInfo из свойств объекта $address не перекидывая их в промежуточные переменные (ну пожалуй кроме $address->getBuilding() и $address->getAppartment() которые гепотетически могут быть чем-то посложнее чем просто return $this->building). Говнокод скорее в копипасте без одной строки и даже в названии второго метода. Сразу видно что когда возникла необходимость усложнить задачу человек решил её незадумываясь тупо и в лоб.
Да не дурите голову.
Здесь всё ясно. Было спрошено с программиста, чтобы в вид возвращалась форматированная строка. Это и было сделано. Формотирование меняется -- меняется код. И что там будет послезавтра -- неизвестно. Вот и висят куски.
Говнокод, говногод...
Как маленький ребёнок, честное слово...
Да.
Две функции с близкими названиями совершают близкие действия.
Если бы было две функции с непонятными и разными названиями, а они делали бы одно и то же -- это говноконструирование.
Если бы было две функции с близкими названиями, а дела ли бы они совершенно разное -- говноконструирование.
Если здесь есть говно- то это говноменеджмент, который привёл к тому, что из MVC выпал кусок. И этот выпавший кусок ещё достаточно прилично сделан!
Гораздо ужаснее было бы, если бы этот кусок вообще был прямым текстом размещён посреди "бизнес-логики". Так он хоть упакован отдельно: с глаз долой, из сердца вон.
Двайте уж, пишите сразу имена фамили, юр. лица. фотографии. Чтобы никто к этим людям уже работать не приходил.
Если кому-то интересно, как поступил бы истинный ценитель ProblemFactory: если форматировать адрес нужно часто и форматы немного отличаются в разных местах приложения, я бы написал AddressFormatter, который бы принимал строку наподобие printf. Часто употребляемые форматы сделал бы константами.
// %c - city, %s - street, %h - house %b - building
// %a - appartment, ?a{expr} - conditional
const ADDRESS_INFO = "%c, %s %h ?b{, корп. %b} ?a{, кв. %a}";
$displayAddr = Address\Formatter::format(ADDRESS_INFO, $address);
Это ещё сложнее в использовании, чем просто сляпать куски по желанию.
Бессмысленно говорить "о хорошем коде", когда здесь дыра между разными людьми. Говно в человеческом факторе.
Форматер сработал бы, как, например, доп. тег в JSP. Но подобные коды, как выше, появляются именно от того, что кто-то не хочет делать форматирование, а кто-то не хочет его поддерживать.
это хороший и полезный приём, надо всего то оценивать трудозатраты
представляю себе глаза проффессионнала-пхпшника, которому ради всего 2 вариантов форматирования, вместо 30 секунд работы "добавить уже сраный аргумент bool в эту сраную функцию", тимлид предложит написать небольшой такой парсер-форматтер
Если всего два формата - я бы тоже сделал флажок, даже не будучи профессионалом-похапешником. Будь их пять - я бы потратил 40 минут на написание форматтера.
if (!$address instanceof SalesOrderAddressShipping) return ''; поубивал бы !!! Исключение кинуть не бывает. Никакого понимания что делается и для чего, еще бы die в писали бы.
Это как раз широко распространённый приём.
Когда алгоритм устроен так, что наличие реального объекта не является обязательным условием, возвращают Null object -- дырку без поведения, в данном случае пустую строку.
Это проблема не PHP и даже не конкретного программиста, данная проблема имеет более глубокие и исторические образующие причины.
Кстати, а в ПХП лучше сделали - специальный протокол, который (пытается) абстрагирует файловую систему, а jar'ы загружать / подкючать к проекту нужно в каждой оси по-разному.
в общих чертах да. Ну вот захотелось молодому человеку изучить яву. веб приложение написать какое даже хело ворд. И что делать. А с пыхом все просто на гуглил денвер нашел книжку и вперед говнище конечно получается но уже первый шаг сделан.
Vasiliy прав.
Гораздо проще создать несколько динамических страничек на PHP, чем на java. Всё же, java для web в своей основе более сложное с инженерной точки зрения сооружение.
Фреймворки тоже не помощники. Нужно ещё разбираться как они работают, как они устанавливаются.
Только по мере роста проектов становится ясно, что "по-простому" не выйдет, а "по-сложному" -- проще на других инструментах.
> Если где-то захотим
< Все «хотелки» должны быть формализованы предварительно, желательно.
Вопрос сводиться к написанию автоматически конфигурируемого парсера выхлопа.
Без спецификации формат выхлопа - это не серьёзный разговор.
Кстати говоря. Вместо '1' в $addressInfo могут содержаться индексы формата.
т. е. если не ноль, то $func[$key][$val]
Этот код точно, ясно и верно выполняет свою работу.
И о локалях тут даже ошмётки не брякали.
Какой коллектив -- такой код.
Здесь всё ясно. Было спрошено с программиста, чтобы в вид возвращалась форматированная строка. Это и было сделано. Формотирование меняется -- меняется код. И что там будет послезавтра -- неизвестно. Вот и висят куски.
Говнокод, говногод...
Как маленький ребёнок, честное слово...
Или, как говорится, тролль.
Две функции с близкими названиями совершают близкие действия.
Если бы было две функции с непонятными и разными названиями, а они делали бы одно и то же -- это говноконструирование.
Если бы было две функции с близкими названиями, а дела ли бы они совершенно разное -- говноконструирование.
Если здесь есть говно- то это говноменеджмент, который привёл к тому, что из MVC выпал кусок. И этот выпавший кусок ещё достаточно прилично сделан!
Гораздо ужаснее было бы, если бы этот кусок вообще был прямым текстом размещён посреди "бизнес-логики". Так он хоть упакован отдельно: с глаз долой, из сердца вон.
Двайте уж, пишите сразу имена фамили, юр. лица. фотографии. Чтобы никто к этим людям уже работать не приходил.
Бессмысленно говорить "о хорошем коде", когда здесь дыра между разными людьми. Говно в человеческом факторе.
Форматер сработал бы, как, например, доп. тег в JSP. Но подобные коды, как выше, появляются именно от того, что кто-то не хочет делать форматирование, а кто-то не хочет его поддерживать.
представляю себе глаза проффессионнала-пхпшника, которому ради всего 2 вариантов форматирования, вместо 30 секунд работы "добавить уже сраный аргумент bool в эту сраную функцию", тимлид предложит написать небольшой такой парсер-форматтер
Когда алгоритм устроен так, что наличие реального объекта не является обязательным условием, возвращают Null object -- дырку без поведения, в данном случае пустую строку.
Это проблема не PHP и даже не конкретного программиста, данная проблема имеет более глубокие и исторические образующие причины.
Гораздо проще создать несколько динамических страничек на PHP, чем на java. Всё же, java для web в своей основе более сложное с инженерной точки зрения сооружение.
Фреймворки тоже не помощники. Нужно ещё разбираться как они работают, как они устанавливаются.
Только по мере роста проектов становится ясно, что "по-простому" не выйдет, а "по-сложному" -- проще на других инструментах.
Новый девайс от Apple? 🙂
< Все «хотелки» должны быть формализованы предварительно, желательно.
Вопрос сводиться к написанию автоматически конфигурируемого парсера выхлопа.
Без спецификации формат выхлопа - это не серьёзный разговор.
Кстати говоря. Вместо '1' в $addressInfo могут содержаться индексы формата.
т. е. если не ноль, то $func[$key][$val]