Как структурировать модели и представления в NodeJS? - PullRequest
2 голосов
/ 24 июня 2011

Я пишу серверное и клиентское JavaScript-приложение на основе NodeJS. У меня есть контроллеры, модели, представления и докладчики. Проблема, с которой я сталкиваюсь, заключается в том, что некоторые части кода должны быть только на стороне сервера, а некоторые - на стороне клиента, а некоторые - оба.

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

Взгляните на мою текущую плохую структуру:

project\
project\public\index.js
project\public\images\
project\protected\controllers\
project\protected\models\
project\protected\views\
project\protected\presenters\

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

Я начинаю думать, что мне нужно поместить всю структуру в корневой каталог документа, за исключением некоторого файла конфигурации. Это то, что я должен сделать? Есть ли проблемы с этим подходом? Я спрашиваю, потому что большинство веб-фреймворков (Django, Zend Framework) работают так, что фреймворк находится вне корня документа.

1 Ответ

3 голосов
/ 24 июня 2011

Моя структура github (устаревшая)

-- Main level
project\
-- Your main app. Keep light
project\app.js
-- All your configuration, development/production setups
project\app-configure
-- Your server-side controllers/routing. Keep light
project\controllers\
-- Any WebSocket specific code.
project\socket-io\
-- Server side test
project\test\
-- Your public folder. Client side can access these files.   
-- Serve this folder as static content
project\public\
-- I keep my backbone collections here. Used on both server & client
project\public\collections
-- public css files
project\public\css
-- public js files. Including a main.js to bootstrap the router
project\public\js
-- public models used on both server & client.
project\public\models
-- client side router, used to router hashbang urls. Can use same routing
-- logic as the server. This is virtually a second set of controllers around
-- All your models
project\public\routers\
-- public tests. QUnit based
project\public\test\
-- View files
project\public\views
-- Templates used to render HTML. Used on client & server
project\public\views\templates
-- Backbone view files. Used to code up interaction, and business logic
-- This uses templates to render HTML and DOM events to handle interaction
project\public\views\backbone-views

Это основано на express и магистрали .Контроллерами являются экспресс-контроллеры public \ router - это маршрутизация на стороне клиента с использованием davis

В основном потому, что MVC так сильно используется повторно на клиенте и сервере, тольконепубличными являются тесты на стороне сервера и контроллеры на стороне сервера.А также настройки конфигурации и любой код на основе socket-io.

Мой совет прост: все, что используется в обоих случаях, относится к \public\

, поскольку MVC повторно используется как на клиенте, так и на клиенте.Сервер - это новая вещь, здесь нет примеров, на которые вы могли бы взглянуть.Помимо охоты на большие сайты с открытым исходным кодом node.js на github.

...