Pull to refresh
  • by relevance
  • by date
  • by rating

God object. Анализ сложных проектов

Abnormal programming.NET

Введение


Ни для кого не секрет, что такой архитектурный антипаттерн как God object препятствует эффективному поддерживанию кода проекта. Однако его все равно можно встретить в Legacy-системах корпоративного сектора. Со временем код становится настолько сложным, что изменить его функциональность, даже при наличии Unit-тестирования, становится большой проблемой. Такие системы никто не хочет поддерживать, все боятся что-либо улучшать, количество проблем в трекере держится постоянным числом, но может и расти. Как правило, у команды упавшее настроение, которое со временем становится чемоданным: все хотят свалить.
Иллюстрация проблемы
Читать дальше →
Total votes 35: ↑30 and ↓5 +25
Views5.6K
Comments 18

ActiveRecord vs DAO – Тест потребления памяти и скорости выполнения запросов

АрнионIT systems testing
Recovery mode
В процессе роста и развития проекта «АвтоОфис — Прием платежей и полная автоматизация продаж» мы столкнулись с тем, что при появлении клиентов имеющих у себя в базах более 100 000+ контактов, одна из основных функций, отвечающих за создания и отправку массовых email-рассылок по базе клиентов данных интернет-магазинов стала безбожно тормозить.

Покопавшись в коде, было выявлено, что при выборках данных, насчитывающих 100 000+ записей из таблиц MySQL с использованием класса ActiveRecord, сильно увеличивается потребление оперативной памяти и времени отработки скриптов. Доходило до того, что одна переменная, хранящая в себе результат выборки из 100 000 записей, потребляла 644 750 972 байт (614 Мб) оперативки, а время выполнения скрипта превышало 50 секунд.

Т.к. 100 000 записей, это мягко говоря, не предел мечтаний, и количество клиентов сервиса АвтоОфис уже давно исчисляется тысячами, мы не могли оставить данную проблему без внимания и не принять меры по её устранению. В итоге описанная выше функция была полностью переписана на выборки с использованием широко известного DAO, что существенно снизило расход ресурсов и увеличило скорость выполнения скрипта.

В процессе перехода наши программисты не поленились и сделали несколько тестов, наглядно показывающие сравнительные характеристики использования ActiveRecord и DAO при попытке выборки из БД MySQL 1, 5, 10, 50, 100, 500, 1 000, 5 000, 10 000, 50 000 и 100 000 записей. С результатами данных тестов и предлагаю Вам ознакомиться прямо сейчас.
Читать дальше →
Total votes 29: ↑9 and ↓20 -11
Views6.2K
Comments 21

Разработка веб-приложения

Website developmentJavaExtJS/Sencha
Tutorial
Привет, Хабр!

При изучении технологий Ext JS и Java, написал web-приложение «Каталог автомобилей». Хочу поделиться с Вами этим опытом.

Вид и функциональность приложения


  • Добавление;
  • Удаление;
  • Редактирование;
  • Поиск;
  • Валидация данных;


Читать дальше →
Total votes 77: ↑34 and ↓43 -9
Views90.2K
Comments 19

StorIO — человеческий API для работы с SQLiteDatabase и ContentResolver

Development of mobile applicationsDevelopment for Android
Не секрет, что API SQLiteDatabase и ContentResolver — отстой, поэтому многие стараются от них абстрагироваться. Кто-то выбирает ORM, кто-то DAO, кто-то пишет своё.

За долгие годы Android разработки мы прошли через все эти этапы: ORM часто становится узким местом в критический для проекта момент, своё DAO требует тестирования и разработки, что отнимает много времени, которое можно было тратить на другие детали реализации приложения, готовые DAO в принципе решают вопрос, но различные библиотеки имеют свои плюсы и минусы (15стандартов.jpg), посмотрите, что предлагаем мы:

