По мере роста потребностей веб-приложений я обнаружил, что я пишу все больше веб-приложений, управляемых API. Я использую фреймворки, такие как AngularJS, для создания богатых веб-клиентов, которые общаются с этими API. В настоящее время я использую PHP (Lumen или Laravel) для серверной части/API.Как избежать повторения бизнес-логики между клиентом и сервером?
Проблема заключается в том, что я часто повторяю бизнес-логику между клиентом и сервером.
Когда я говорю бизнес-логики я имею в виду правила, как следующий за форму заказа:
- Вы можете купить X, если вы покупаете Y.
- Вы не можете купить Y, если у вас есть Z.
- Если вы купите 10 из них, вы получите 10% скидки.
- Высота x Ширина x Глубина x Стоимость = Окончательная стоимость.
- Высота должна быть в пределах от 10 до 20, если ваша ширина больше 5.
- Etc и т.д.
Чтобы сделать это приложение как реагировать и быстро, логика для вычислений (наряду с другими бизнес-логики) выполняется на стороне клиента. Поскольку мы не должны доверять клиенту, я затем повторно проверяю эти номера на стороне сервера. Эта логика может стать довольно сложной и написание этой сложной логики в обоих местах кажется опасным.
У меня есть три решения в виде:
сделать все, что требуется бизнес-логика сделать AJAX вызов к API. Вся бизнес-логика будет жить в одном месте и может быть проверена один раз. Это может быть медленным, так как клиенту придется ждать каждого изменения, которое они вносят в форму заказа, для получения обновленных значений и результатов. Благодаря этому очень быстрый API. Основной недостаток заключается в том, что это может не сработать, когда пользователи плохо подключены (мобильные устройства).
Напишите бизнес-логику на стороне клиента И на стороне сервера. Клиент получает мгновенную обратную связь, поскольку они вносят изменения в форму, и мы проверяем все данные после их отправки на сервер. Недостатком здесь является то, что мы должны дублировать всю бизнес-логику и тестировать обе стороны. Это, безусловно, больше работы и сделает будущую работу хрупкой.
Доверьтесь клиенту!?! Напишите всю бизнес-логику на стороне клиента и предположите, что они не вмешиваются в данные. В моем текущем сценарии я работаю над создателем цитат, который всегда будет проверяться человеком, поэтому, возможно, это действительно нормально.
Честно говоря, я не доволен ни одним из решений, поэтому я обращаюсь к сообществу за советом. Я хотел бы услышать ваши мнения или подходы к этой проблеме!
Разве ваша проблема не просто имеет шаблон проектирования MVC в качестве решения? – Abhishek
Использование PHP на сервере ajax - самый крутой подход, и не должно быть больше нескольких мс, также вы можете установить экраны загрузки или предупреждения, если это займет больше. Вы можете переместиться в фреймворк, например, meteor/node, если бы вы все кодировали, и явным образом детализировали данные только для сервера или клиента. Вы можете сделать основные проверки на HTML-формах, а затем на сервере. Вы можете создавать библиотеки в js, доступные клиенту и доступные с сервера. Взгляните на это http://php.net/manual/en/v8js.executestring.php – Cristo
Надеюсь, это другое туто, в котором я вас интересовал: http://www.phpied.com/server-side-react-with -php/ – Cristo