Мне нужно вкратце подумать о бизнес-приложении, которое я собираюсь создать. Я хотел бы разделить три уровня презентация, логика предметной области и данные, используя PHP, Python и PostgreSQL соответственно. Я хотел бы услышать, возможно, от других людей, которые уже прошли этот путь раньше, если есть проблемы с этим подходом, если я нацелен не на те инструменты и т. д.
Я смотрю на PHP, потому что он широко используется, достаточно зрелый, и я могу найти достаточно людей с навыками в дизайне интерфейсов PHP.
Я смотрю на Python из-за преимуществ читаемого кода, потому что я слышал, что можно найти больше программистов Python, которые также имеют предметные навыки (в данном случае финансы), и это язык с открытым исходным кодом. Кроме того, кажется, что с ним проще писать код.
Я ищу в PostgreSQL функции уровня транзакции. MySQL здесь тоже вариант, но мне не нужно обсуждать этот аспект.
Это не веб-приложение, хотя я хотел бы использовать браузер для пользовательского интерфейса. Это скорее корпоративное приложение, но для малого бизнеса с умеренным количеством пользователей (возможно, 5-10) и скромным количеством ежедневных транзакций.
Важно то, что в будущем мы сможем обновить логику или интерфейс базы данных или домена отдельно от других уровней.
Я НЕ ищу споров между покупкой и сборкой, это другое обсуждение.
Спасибо за понимание






