Продолжая серию статей по метапрограммированию, подготовил выжимку из достаточно объемной своей работы о повышении уровня абстракций в информационных системах. Хабр конечно любит практические решения, и их таки есть у меня, но материала много и я вынужден разделить его на несколько статей. А для иллюстрации эффективности подхода, могу сказать, что внедрение его во множестве живых проектов позволило повысить эффективность разработки в десятки раз, например, создавать приложения баз данных со структурой в несколько сотен таблиц за неделю и портировать решения между платформами за считанные часы. Эта статья носит характер теоретический и наполнена специфической терминологией, без которой, к сожалению, она была бы значительно объемнее.
Читать полностью »
Рубрика «Проектирование и рефакторинг» - 73
Функциональное программирование в ООП
2012-10-08 в 14:08, admin, рубрики: clean code, ооп, Проектирование и рефакторинг, Совершенный код, функциональное программирование, метки: clean code, ооп, функциональное программированиеДумаю, никто не станет спорить, что хороший код — код, который не только исполняет, но и максимально описывает свою задачу (это, конечно, относится в первую очередь к бизнес-логике). Причем описывает ее не деталями алгоритма, а своей сигнатурой (названием, параметрами и возвращаемым типом), сигнатурой вызываемых методов, переменными, которые он использует. В таком случае тело метода можно прочитать сверху вниз, не удерживая в памяти какой-то дополнительный контекст.Читать полностью »
Хлеб Маркуса и YAGNI
2012-10-06 в 15:00, admin, рубрики: .net, Программирование, Проектирование и рефакторинг, рефакторинг, метки: c++, Программирование, рефакторинг
Недавно в нашей новостной ленте появились два Героя, программисты-пекари – Борис и Маркус. Борис – хороший человек и перфекционист, а Маркус – очень скромный и серый программист, не желающий выделяться. Оба стремятся к лучшему и хотят быть полезными. Но кажется, что Маркус не очень старался.
Это новая ветка – продолжение. Сегодня сюжетная линия коснется только Маркуса. Он – главный герой.
Итак, история под катом.
Читать полностью »
Двигаем элементы в прототипе Axure
2012-09-26 в 0:20, admin, рубрики: axure, Веб-разработка, интерфейсы, Проектирование и рефакторинг, прототипирование, метки: axure, прототипированиеСегодня я столкнулся с проблемой, решением которой хотел бы поделиться. Эта заметка будет полезна тем, кто старается делать свои прототипы Axure максимально интерактивными.
Итак, задача. Визуализировать на прототипе добавление какого-либо объекта со сдвигом других объектов. Для примера возьмем добавление вопроса в сервисе онлайн-консультации.