1. API для людей: удобные билдеры (помните 5-7 nullов в запросах?), читаемые и очевидные конструкции, Immutability и Thread-safety.
2. Упрощенный набор операций: вместо стандартного CRUD (Create-Read-Update-Delete или Insert-Select-Update-Delete) мы предлагаем три операции — Put, Get, Delete, при этом вы имеете полный контроль над их реализацией, можете, например, упороться и хранить один объект в нескольких таблицах и так далее.
3. Опциональный Type-Safe Object Mapping без Reflection, но если вы хотите работать с Cursor или ContentValues — пожалуйста.
4. Некая схожесть с Retrofit: вы можете выполнить любую операцию как блокирующий вызов либо как rx.Observable, мы можем добавить callback модель выполнения операций в будущем.
5. Reactive — Observable из Get операции будет получать уведомления об изменении таблиц в случае SQLite или Uri в случае ContentResolver, это позволяет полностью заменить лоадеры, API которых просто отвратителен.

Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Views12.9K
Comments 9

Data Access Object (DAO). Уровень класса

Website developmentJavaSQL
Sandbox
При проектировании информационной системы выявляются некоторые слои, которые отвечают за взаимодействие различных модулей системы. Соединение с базой данных является одной из важнейшей составляющей приложения. Всегда выделяется часть кода, модуль, отвечающающий за передачу запросов в БД и обработку полученных от неё ответов. В общем случае, определение Data Access Object описывает его как прослойку между БД и системой. DAO абстрагирует сущности системы и делает их отображение на БД, определяет общие методы использования соединения, его получение, закрытие и (или) возвращение в Connection Pool.
Читать дальше →
Total votes 14: ↑4 and ↓10 -6
Views108K
Comments 8

Забудьте о DAO, используйте Repository

ProgrammingJavaIndustrial Programming
Недавно задумался о том, чем отличаются паттерны, позволяющие абстрагироваться от работы с хранилищем данных. Много раз поверхностно читал описания и различные реализации DAO и Repository, даже применял их в своих проектах, видимо, до конца не понимая концептуальных отличий. Решил разобраться, закопался в Google и нашел статью, которая для меня разъяснила все. Подумал, что неплохо было бы перевести ее на русский. Оригинал для англочитающих здесь. Остальным интересующимся добро пожаловать под кат.
Читать дальше →
Total votes 28: ↑23 and ↓5 +18
Views140.4K
Comments 14

Децентрализованое управление на базе блокчейна

Development ManagementProject managementCommunity managementVenture investmentBusiness Models
Translation
image

В мире криптовалют все говорят о «Гражданской войне», и не о той, что развязалась между Капитаном Америкой и Железным человеком. Они говорят о гражданской войне в проекте Bitcoin, которая длится уже год. Это ожесточенное сражение за контроль над масштабируемостью.

С одной стороны, есть разработчики Core, которые хотят сохранить ограничение размера блока в 1 Мбайт. Они рассчитывают, что подающая надежды сеть Lightning Network решит любые проблемы с перегрузками.

С другой стороны, есть сторонники из лагеря Bitcoin Classic, которые хотят увеличить ограничение размера блока как минимум до 2 Мбайт. Пока побеждают Core, так как большая часть майнеров Bitcoin придерживается их варианта реализации проекта.

Эти разногласия подняли некоторые фундаментальные вопросы о природе децентрализованного проекта вроде Bitcoin. Кто же в итоге задает направление развития децентрализованного проекта? Кто принимает окончательные решения по разработке? Другими словами, как следует управлять подобным проектом?
Читать дальше →
Total votes 14: ↑11 and ↓3 +8
Views8.8K
Comments 19

Криптовалюта Dash: полноценное DAO

Development ManagementProject managementCommunity managementVenture investmentBusiness Models
Translation
image

Недавний стремительный взлёт основанного на децентрализованной платформе «Эфириум» проекта «The DAO (ДАО)» (в ходе запуска которого было собрано порядка 150 млн USD инвестиций), вызвал всеобщее воодушевление относительно концепции Децентрализованных Автономных Организаций. При этом для криптовалюты Dash существование в режиме ДАО — это уже “прошлогодний снег”. В этой переводной статье будут рассказаны подробности об этом.
Читать дальше →
Total votes 8: ↑3 and ↓5 -2
Views3.9K
Comments 0

Криптовалюта Dash: Симбиоз человека и кода

Development ManagementProject managementVenture investmentStart-up developmentBusiness Models
Translation
image

