Обновить
6.63

Проектирование и рефакторинг *

Реорганизация кода

Сначала показывать
Порог рейтинга
Уровень сложности

Где наша бизнес-логика, сынок?

Время на прочтение18 мин
Количество просмотров84K
Спасибо небу за то, что в субботу шел дождь, и я это прочитал (а вы скажите спасибо за то, что перевел). В воскресенье, однако, светило солнце и форматирование текста было отложено.

Отдельное спасибо автору, за разрешение отдельной публикации.

Крайне занятная статья о том, что такое бизнес логика и где ей жить. Статье, кстати, уже три года. А я нередко встречаю системы, где код от данных не отделен. Может привести к реальному холивару.

не поддайся темной стороне силы usernаme

Рефакторинг: миссия (не)выполнима?

Время на прочтение4 мин
Количество просмотров2.1K
Что делать, если исходники проекта напоминают болото, а жить в нем планируется еще долго? Рефакторинг исходных кодов проекта — это более выгодная из двух альтернатив разобраться с означенной проблемой. Вторая из альтернатив — выбросить и переписать все заново — обычно не устраивает, по разным причинам.

А как делать этот самый рефакторинг, если даже неизвестно, с чего начать? Как осушить болото кода и не утонуть нем?

Конечно, идеальный вариант — считать рефакторинг одной из активности на проекте с самого его начала и выделять на него проектное время команды. В жизни, как ни странно, однако чаще всего оказывается, что предыдущий лид проекта не сильно озадачивался этим вопросом, предпочитая плыть по течению; возможно, он надеялся когда-нибудь сбагрить эту ношу менее удачливому лиду — пока проект еще не развалился; а может быть, просто не знал, что делать. Шеф, усё пропало!

Читать дальше →

Перевод: Я ненавижу тебя: твой код – хлам!

Время на прочтение11 мин
Количество просмотров11K
Хочу представить свой перевод статьи «Your Code Sucks and I Hate You: The Social Dynamics of Code Reviews».

Я ненавижу тебя: твой код – хлам!
Взаимоотношения участников ревизий кода

Джонатан Лэндж (Jonathan Lange), 15.09.2008

Обзор


Ревизия кода это действительно полезная, но в то же время и невероятно отпугивающая процедура. Эта статья подскажет, как избежать «кулачных боёв» при проведении ревизий.

Мы кратко рассмотрим, почему следует проводить ревизии кода, и сделаем упор на вопросе, как складываются при этом взаимоотношения участников процесса, в особенности в проектах с открытым исходным кодом. Действительно, отчасти open source привлекает (а порой наоборот отпугивает!) людей именно потому, что ваш код будут просматривать эксперты со всего земного шара. Мы также рассмотрим влияние, оказываемое некоторыми существующими технологиями на культуру ревизий кода, рассмотрим, чего можно достичь с их помощью, и как проводятся ревизии в других сферах деятельности. Мы также обозначим некоторые «подводные камни» ревизий, которые легко не заметить.
Читать дальше →

Что такое анти-паттерны?

Время на прочтение9 мин
Количество просмотров150K
Анти-паттерны — полная противоположность паттернам. Если паттерны проектирования —
это примеры практик хорошего программирования, то есть шаблоны решения определённых задач. То анти-паттерны — их полная противоположность, это — шаблоны ошибок, которые совершаются при решении различных задач. Частью практик хорошего программирования является именно избежание анти-паттернов. Не надо думать, что это такая непонятная теоретическая фигня — это конкретные проблемы, с которыми сталкивался практически каждый разработчик. Кто осведомлен, тот и вооружён! Рассмотрим же несколько расрпотранённых анти-паттернов в программировании.
Да, рассмотрим!

Безумные задачки

Время на прочтение1 мин
Количество просмотров2.9K
После бурной дискуссии у меня возник вопрос: а, действительно, как много людей, знающих (или считающих что они знают) C++ могут ответить на вопрос, подобный «простейшему тесту» из обсуждаемой статьи.

#include <iostream>

int test(int x) {
  static const int y = test(x + 1) * 2;
  return x + y;
}

int main() {
  std::cout << test(42) << std::endl;
  std::cout << test(0) << std::endl;
}

Вопросы:
1. Для какой версии GCC будет работать эта программа?
2. Что она выведет на экран?
3. Как отрефакторить функцию test() чтобы она стала совместима со стандартом (и с GCC 4.2, соответственно)?

Ну и парочка более простых примеров (примерно как задачка номер два там):
4. Как описать внутри класса функцию классу не принадлежающую (то есть не являющуюся ни статическим, ни динамическим методом класса)?
5. Зачем эта возможность нужна в C++?

Ну и напоследок вопрос: а стоит ли задавать подобные вопросы на собеседовании?

P.S. Подсказки пишите белым по белому, как обычно…

язык D в реализации от GNU

