2012-04-17 2 views
2

Итак, я решил взять проект, над которым я работал, и систему управления проектами, и преобразовать его из стандартного многостраничного приложения в одностраничное приложение. В этом процессе я рассмотрел несколько javascript MV * ish frameworks (ember, knockout, backbone и т. Д.) И решил пойти с backbone.js, поскольку он кажется самым гибким решением и что я уже использую подчеркивание. js как для его утилит, так и для системы шаблонов.Магистраль и код модели PHP Дубликат

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

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

ответ

1

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

Если вы определенно хотите использовать тот же код на сервере и клиенте, вы должны переместить все его на единственный общий язык: JavaScript.

Есть несколько JS каркасов те, интегрировать очень прозрачно развитие между сервером и клиентом: derby, meteor, ...

3

Вы можете взглянуть на предыдущий вопрос я ответил с участием Node.js:

Reusing backbone views/routes on the server when using Backbone.js pushstate for seo/bookmarking

То, что я сейчас делаю сейчас использует Davis.js + Mustache + Java Spring MVC backened (на основе моего первоначального вопроса: Single page Web App in Java framework or examples?).

Если браузер не поддерживает Pushstate, то у меня есть сервер, который выполняет весь рендеринг страницы с использованием Java-версии Mustache (то есть стандартного Web 1.0). Если браузер поддерживает Pushstate, браузер сделает запрос AJAX для версии модели JSON. Затем модель визуализируется на стороне клиента icanhz (т.е. усы javascript).

Это работает достаточно хорошо, если большая часть вашей логики получает модель, а затем отображает ее на основе определенного URL-адреса. Это ваша бизнес-логика «основана на некотором URL, который я собираюсь сделать». Таким образом, большинство сайтов в Интернете работают (в том числе, это еще довольно веб-версия 1.0). Очевидно, что это не сработает для того, чтобы говорить что-то вроде чата реального времени или игры HTML5.

версия питона этой конструкции упоминается здесь: http://duganchen.ca/single-page-web-app-architecture-done-right/

Я уверен, что кто-то сделал PHP версии.

+0

Похоже, что здесь есть какая-то полезная информация, но после того, как вы прочитали больше на эту тему, я думаю, что я попытаюсь сохранить как можно больше бизнес-логики на стороне сервера, некоторые из них указали здесь: http: //programmers.stackexchange. ком/а/114800/20237. Единственное, на что я надеюсь дублировать в валидации, то, скорее всего, все остальное должно быть сохранено в коде сервера. Также я не могу использовать усы, поскольку мне действительно нужен механизм шаблонов, который поддерживает истинные условные выражения (например, if (someVar == 'some value ")), как это делает механизм шаблона подчеркивания. – ryanzec

+0

Если вам нужно больше логики для ваших шаблонов, вы можете попробовать использовать рули, которые являются расширением Усы. Я только что научился, кроме ограничений, и добавляю столько же к модели, сколько могу, чтобы помочь сделать (в некоторых случаях даже добавление html к модели). –

+0

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