【问题标题】:How to structure Models and Views in NodeJS?如何在 NodeJS 中构建模型和视图?
【发布时间】:2011-06-24 15:18:03
【问题描述】:

我正在编写一个基于 NodeJS 的服务器端和客户端 JavaScript 应用程序。我有控制器、模型、视图和演示者。我面临的问题是代码的某些部分只需要在服务器端,一些客户端和两者兼而有之。

例如,控制器对我来说是纯服务器端的东西,所以它们不应该在客户端可用。另一方面,Presenter 是纯客户端的东西,因此应该在客户端可用。

看看我目前的坏结构:

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

我面临的问题是公用文件夹是文档根目录,而受保护的是文档根目录之外。我需要能够在客户端和服务器端使用视图。所以,我的观点不能受到保护。这同样适用于模型和大量其他事物。我也需要能够在客户端访问它们。

我开始认为我必须将整个结构放在文档根目录下,但某些配置文件除外。这是我应该做的吗?这种方法有什么问题吗?我之所以这么问,是因为大多数 Web 框架(Django、Zend 框架)的工作方式是框架位于文档根目录之外。

【问题讨论】:

    标签: node.js theory directory-structure serverside-javascript file-structure


    【解决方案1】:

    My github structure(已过时)

    -- 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
    

    这是基于expressbackbone。控制器是express-controllers public\routers 是使用davis 的客户端路由

    基本上,由于 MVC 在客户端和服务器之间被大量重用,唯一不公开的是服务器端测试和服务器端控制器。以及配置设置和任何基于 socket-io 的代码。

    我的建议很简单,两者都使用\public\

    因为在客户端和服务器上重用 MVC 是一个新事物,所以没有任何示例可以查看。除了在 github 上寻找大型开源 node.js 网站。

    【讨论】:

    • 感谢您的想法。我想只要配置/密钥/密码不被提及,人们也可以将控制器、测试和其余部分公开。如果视图、模型、演示者是公开的,但控制器是一步下降,这让我感到更加困惑。我知道这是基于合乎逻辑的决定,但感觉很混乱。考虑到代码都被编译成垃圾用于生产并且具有潜在密钥/密码的配置受到保护,您认为将所有内容公开有什么不好的地方吗?
    • @rFactor 无需公开仅服务器端的代码。客户端是开源的。客户端 javascript 不能隐藏/封闭源代码。你没有选择。为文件结构添加了更多细节。是的,密钥/密码等不公开。
    • @Raynos -- 你使用 Davis 而不是 Backbone 路由器有什么原因吗?
    • @Tauren davis 有一个更好的 API。而且我不喜欢骨干。整个答案已经完全过时了。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多