Время на прочтение1 мин
Количество просмотров932
Behold, people. Свершилось. Язык программирования D — очередная попытка сделать из любимого C нормальный объектно-ориентированный язык — окончательно перестал быть частной инициативой его автора, Волтера Брайта (Walter Bright), и компании Digital Mars. Теперь и GNU предлагает собственную реализацию. Работы, начатые GNU в прошлом году, наконец привели к созданию компилятора, который способен пройти все тесты в The Computer Language Benchmarks Game.

D — это, если можно так выразиться, причёсанный вариант C++, который многое наследует от Java и Eiffel, но при этом остаётся полностью компилируемым в машинный код и хорошо оптимизируемым языком. О производительности и эффективности можно судить по тестам The Computer Language Benchmarks Game. И выглядит он при этом довольно симпатично, примеры программ можно посмотреть в статье на wikipedia — D (programming language).

Весьма недурно, если учесть, что кодировать на D проще и приятнее, чем на C++, а потенциал для оптимизации, скорее всего, не исчерпан. Посмотрим, что сделают ребята из GNU с этим языком.

Вот. Happy coding.

P.S. Прямые ссылки, к сожалению, указать не удаётся. Хабру глючит, но чрезе Google они быстро находятся.

C/C+: эти коварные наборы строк.

Время на прочтение6 мин
Количество просмотров7.2K
Многие «знают», что программирование на C/C++ позволяет получить программы, которые работают почти так же быстро, как программы, написанные на языке Assembler, а уж те, в свою очередь, быстры настолько, насколько это вообще возможно в теории.

На самом деле, конечно, это не совсем так (а в редких случаях — и совсем не так), но в целом программы на C/C++ действительно быстры, требуют немного памяти и запускаются мгновенно. Если их правильно написать.

Вот о том как правильно писать на C/C++ я и хотел бы немного поговорить. Сегодня я хочу обсудить вопрос о наборах строк. То есть о процедурах, позволяющих из числа получить строку, а из строки — число.

Где подобные списки встречаются? Ну, например, это могут быть списки токенов html, с которыми работает ваша программа. Или список команд, которые принимает ваш командный интерпретатор. Но, конечно, наиболее часто такие наборы возникают как списки всевозможных ошибок: strerror, gai_strerror, regerror и т.д. Думаю каждый программист встречался с подобной задачей хотя бы раз.

Хочу оговориться что дальнейшее описание впрямую применимо только к операционным системам, использующим формат ELF: Linux, MacOS, etc. В Windows или встраиваемых системах ситуация может быть слегка иной. Плюс я в этот раз ограничусь только прямой задачей (по числу получить строку) ибо она во-первых проще, а во-вторых многие решения обратной задачи содержат в себе прямую задачу как часть решения.
Читать дальше →

Сокращение уровня вложенности

Время на прочтение4 мин
Количество просмотров6.2K
Иногда от посторонних людей достаются большие процедуры, от которых появляется большая головная боль.
Например, когда мне досталась на переработку километровая процедура 1С. В целом, она выглядела
впечатляюще

Ревизия кода Ext JS/ GridView

Время на прочтение4 мин
Количество просмотров2.3K
В свое время я прибывал в уверенности, что код
js обычно не нужно писать так, чтобы он был
наиболее оптимальным. «Клиентская часть» — говорил я, — «на сервер никак не
повлияет, а посему, можно забить». К сожалению, оказалось, что это не совсем
так.

Данная статья содержит технические сведения. Если вы не понимаете о чем здесь написано, пожалуйста, не минусуйте.

Читать дальше →

Ревизируем HTML и CSS «Хабрахабра»

Время на прочтение3 мин
Количество просмотров1.9K
Здравствуйте.

Коль скоро «Хабрахабр» тоже состоит из кода, займусь лёгкой ревизией той его части, с которой могу совладать, и которую скачиваю десятки раз в день. Проведём ревизию кода раздела «Прямой эфир».

Под катом HTML и CSS листинги.

Читать дальше →

Ленивые свойства объекта

Время на прочтение2 мин
Количество просмотров1.8K
Возможно, не самый умный экземпляр для линча, но хотелось с чего-нибудь начать)

Для красоты кода и удобства написания модулей, реализовал классы по работе с отдельными информационными сущностями. К примеру, такая вещь как язык интерфейса имеет свой ID, и для большинства операций этой информации вполне достаточно. В то же время, возникают редкие ситуации, когда требуется получить дополнительные сведения о нём (RFC-код, к примеру, узнать который можно, обратившись к отдельной таблице или файлу). Не особо задумываясь, поставил инициализацию переменных в конструктор класса… Проблемы начались, когда переехал на машину с тормозящим SQL-сервером (очень полезное занятие, как оказалось) – тестовая машина падала в таймаут при совершенно безобидных операциях. Не комильфо – процессорное время и SQL-соединения хотелось бы использовать более рационально :) Но использовать специальные методы для подгрузки вроде Fill() тоже не особо хотелось. В итоге пришел к наиболее простому (на мой взгляд) решению из доступных
Читать дальше →
12 ...
101