Pull to refresh
0
0
Send message

Python service layer: основы оформления бизнес-логики на примере Django-приложений

Reading time18 min
Views36K

Django - отличный фреймворк, но он, на самом деле, толком не дает, да и не должен давать, ответ на вопрос, каким образом лучше всего хранить вашу бизнес-логику. Хранение бизнес-логики в моделях или views имеет множество недостатков, которые обычно начинают проявляться при росте кодовой базы проекта. Чтобы решить эти проблемы, разработчики часто начинают искать способы выделения бизнес-логики в своем приложении.

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

Так же хочу обратить внимание, что цель данной статьи не в том, чтобы дать правила, которым требуется слепо следовать, но в том, чтобы указать направление. Сервисный слой и в принципе его наличие, это такая вещь, которую нужно адаптировать под нужды вашей команды, компании и бизнеса.

На самом деле, изложенный далее текст относится не только к Django-проектам. Разрабатывая веб-приложения, используя другие инструменты, вроде Flask, люди используют те же концепции веб-разработки, причём часто именно в таком же виде, как они реализованы, в Django - views, request-response объекты, middlewares, модели, формы.

Читать далее
Total votes 20: ↑20 and ↓0+20
Comments15

Юнит-тестирование для чайников

Reading time15 min
Views1.1M
Даже если вы никогда в жизни не думали, что занимаетесь тестированием, вы это делаете. Вы собираете свое приложение, нажимаете кнопку и проверяете, соответствует ли полученный результат вашим ожиданиям. Достаточно часто в приложении можно встретить формочки с кнопкой “Test it” или классы с названием TestController или MyServiceTestClient.



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

Оно выполняет свою задачу, но сложно для автоматизации. Как правило, тесты требуют, чтобы вся или почти вся система была развернута и сконфигурирована на машине, на которой они выполняются. Предположим, что вы разрабатываете web-приложение с UI и веб-сервисами. Минимальная комплектация, которая вам потребуется: браузер, веб-сервер, правильно настроенные веб-сервисы и база данных. На практике все еще сложнее. Разворачивать всё это на билд-сервере и всех машинах разработчиков?

We need to go deeper
Total votes 70: ↑63 and ↓7+56
Comments65

Yeoman для новичков

Reading time3 min
Views85K


Есть такие программы и утилиты, воспользовавшись которыми, пользователь возопит: «Не знаю, как я мог жить без этого инструмента раньше!». На мой взгляд, консольная утилита Yeoman, написанная на Node.JS, относится как раз к разряду таких незаменимых инструментов. Почему?
Давайте посмотрим
Total votes 44: ↑40 and ↓4+36
Comments51

Несколько интересностей и полезностей от веб-разработчика *

Reading time12 min
Views44K
* Надеюсь, ilusha_sergeevich не обвинит меня в плагиате.
Если что, пост переименую.

[Тут была картинка для привлечения внимания]



Всем привет! За время работы постепенно накапливаются наработки, которыми можно было бы поделиться с сообществом. Но ни одна из этих наработок не тянет на большой полноценный пост. Поэтому я собрал все мелочи, что вспомнил, в одной статье: несколько простых опен-сорц проектов, пара советов и находок. Каждый из предложенных скриптов в этой статье поставляется как есть, под лицензией WTFPL (кроме Балалайки). С радостью приму пулл реквесты с исправлением багов или изменениями в README.


donut.js — микро-библиотека, рисующая бубликовые (donut) и круговые диаграммы


image
Во время работы над очередным проектом, появилась задача нарисовать много информативных бубликов на карте мира, и не просто нарисовать, а еще и поддержать ИЕ8, который, как известно, не умет SVG, а только безобразный VML. Первое, что приходит в голову, это Raphael. Порывшись некоторое время, я нашел это решение. К сожалению, автор проявил изобретательность простым хаком: на круговой диаграмме (pie chart) он нарисовал белый круг. Это решение не подошло, так как дырка бублика должна быть прозрачной. Изучение возможности рисования при помощи Raphael таких диаграмм мне показалось чересчур трудоёмким. Остальные скрипты на просторах интернета мне так же не подошли. Пришлось писать свой костыль, взяв за основу математику рисования арок этого проекта. Арки для VML версии нарисованы используя элемент arc.
var myDonutDiv = donut(options);