Я лично согласен со вторым и третьим пунктами вашего поста. Что касается PHP, на мой взгляд, вы можете использовать Python и для презентации, существует множество решений (Zope, Plone ...) на основе Python.
Посмотрите на Джанго.
Код Python. Язык шаблонов, который допускает некоторые из тех же функций, что и PHP, - немного другой синтаксис.
Модель отделена от функций просмотра («бизнес-правил») и от представления. Это применяется во всем Django.
Один из распространенных вопросов: «Почему я не могу сделать - какую-то сумасшедшую PHP-подобную вещь - в шаблоне Django?» Ответ в том, что презентация не обрабатывается. Выполняйте свою обработку в функциях просмотра Django. Отобразите результаты в шаблоне как HTML.
Кроме того, в Django есть уровень ORM, который отвлекает вас от мелких вопросов, связанных с SQL. MySQL или PostgreSQL более или менее эквивалентны внутри Django.
Редактировать
«Зрелость» означает многое. Вы особо упомянули квалифицированных людей как признак зрелости.
Django - это чистый Python. Если вы сможете найти людей, занимающихся Python, они смогут изучить Django за несколько дней. Им просто нужно делать уроки.
Сайт на базе Django - это обычно Apache + some glue + Django. Клей может быть mod_wsgi, mod_python или mod_fastcgi. Вы должны осторожно управлять этой конфигурацией, потому что в ней есть несколько движущихся частей. Это, однако, та же проблема конфигурации Apache, что и у вас с PHP - здесь нет ничего нового.
Сайт Django имеет один или несколько экземпляров сервера Django, каждый с файлом настроек, сопоставлением URL-адресов и любым количеством приложений. На данный момент чистый Python.
Приложение Django имеет сопоставления URL-адресов, модель и представления. Все на чистом Python. Модуль протестирован с расширениями Django для собственной внутренней среды unittest Python.
Модель использует слой ORM. Возможно, это самая запутанная вещь в Django. Люди иногда создают очень странные модели, потому что думают либо слишком универсально, либо слишком много думают о SQL. Django - это золотая середина в основном объектно-ориентированного программирования с некоторым учетом SQL. Получите это, и вас не остановить.
Приложение Django может иметь шаблоны, написанные на их собственном языке шаблонов. Это будет единственная вещь, не связанная с Python, которая представляет большой интерес. Вы можете добавить собственные теги - чистый Python.
У вас, вероятно, будет JavaScript (также верно для PHP и любой другой инфраструктуры веб-приложений). Здесь ничего нового.
Поскольку приложение администратора Django автоматически обрабатывает базовую обработку CRUD, вам не нужно писать это. Вы можете писать все, что хотите. Но это не обязательно. Это приводит вас к очень и очень мощному гибриду.
Вы пишете несколько сложных критических транзакций. Чистый Python, кстати.
Вы не пишете никаких глупых транзакций по обслуживанию таблиц. Никакой код не превосходит Python или PHP.
После того, как вы познакомитесь с механизмом шаблонов и CSS, вы можете настроить интерфейс администратора так, чтобы он выглядел как угодно. Это материал HTML / CSS, а не Python или PHP.
Нижняя граница. Большая часть набора навыков - это Python. ORM - синтаксически - Python, но требует некоторой осторожности, чтобы делать вещи просто и чисто. Шаблон - это собственный язык, но значительно проще, чем PHP. Остальное - это SQL, Javascript, HTML, CSS, Apache и тому подобное.
Редактировать
Зрелость Джанго
См. Количество активных проектов в http://www.djangoproject.com/community/.
Присоединяйтесь к http://groups.google.com/group/django-users, чтобы получать ежедневный поток писем от пользователей.
Блог Django восходит к '05, а это означает, что у них были годы солидного опыта, прежде чем, наконец, выпустили 1.0 в сентябре '08. Очевидно, разработка началась в 2003 году.
Отличное редактирование! Спасибо за подробности.
Что ж, я беспокоился о зрелости не о Python, а о структуре Django. Поймите, я не пытаюсь сломать Django, я просто пытаюсь принять обоснованное решение об уровне поддержки, доступной для поддержки технологии, если меня не будет рядом после разработки приложения.
Проверьте страницу Django на предмет «разработчиков по найму», если вас интересует зрелость с точки зрения занятости. Я бы согласился использовать Django. Не смешивайте PHP и Python. В Django есть все необходимое, включая утилиты для упрощения некоторых функций.
Просто пропустите PHP и используйте Python (с Django, как уже было замечено, когда я печатал). Django уже разделяет слои, как вы упомянули.
Сам я никогда не использовал PgSQL, но думаю, что предпочтение от него над MySQL - дело вкуса. Раньше он поддерживал больше корпоративных функций, чем MySQL, но я не уверен, что это все еще верно для MySQL 5.0 и 5.1. В любом случае транзакции поддерживаются в MySQL (однако вы должны использовать механизм таблиц InnoDB).
Просто чтобы решить проблемы MySQL и PgSQL - это не имеет значения. Они оба более чем способны справиться с этой задачей, и любая разумная структура должна относительно хорошо изолировать вас от различий. Я думаю, дело в том, что вы уже используете, в чем люди имеют наибольший опыт, и есть ли в том или другом функция, от которой, по вашему мнению, вы выиграете.
Если у вас нет предпочтений, вы можете использовать MySQL просто потому, что он более популярен для работы в Интернете. Это приводит к появлению большего количества примеров, облегчению поиска помощи и т. д. На самом деле я предпочитаю философию PgSQL, но это не достаточно веская причина, чтобы дуть против ветра.
Я собираюсь предположить, что под «бизнес-приложением» вы подразумеваете веб-приложение, размещенное в среде интрасети, а не какое-то приложение SaaS в Интернете.
Пока вы разрабатываете архитектуру своего приложения, вам необходимо учитывать существующую инфраструктуру и людей, обслуживающих инфраструктуру, вашего работодателя / клиента. Кроме того, если компания достаточно велика, чтобы иметь такие вещи, как «списки утвержденного программного и аппаратного обеспечения», вам следует об этом знать. Имейте в виду, что некоторые элементы списка могут быть просто запаздывающими. Не позволяйте прошлым ошибкам определять архитектуру вашего приложения, но в тех случаях, когда они разумны, я бы выбрал свои сражения и придерживался вашего корпоративного стандарта. Это может быть настоящей болью, когда вы выбираете стек разработки, который действительно лучше всего работает в Unix / Linux, а затем кто-то пытается принудительно подключиться к серверу Windows, администрируемому кем-то, кто никогда не касался ничего, кроме приложений ASP.NET.
Если вы не собираетесь использовать конкретный модуль PHP, не имеющий эквивалента Python, я бы отказался от PHP и использовал Django. Если есть веская причина использовать PHP, я бы отказался от Python. Мне сложно представить сценарий, в котором вы хотели бы использовать и то, и другое одновременно.
Что касается PG по сравнению с MySQL, любой из них работает. Посмотрите, что ваш клиент уже развернул, и, если у них много одного и мало другого, выберите это. Если у них есть существующая инфраструктура Oracle, вам следует рассмотреть возможность ее использования. Если это магазин SQL Server ... пересмотрите свой стек и не забудьте выбрать свои сражения.
К счастью, у меня нет ограничений на то, какие инструменты я выберу для этого приложения. К сожалению, у меня нет ограничений на то, что я использую для этого приложения! Таким образом, я стараюсь быть уверенным, что иду в лучшем направлении, а не в том, что я считаю самым простым или интересным. Спасибо за ответ!
Отсутствие ограничений не означает, что не существует «более легких» и «более сложных» вариантов. Но если у вас есть реализация с нуля в организации с широким кругозором, я бы пошел с Django на PG. Это действительно здорово, и вы сможете заставить все работать очень быстро.
Я могу только повторить то, что уже говорили здесь другие люди: если вы выберете Python для уровня домена, вы ничего не получите (совсем наоборот), используя PHP для уровня представления. Другие уже советовали Django, и это может быть неплохим выбором, но недостатка в хороших веб-фреймворках Python нет.
Просто чтобы выбросить это там ... есть PHP-фреймворки, использующие MVC.
Codeigniter делает простые, но мощные вещи. Вы определенно можете отделить слой шаблона от слоя логики.
Спасибо за ответ. Больше всего меня беспокоит Django из-за относительной незрелости фреймворка. Мне нужно подумать о возможности найти множество разработчиков, которых я (или моя фирма) могу нанять для внесения обновлений в будущем. Что вы думаете о Django в этом отношении?