Даже по меркам мира криптовалют проект “The DAO” недавно получил беспрецедентную огласку после релиза. Её рекламировали как истинно децентрализованную автономную организацию, The DAO обещала стать будущим смарт-контрактов. Тем не менее, несколько недель назад кто-то воспользовался уязвимостью в коде The DAO и переписал на себя свыше 3,6 миллионов токенов Эфира (т.е. на сумму более 60.000.000 USD по курсу на момент инцидента).

Многие средства массовой информации называли это «атакой», хотя с этим можно и не согласиться, если учесть, что программный код в “The DAO” является законом, а значит тот, кто пользуется уязвимостями кода, не сделал ничего незаконного и даже неэтичного.
Читать дальше →
Total votes 6: ↑3 and ↓3 0
Views4.3K
Comments 34

Реформа SQL-ориентированного подхода в DAO

ProgrammingJava

Вводная


Мне часто в проектах приходится сталкиваться с фреймворками по работе с БД. Концептуально, эти фреймворки можно разбить на 2 больших класса:

  • ORM-ориентированные
  • SQL-ориентированные

Некоторые из них хороши, какие-то не очень. Но субъективно могу сказать: SQL-ориентированные уступают в развитии ORM-ориентированным. Подчеркну, в развитии, а не в возможностях. Хоть изменить эту чашу весов и не получится, но предложить необычный взгляд на мир SQL-ориентированного подхода — вполне. Кому интересно, добро пожаловать под кат
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Views11.2K
Comments 37

Путь Ethereum на передовую мира блокчейн

WirexCrowdsourcingFinance in ITCryptocurrencies
imageЗа последние 3 года развития Биткойна мы увидели появление многих инфраструктурных приложений, большую часть из которых составляли биржи и кошельки. Но на этом список практически значимых и по-настоящему новых разработок на базе Биткойн заканчивается. Чем же можно объяснить такую ситуацию?

Существует теория, которая заключается в том, что скриптовый язык Биткойн — та сама часть каждой биткойн-операции, которая позволяет вам запускать небольшую программу в ходе этой операции — слишком ограничена в возможностях. В этом контексте соучредитель Coinbase Фред Эсем (Fred Ehrsam) предлагает обратить внимание на Ethereum, появление которого, по его мнению, можно сравнить с изобретением полноценного компьютера, пришедшего на смену рассчитанному на 4 действия калькулятору по имени Биткойн. На первый взгляд нам в Wirex, финтех стартапе, предоставляющем услуги платежей и денежных переводов без банковского посредничества и с использованием blockchain, сравнение Эсема показалось немного грубоватым, но вынуждены согласиться, что такая точка зрения имеет право на жизнь. Кому нужны аргументы, приглашаем под кат.
Читать дальше →
Total votes 17: ↑12 and ↓5 +7
Views17.2K
Comments 19

Учимся писать Waves смарт-контракты на RIDE и RIDE4DAPPS. Часть 1 (Многопользовательский кошелек)

ScalaHackathon
Tutorial


Всем привет!


Совсем недавно Waves Labs анонсировал конкурс для разработчиков приуроченный к релизу в тестовую сеть расширения языка смарт-контрактов RIDE для децентрализованных приложений Ride4Dapps!


Мы выбрали кейс DAO, так как Ventuary планирует заниматься разработкой dApp с социальными функциями: голосованием, фандрейзингом, доверительным управлением и пр.


Мы начали работу с простого примера в Q&A-сессии и в RIDE IDE — примере с общим кошельком.

Читать дальше →
Total votes 12: ↑9 and ↓3 +6
Views2K
Comments 2

Учимся писать Waves смарт-контракты на RIDE и RIDE4DAPPS. Часть 2 (DAO — Decentralized Autonomous Organization)

ScalaHackathon


Всем привет!


В первой части мы подробно рассмотрели как создавать и работать с dApp (децентрализованным приложением) в Waves RIDE IDE.


Давайте сейчас немного потестируем разобраный пример.


Этап 3. Тестирование dApp аккаунта

Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Views1.3K
Comments 0

Помощник по работе с базами данных GreenPig