Читать дальше →
Total votes 86: ↑55 and ↓31+24
Comments55

Балансировка нагрузки с LVS

Reading time6 min
Views100K
Итак, у вас есть нагруженный сервер и вам вдруг захотелось его разгрузить. Вы поставили и залили такой же (такие же), но пользователи упорно ходят на первый. В этом случае конечно же нужно задуматься о балансировке нагрузки.

Читать дальше →
Total votes 77: ↑77 and ↓0+77
Comments50

Oscar — магазин на Django

Reading time2 min
Views43K
image

Всем тем кто делает сайты с использованием фреймворка Django (и тем-более если частенько приходится делать магазины), не понаслышке знакомы такие проекты как satchmo, lfs, satchless, django-shop, cartridge, plata и другие. Относительно недавно эти ряды пополнил Oscar.
Читать дальше →
Total votes 32: ↑25 and ↓7+18
Comments12

Как купить Linux VPS сервер

Reading time5 min
Views138K
Рано или поздно у тех, кто связан с деятельностью в интернете возникает потребность в своём сервере, перенести развитой сайт на более производительную площадку (или просто 1C-Bitrix запустить), запустить свой интернет-сервис, игровой сервер с Counter-Strike или внеочередной RPG. Да мало ли этих целей в современном вебе.

Вот и у меня недавно возникла потребность в переходе с моего древного shared хостинга на что-то более быстрое и функциональное. Держать домашний сервер я утомился и решил, что можно остановиться на VPS (Virtual Private Server) сервере, как вполне доступном и удобном решении моих задач.

Задачи на сейчас – совместная разработка (и обучение) на RoR и перенос пары клиентов с их сайтами на одну площадку, для удобства управления. Столкнувшись со сложностями в выборе (VPS нынче многие дают) решил, что может быть мой опыт сэкономит кому то время или подскажет критерий и метод оценки.

Приступим.
Читать дальше →
Total votes 46: ↑26 and ↓20+6
Comments38

Прибыльный интернет магазин. Часть I: обзор метрик и способов увеличения прибыли

Reading time3 min
Views27K
Каждый владелец интернет магазина рано или поздно задумывается о мероприятиях, направленных на увеличение прибыли. Как правило, эти мероприятия сводятся к случайным изменениям в дизайне сайта и тестировании нового рекламного канала. В них нет системы.

Дело в том, что у большинства руководителей нет видения, что и как влияет прибыльность магазина и с помощью каких метрик, можно отследить текущее положение дел. В результате вместо реальной работы по созданию прибыльного интернет магазина, руководитель решает частные вопросы, вроде «влить денег в контекст или поработать над юзабилити».

Читать дальше →
Total votes 13: ↑6 and ↓7-1
Comments5

Простой Ethernet-туннель на Linux в четыре-шесть команд

Reading time2 min
Views91K
Краткая шпаргалка:
HOST1: ip link add grelan type gretap  local <IP1> remote <IP2>
HOST1: ip link set grelan up
HOST1: iptables -I INPUT -p gre -s <IP2> -j ACCEPT
HOST2: ip link add grelan type gretap local <IP2> remote <IP1>
HOST2: ip link set grelan up
HOST2: iptables -I INPUT -p gre -s <IP1> -j ACCEPT


Четыре команды на туннель и две на firewall (не нужны если трафик между своими серверми уже разрешен)
Это всё что нужно, дальше длинное объяснение с подробностями.
Читать дальше →
Total votes 52: ↑44 and ↓8+36
Comments35

Вводная по сложным запросам в SQLAlchemy

