2

NodeJS ベースのサーバー側およびクライアント側の JavaScript アプリケーションを作成しています。コントローラー、モデル、ビュー、およびプレゼンターがあります。私が直面している問題は、コードの一部がサーバー側のみ、一部がクライアント側、一部が両方である必要があることです。

たとえば、コントローラーは私にとって純粋なサーバー側のものであるため、クライアント側で利用できるべきではありません。一方、プレゼンターは純粋なクライアント側のものであるため、クライアント側で使用できる必要があります。

私の現在の悪い構造を見てください:

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

私が直面している問題は、パブリック フォルダーがドキュメント ルートであり、保護されているフォルダーがドキュメント ルートの外にあることです。クライアント側とサーバー側の両方でビューを使用できる必要があります。したがって、私のビューを保護することはできません。同じことがモデルや他の多くのものにも当てはまります。クライアント側でもそれらにアクセスできる必要があります。

一部の構成ファイルを除いて、構造全体をドキュメントルートの下に配置する必要があると考え始めています。これは私がすべきことですか?このアプローチに問題はありますか? 私が質問しているのは、ほとんどの Web フレームワーク (Django、Zend Framework) が、フレームワークがドキュメント ルートの外にあるように動作するためです。

4

1 に答える 1

3

私の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およびbackboneに基づいています。コントローラはエクスプレス コントローラです public\routers は、 davisを使用したクライアント側のルーティングです

基本的に、MVC はクライアントとサーバー間で非常に頻繁に再利用されるため、公開されていないのはサーバー側のテストとサーバー側のコントローラーだけです。構成設定とすべての socket-io ベースのコードと同様に。

私のアドバイスは単純で、両方で使用されるものは何でも入るということです\public\

クライアントとサーバーの両方で MVC を再利用することは新しいことなので、参照できる例はありません。github で大規模なオープン ソースの node.js Web サイトを探すことは別として。

于 2011-06-24T15:29:49.157 に答える