免责声明:我是Node.js的新手。
有许多基于类的语言,您可以/必须使用名称空间来组织代码,例如:Java,PHP,ActionScript 3 ...对于许多这样的语言,如果你选择/必须使用名称空间,通常有一套管理项目组织的通用实践和约定:
src/
或lib/
)。com.badlogic.gdx.Application
文件src/com/badlogic/gdx/Application.java
PHP中的Symfony\Component\HttpKernel\Kernel
文件中可以找到类src/Symfony/Component/HttpKernel/Kernel.php
import com.badlogic.gdx.Application;
use Symfony\Component\HttpKernel\Kernel;
我已经习惯了这种类型的项目组织,但我确实认识到它特定于基于类/命名空间的语言,并且它可能与JavaScript / Node.js常用的习惯用法不匹配。如果我正确理解Node.js模块的概念,那就是 1源文件= 1模块,但是从我在很多NPM包中看到的,模块通常会导出多个符号,而且这些导出通常是函数而不是类/构造函数,因此它与上述约定完全不同。
所以,我有以下问题:
答案 0 :(得分:1)
在JavaScript / Node.js中,根据“仅限类别”(或“仅原型”)来考虑责任分配是否相关?
说实话,我真的不明白这个问题。如果你使用类,你应该遵循OOP原则,但如果你不这样做,你仍然需要找到你的功能之间的凝聚力,并根据它在模块和文件夹中组织它们。
在Node.js项目的上下文中,上面描述的代码组织类型是通常的还是相关的,并且技术上是否可以实现而没有太多麻烦?
Javascript模块没有命名空间,这使事情变得更容易(请记住,C#和c ++项目通常具有与命名空间完全不同的文件夹结构)。使用文件夹作为命名空间,你会没事的。没有这样的规则,每个源文件只能有一个类。我通常开始在一个文件中编写类和函数,并在文件变大时重新组织成多个文件。 JavaScript的模块系统非常灵活,您可以按照自己想要的任何方式组织代码。
如果没有,在Node.js项目中处理职责重新分配和代码重用的传统方法是什么?
和其他地方一样。
答案 1 :(得分:1)
在JavaScript / Node.js中,根据“仅限类别”(或“仅原型”)来考虑责任分配是否相关?
在Javascript中,这是一个选择而不是授权。你可以明智地完整的OOP文件结构。或者只是将模块编写为纯函数。我建议你坚持使用对于其他人来说更容易理解你的代码的结构。例如,OOP样式:
让命名空间成为src
下的路径/src/org/xml/XMLDocument.js
并且有一个与流行的OOP语言非常相似的类:
// imports
const fs = require('fs');
const XMLNode = require('./XMLNode');
// class def
class XMLDocument extends XMLNode {
// constructor
constructor(filePath){
...
}
// property getter
get filePath(){
...
}
// method
function getElementsByName(name){
...
}
}
// export class to outer world
module.exports = XMLDocument;
使用班级
// import
const XMLDocument = require('./org/xml/XMLDocument');
// create an instance
const doc = new XMLDocument('./mydoc.xml');
所以是的,当您以OOP方式解决问题时,遵循OOP结构是相关的。还有其他方法。
另一种面向自定义风格的“创作者”:
function createXMLDocument(filePath){
const doc = {};
doc._type = "XMLDocument";
... // make the object have XMLDocument features
return doc;
}
function createDXMLDocument(filePath){
const doc = cerateXMLDocument(filePath);
doc._type = "DXMLDocument";
... // modify parent object with DXML features
return doc;
}
你知道,开发人员遵循一些模式,并以该风格编写所有项目代码。
在Node.js项目的上下文中,上述项目组织的类型是否可行?
由于某些功能,Node.js项目可以有任何类型的代码组织:
Javascript模块系统只是引用文件系统中某处的js文件。因此对文件放置没有特殊限制。有些模块是内置的,或者可以通过npm安装。
模块导出可以将一个或多个“事物”导出到外部世界。所以这里也有很多灵活性。
Javascript本身可以很容易地用很多样式,功能,OOP,程序等来编写。它允许开发人员修改很多Javascript本身的性质。因此可能“模仿”许多编程风格。