Reading time7 min
Views92K

Во время посещения PyConRu 2014 я, с удивлением, узнал, что достаточно большая аудитория python-разработчиков не использует SQLAlchemy в качестве основного инструмента для работы с базой данных. Порассуждав на данную тему после Light Talks с коллегами было принято решение — во чтобы то ни стало написать статью о том, что же можно делать со всей мощью SQLAlchemy.


Обычно в написании сайтов не требуется чего-нибудь этакого от штатного ORM. А если и требуется, то хватает замены на нештатный или прочтения основной части документации. И, как правило, голову ломать над сложными запросами не приходится. Достаточно много различных ORM предлагают классические схемы One-2-Many, One-2-One, Many-2-Many, и т.д. Для обычных запросов и связей этого вполне достаточно. К сожалению, в больших проектах не обходится без частных случаев и программисты при сложных запросах пишут либо raw sql, либо полагаются на то, что им предлагает базовый функционал ORM. Это выглядит не совсем красиво или создает достаточно большую нагрузку на базу данных.

Понятно, что в погоне за скоростью выполнения сценариев, можно пожертвовать красотой кода, но что если скоростью можно пренебречь, а вот кроссплатформенностью — нет? Да и не хочется в python коде видеть что-то кроме python кода. А что если хочется на полную катушку использовать любимый ORM (для меня SQLAlchemy) и не писать raw sql запросы?
Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments10

Выбираем DLP-систему для средней организации

Reading time4 min
Views173K
image
Добрый день, уважаемое хабрасообщество! Не так давно перед нашей компанией встал вопрос, какую из систем защиты от утечек данных выбрать. Под катом собственные мысли по данному вопросу, а также сравнительная таблица с описанием возможностей систем.
Читать дальше →
Total votes 25: ↑17 and ↓8+9
Comments78

Проверка репликации MySQL master-master через Zabbix

Reading time3 min
Views5.9K
После настройки MySQL репликации master-master, следующий логический шаг это настройка проверки этой системы. Читая туториалы по интернету стало ясно, что подобная репликация — дело популярное, а слетает оно на раз два три. Поэтому решил вставить проверку — а работает ли репликация до сих пор, или что-нибудь произошло и все слетело.
Первые же несколько гугл запросов показали, что верить «SHOW SLAVE STATUS\G» нельзя: Штука хорошая, но врет часто и помногу. Немного подумав, я пришел к следующему решению:
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments4

HowTo: Skype-шлюз на базе FreeSwitch

Reading time8 min
Views29K
В этой статье я бы хотел рассмотреть создание SIP<->Skype шлюза для проброса входящих skype-вызовов на корпоративную IP АТС (в данном случае это будет Asterisk). Так как Skype на данный момент является, пожалуй, самым популярным клиентом VoIP среди пользователей, возможность позвонить в Вашу компанию через Skype будет дополнительным плюсом для клиентов.
Читать дальше →
Total votes 36: ↑36 and ↓0+36
Comments38

Unit-тестирование средствами .NET

Reading time8 min
Views58K
Основная идея юнит (или модульного, как его еще называют) тестирования – тестирование отдельных компонентов программы, т.е. классов и их методов. Разрабатывать код, покрытый тестами, весьма полезно, потому что при их правильном использовании практически исключается возможность регресии в истории развитии программы – «что-то новое добавили, половина старого слегла». Также сейчас весьма модна методология разработки “TDD” — Test Driven Development. Согласно ей, программист вначале разрабатывает набор тестов для будущей функциональности, просчитывает все варианты выполнения, и лишь потом начинает писать непосредственно рабочий код, подходящий под уже написанные тесты.

Так как существование тестов в программе является не только подтверждением квалификации разработчика, но и зачастую требованием заказчика, я решил заняться этим вопросом и «пощупать» тесты вблизи.
Читать дальше →
Total votes 25: ↑16 and ↓9+7
Comments23

Information

Rating
Does not participate
Registered
Activity