PHPMySQLOracle
Sandbox
  1. Вступление
  2. Подключение библиотеки
  3. Класс Where
  4. Класс Join
  5. Класс Query

      ╔═══╗╔═══╗╔═══╗╔═══╗╔╗─╔╗────╔═══╗╔══╗╔═══╗
      ║╔══╝║╔═╗║║╔══╝║╔══╝║╚═╝║────║╔═╗║╚╗╔╝║╔══╝
      ║║╔═╗║╚═╝║║╚══╗║╚══╗║╔╗─║────║╚═╝║─║║─║║╔═╗
      ║║╚╗║║╔╗╔╝║╔══╝║╔══╝║║╚╗║────║╔══╝─║║─║║╚╗║
      ║╚═╝║║║║║─║╚══╗║╚══╗║║─║║────║║───╔╝╚╗║╚═╝║
      ╚═══╝╚╝╚╝─╚═══╝╚═══╝╚╝─╚╝────╚╝───╚══╝╚═══╝

                            5HHHG
                 HH       HHHHHHH
               9HHHA    HHHHHHHH5
              HHHHHHHHHHHHHHHHHH  9HHHHH5
            5HHHHHHHHHHHHHHHHHHHHHHHHHHH
           HHHHHHHHHHHHHHHHHHHHHHHHHHHH
         ;HHHHHHHHHHHHHHHHHHHHHHHHHHA
          H2   HHHHHHHHHHHHHHHHHHHHHH
               HHHHHHHHHHHHHHHHHHHHHHH9
                HHHHHHHHHHHHHHHHHHHHHHH
                AHHHHHHHHHHHHHHHHHHHHHH
                 HHHHHHHHHHHHHHHHHHHHH9  iHS
                  HHHHHHHHHHHHHHHHHHHHHHhh
                   HHHHHHHHHHHHHHHHHH
                  AA HHHHHHHHHHHHHH3
                 &H  Hi         HS Hr
                 &  H&          H&  Hi
Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Views2.1K
Comments 13

Java простое веб-приложения. Логин и регистрация

Website developmentJava
Sandbox

Всем доброго времени суток.


Эта статья рассчитана для новичков в мире Web и Java. Мы рассмотрим стандартную архитектуру веб-приложения и сделаем небольшой проект с нуля.


Будем использовать Spring (Огромный фреймворк для веба), но по минимуму. Если не иметь предыдущего опыта использования и сразу пытаться использовать весь функционал, то не будет базового понимания, так как имеется перечень подводных камней.


Что будет делать приложение


Хочу представить короткий и в то же время полезный пример. Он минимально загружен и по итогу вы сможете использовать его как шаблон.


Думая, с чем люди часто должны сталкиваться при разработки веб-приложения, понял что реализация логина и регистрации будет достаточно показательной и полезной.


Исходный код вы сможете найти здесь.

Читать дальше →
Total votes 20: ↑13 and ↓7 +6
Views12.9K
Comments 20

Как мы в 2020 году изобретали процесс разработки, отладки и доставки в прод изменений базы данных

QIWIPostgreSQLKotlinMicroservicesKubernetes
На дворе 2020 год и фоновым шумом вы уже привыкли слышать: «Кубернетес — это ответ!», «Микросервисы!», «Сервис меш!», «Сесурити полиси!». Все вокруг бегут в светлое будущее.

Подходы в том, что касается баз данных, в нашей компании более консервативны, чем в прикладных приложениях. Крутится база данных у нас не в кубернетесе, а на железе или в виртуалке. Для изменений базы данных процессинга платежных сервисов у нас есть устоявшийся процесс, который включает в себя множество автоматических проверок, большое ревью и релиз с участием DBA. Количество проверок и привлекаемых людей в этом случае негативно влияет на time-to-market. С другой стороны, он отлажен и позволяет надежно вносить изменения в продакшен, минимизируя вероятность что-то сломать. А если что-то сломалось, то нужные люди уже включены в процесс починки. Этот подход делает работу основного сервиса компании стабильнее.

Большинство новых реляционных баз данных для микросервисов мы заводим на PostgreSQL. Отлаженный процесс для Oracle хоть и надёжный, но несет с собой избыточную сложность для маленьких БД. Тащить тяжёлые процессы из прошлого в светлое будущее никто не хочет. Проработкой процесса для светлого будущего заранее никто не занялся. В итоге получили отсутствие стандарта и разножопицу.



Если хотите узнать, к каким проблемам это привело и как мы их порешали, — добро пожаловать под кат.
Читать дальше →
Total votes 36: ↑36 and ↓0 +36
Views12.5K
Comments 34