Необходимо сделать так, чтобы при нажатии кнопки «Отправить» новый вопрос появлялся над старыми, а старые, в свою очередь, сдвигались вниз. Читать полностью »
Завяжите шнурки и подтяните свои штаны!
2012-09-08 в 23:51, admin, рубрики: архитектура по, никто не читает теги, проектирование, Проектирование и рефакторинг, разработка, рефакторинг, старпатИтак, что же замедляет разработку программного обеспечения?
Задумайтесь об этом вопросе на секунду. Как так выходит, что чем дольше Вы что-либо разрабатываете, тем сложнее и неприятнее добавлять в Ваше приложение новые фичи, попиливать архитектуру?
И почему раньше задачи решались так просто, а теперь выглядят запутанными и сложнореализуемыми?
Казалось бы, положение должно улучшаться, ведь Вы уже давно в проекте, разве нет? Почему всё происходит наоборот?
Читать полностью »
Главный принцип хорошего кода
2012-09-04 в 19:03, admin, рубрики: Программирование, программирование как искусство, Проектирование и рефакторинг, разработка, философия программирования, философия разработки, метки: программирование как искусство, философия программирования, философия разработкиЗа двадцать лет разнообразного программирования я сформулировал, убежден, главнейший принцип хорошего кода. Опираясь на него, мне и моим коллегам удавалось приводить в порядок самый страшный код, объединять в команде малосовместимых программистов и годами поддерживать системы без лишнего нытья.
Прочтение этой статьи: 15 минут
Осмысление методики: 10 минут
Ощутимые результаты: 30 минут
Протоколирование: рекомендации по трассировке
2012-08-30 в 20:24, admin, рубрики: Блог компании Инфопульс Украина, Программирование, Проектирование и рефакторинг
В данной статье я хочу поделиться своими мыслями/наблюдениями/рекомендациями относительно реализации такой важной задачи при разработке ПО как протоколирование. В Интернете существует множество статей описывающих инструменты для протоколирования, но очень мало информации о том, какие именно события, и какую информацию, нужно записывать в протокол работы программы.
Читать полностью »
Практика рефакторинга в больших проектах
2012-08-22 в 11:25, admin, рубрики: Программирование, Проектирование и рефакторинг, рефакторинг, тестирование, метки: Программирование, рефакторинг, тестированиеНекоторое время назад я попал в геймдев, где столкнулся с проектами по 2 млн. строк кода, которые пишут десятки программистов. При таких масштабах кодобазы возникают проблемы неведомого мне ранее характера. Об одной и них я хочу вам сейчас рассказать.
Итак, представьте себе следующую ситуацию. Так уж случилось, что вам надо отрефакторить очень большой кусок кода, целую подсистему. Строк, эдак, на 200К. Причем рефакторинг явно выглядит очень крупным, затрагивающим базовые концепции, по которым построена ваша подсистема. Фактически надо переписать всю архитектуру, сохранив бизнес логику. Такое бывает, если, например, вы сделали один проект и у вас впереди новый, и вы хотите в нём исправить все ошибки прошлого. Допустим, по первым прикидкам, на рефакторинг надо месяца 2, не меньше. В процессе рефакторинга всё должно работать, в том числе нельзя мешать другим программистам добавлять новые фичи и чинить баги в подсистеме. Часто такой рефакторинг бывает насколько сложен, что совершенно невозможно замерджить старый код в новый, а также невозможно выкатить результат по частям. Фактически вам надо заменить двигатель самолёта на лету.
Примеры из практики, как моей, так и моих коллег:
- Переделать всю работу с базой данных с чистого JDBC на Hibernate.
- Переделать архитектуру сервиса с отсылки-приёмки сообщений на удалённый вызов процедур (RPC).
- Полностью переписать подсистему трансляции XML файлов в рантайм объекты.
Что делать? С какой стороны подойти к проблеме? Ниже представлен набор советов и практик, которые нам помогают справиться с этой проблемой. Сначала более общие слова, а потом конкретные методики. В общем-то ничего сверхъествественного, но кому-то может помочь.
Читать полностью »
Введение в CQRS + Event Sourcing: Часть 2
2012-08-12 в 15:09, admin, рубрики: .net, cqrs, DDD, event-driven, Веб-разработка, Проектирование и рефакторинг, метки: cqrs, DDD, event sourcing, event-drivenВ прошлой статье я начал с основ CQRS + Event Sourcing. В этот раз я предлагаю продолжить и более подробно посмотреть на ES.
В примере который я выкладывал с моей прошлой статьей магия Event Sourcing’а была скрыта за абстракцией IRepository и двумя методами IRepository.Save() и IRepository.GetById<>().
Для того чтобы поподробнее разобраться что происходит я решил рассказать о процессе сохранения и загрузки агрегата из Event Store на примере проекта Lokad IDDD Sample от Рината Абдулина. У него в аппликейшен сервисах идет прямое обращение к Event Store, без дополнительных абстракций, поэтому все выглядит очень наглядно. Application Service — это аналог CommandHandler, но который обрабатывает все комманды одного агрегата. Такоей подход очень удобный и мы тоже на него в одном проекте перешли.
Читать полностью »
«Впереди планеты всей», и как мы докатились до этого. Или краткое описание автоматизации рабочего процесса
2012-08-01 в 14:08, admin, рубрики: Delphi, Программирование, проектирование, Проектирование и рефакторинг, рефакторинг, метки: Delphi, Программирование, проектирование, рефакторинг 
Не хочу начинать сей рассказ с того, что это мой первый пост, какой я бедный-несчастный, не ругайте меня сильно и тд. и тп., а перейду непосредственно к делу.
Но для начала небольшое лирическое отступление. А вы чего хотели?
Работаю я в Обнинской/Калужской региональной редакции газеты «Из рук в руки», и должность моя — «сервис-менеджер». Но, по сути, я исполняю обязанности не только сервис-менеджера, но и быдлокодера Delphi и 1С (назвать себя программистом, пока что, язык не поворачивается). На эту работу я устроился примерно полгода назад, когда еще учился в техникуме. И так получилось, что я пришел туда в такой период, когда у руководства уже были идеи по улучшению рабочего процесса, но еще не было рук, которые бы этим занялись. Для начала мне дали задание написать конвертер для газетных объявлений, который бы менял их формат так, чтобы их можно было загружать на сайт, а то операторам не улыбается вручную парсить мегатонны строк в блокноте. Задание было успешно выполнено, после чего меня оформили, и выделили деньги для покупки Delphi XE2 Professional мне на новое рабочее место (да, у нас директор и сисадмин в одном лице, поэтому они быстро друг с другом договариваются, когда появляется необходимость закупить софт или хард). И когда я уже был в штате, мне доверили заняться инновацией — программой для составления объявлений. А тут начинается самое интересное…
Кому интересно, прошу под кат.
PS. присутствуют ссылки и картинки, но не для пиара/рекламы, а для более подробного описания.
