Вопрос

Я относительно новичок в PHP, но имею опыт Java-программиста в сложных корпоративных средах с архитектурой SOA и многоуровневыми приложениями.Там мы обычно реализуем бизнес-приложения с бизнес-логикой на среднем уровне.

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

У пользователей есть учетные записи, и они получают баланс.Кроме того, система рассчитывает цены в зависимости от общего объема оказанных услуг и общего объема имеющихся активов.

Это означает, что при покупке происходит ряд расчетов;баланс и итоги обновляются;это производные цифры, которые обычно не помещаются в базу данных.

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

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

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

Это было полезно?

Решение

Как и в наши дни, уйти от БД — это, как правило, хорошо.Вы получаете более простой контроль версий и можете работать только на одном языке.Более того, я считаю, что хранимые процедуры — это трудный путь.С другой стороны, если вам нравятся эти вещи и вы чувствуете себя комфортно с SP в MySql, они неплохие, но мне всегда казалось, что их сложнее отлаживать и сложнее обрабатывать.

Что касается триггеров, я не уверен, необходимо ли это для вашего приложения.Поскольку события, запускающие вычисления, вызываются пользователем, такие вещи могут произойти в PHP, даже если пользователь тем временем перенаправляется на «ожидающую» страницу или другую страницу.Очевидно, что настоящие триггеры могут быть реализованы только на уровне БД, но вы можете использовать поток демона, который запускает PHP-скрипт каждые X секунд...Избегайте этого любой ценой и постарайтесь, чтобы событие инициировалось на стороне пользователя.

Учитывая все это, я хотел подключить свое любимое решение для уровня доступа к данным на PHP: Доктрина.Он не идеален, но PHP, какой он есть, достаточно хорош.Делает большую часть того, что вам нужно, и позволяет вам работать с объектами, а не с процедурами базы данных и т. д.

Что касается вашего названия, в PHP вполне выполнимы несколько уровней, но вы должны их выполнять и уважать их.PHP-код может вызывать другой PHP-код, и теперь (5.2+) это хорошо объектно-ориентированный подход и все такое.Обязательно игнорируйте тот факт, что большая часть PHP-кода, который вы увидите, является полной чушью и даже не использует методы, не говоря уже об уровнях и достойном объектно-ориентированном моделировании.Все это возможно, если вы хотите это сделать, включая создание собственного (или использования существующего) решения MVC.

Другие советы

Одна из проблем с переносом множества функций на уровень БД вместо уровня абстракции данных заключается в том, что вы привязаны к набору функций СУБД.Программное обеспечение с открытым исходным кодом часто пишут так, чтобы его можно было использовать с разными БД (конечно, не всегда).Возможно, в будущем вы захотите упростить портирование на postgres или какую-либо другую СУБД.Использование множества специфических функций MySQL теперь усложнит задачу.

Нет абсолютно ничего плохого в использовании триггеров, хранимых процедур и других функций, предоставляемых вашим сервером БД.Он работает и работает хорошо, вы используете весь потенциал БД, а не просто превращаете ее в упрощенное хранилище данных.

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

Спасибо ребята.

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

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

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

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

С другой стороны, я, конечно, согласен, что отладку базы данных может оказаться очень сложной.

Сценарии инициализации БД находятся в системе контроля версий, как и файлы php :)

еще раз спасибо

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top