¿Es necesaria la OOP en las aplicaciones web de Node.js?

Tl; dr Absolutamente no.

Yo personalmente diría que escribir Node.js en el estilo OOP solo te va a retrasar. Además, tratar de lograr una OOP pura en Node.js (o JS en general) requerirá una plantilla adicional para proporcionar características como el polimorfismo. (Además, la conversión de tipos simplemente no es una cosa en JS, sino que tenemos un alcance mutable).

También diría que no necesitas herencia. Podría, por ejemplo, elegir escribir en un estilo funcional y confiar en la composición.

La mayoría de los proyectos del mundo real que he visto que usan Node.JS están escritos en un híbrido de estilos funcionales, OO y de procedimiento. No hay verdadero bien o mal aquí; depende del producto que esté fabricando y de la forma en que desee estructurarlo.

Entré en Node.JS desde un entorno OO e intenté aplicar ese mismo estilo estricto al código que estaba escribiendo, pero rápidamente descubrí que estaba ignorando las características que proporcionaba Javascript en general.

Una gran diferencia entre JS y muchos lenguajes OO tradicionales es que las funciones son objetos de primera clase, lo que significa que puede crearlos fuera de las clases. Si considera esa declaración, se dará cuenta de que una clase solo agregará gastos generales y complejidad además de su funcionalidad.

Con Node.JS, también tiene módulos como la forma principal de romper su código. Los módulos pueden ser simulacros de singletons, bibliotecas de funciones, clases o incluso simplemente proporcionar un valor calculado.

Con eso en mente, diría que la forma “correcta” de escribir Node.js es escribir cada módulo de la manera más simple posible, y construir el código reutilizado en cualquier estilo que tenga sentido para esa pieza lógica particular. Si te vuelves pesado OO desde el principio con JS, es probable que compliques demasiado las cosas.

Estoy acostumbrado a la OOP clásica como en Java.

¿Cuáles son las mejores prácticas para hacer OOP en JavaScript usando NodeJS?

Cada clase es un archivo con module.export ?

¿Cómo crear clases?

this.Class = function () {
//¿constructor?
var privateField = “”
this.publicField = “”
var privateMethod = function () {}
this.publicMethod = function () {}
}

vs. (ni siquiera estoy seguro de que sea correcto)

this.Class = {
privateField: “”
, privateMethod: function () {}

, regreso {
publicField: “”
publicMethod: function () {}
}
}

vs.

this.Class = function () {}

this.Class.prototype.method = function () {}

¿Cómo funcionaría la herencia?

¿Existen módulos específicos para implementar OOP en NodeJS?

Estoy encontrando miles de formas diferentes de crear cosas que se parecen a OOP … pero no tengo idea de cuál es la forma más utilizada / práctica / limpia.

Pregunta adicional : ¿cuál es el “estilo OOP” sugerido para usar con MongooseJS? (¿Se puede ver un documento MongooseJS como una Clase y un modelo utilizado como una instancia?)

EDITAR

Aquí hay un ejemplo en JsFiddle, por favor envíe sus comentarios

//http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/
función heredarPrototipo (childObject, parentObject) {
var copyOfParent = Object.create (parentObject.prototype)
copyOfParent.constructor = childObject
childObject.prototype = copyOfParent
}

//ejemplo
función Canvas (id) {
this.id = id
this.shapes = {} // en lugar de array?
console.log (“Constructor de Canvas llamado” + id)
}
Canvas.prototype = {
constructor: lienzo
, getId: function () {
devuelve this.id
}
, getShape: function (shapeId) {
devuelve this.shapes [shapeId]
}
, getShapes: function () {
devuelve this.shapes
}
, addShape: function (forma) {
this.shapes [shape.getId ()] = forma
}
, removeShape: function (shapeId) {
var shape = this.shapes [shapeId]
si (forma)
eliminar this.shapes [shapeId]
forma de retorno
}
}

función Forma (id) {
this.id = id
this.size = {ancho: 0, altura: 0}
console.log (“Constructor de formas llamado” + id)
}
Shape.prototype = {
constructor: forma
, getId: function () {
devuelve this.id
}
, getSize: function () {
devolver este tamaño
}
, setSize: function (tamaño) {
this.size = tamaño
}
}

//herencia
función Square (id, otherSuff) {
Shape.call (this, id) // igual que Shape.prototype.constructor.apply (this, argumentos); ?
this.stuff = otherSuff
console.log (“Constructor cuadrado llamado” + id)
}
heredarPrototipo (cuadrado, forma)
Square.prototype.getSize = function () {// override
devuelve this.size.width
}

función ComplexShape (id) {
Shape.call (esto, id)
this.frame = null
console.log (“Constructor ComplexShape llamado” + id)
}
heredarPrototipo (ComplexShape, Shape)
ComplexShape.prototype.getFrame = function () {
devuelve this.frame
}
ComplexShape.prototype.setFrame = function (frame) {
this.frame = frame
}

marco de función (id) {
this.id = id
this.length = 0
}
Frame.prototype = {
constructor: marco
, getId: function () {
devuelve this.id
}
, getLength: function () {
devuelve this.length
}
, setLength: function (length) {
this.length = length
}
}

/////correr
var aCanvas = nuevo lienzo (“c1”)
var anotherCanvas = nuevo Canvas (“c2”)
console.log (“aCanvas:” + aCanvas.getId ())

var aSquare = nuevo cuadrado (“s1”, {})
aSquare.setSize ({ancho: 100, alto: 100})
console.log (“tamaño sobrescrito cuadrado:” + aSquare.getSize ())

var aComplexShape = new ComplexShape (“supercomplex”)
var aFrame = nuevo marco (“f1”)
aComplexShape.setFrame (aFrame)
console.log (aComplexShape.getFrame ())

aCanvas.addShape (aSquare)
aCanvas.addShape (aComplexShape)
console.log (“Formas en aCanvas:” + Object.keys (aCanvas.getShapes ()). length)

anotherCanvas.addShape (aCanvas.removeShape (“supercomplejo”))
console.log (“Formas en aCanvas:” + Object.keys (aCanvas.getShapes ()). length)
console.log (“Formas en anotherCanvas:” + Object.keys (anotherCanvas.getShapes ()). length)

console.log (una instancia cuadrada de Shape)
console.log (una instancia de ShapeComplexShape)

javascript node.js oop herencia mangosta

No, no necesitas aprender todos esos prototipos de herencia y cosas para trabajar con la herencia.

Muchos de mis compañeros de trabajo ni siquiera saben qué es el prototipo, pero aún envían toneladas de código nodejs.

Prototype es un mecanismo utilizado por javascript para admitir oops. No voy a decir aquí cómo y por qué, ya que este es un tema muy importante. y hay toneladas de material alrededor de esto en internet. Object.prototype

Pero para agregar a su pregunta, sí, se usa en grandes proyectos con escala. OOPs proporciona una manera mucho mejor para escalar su proyecto usando herencia y polimorfismo.

Si no se siente cómodo con el prototipo, puede usar la última versión de nodo con sintaxis ES6 que admita la notación de clase normal y amplíe el tipo de palabras clave para la herencia como lo hacemos en Java.

TypeScript admite clases y, finalmente, Node también lo hará, por lo que será necesario para cuando ES6 se convierta en la corriente principal.

Si necesario. En ES6 o posterior, debe aprender clases, objetos, importar, exportar y módulos js comunes.

Sí, mucho, oops está en todas partes. Los conceptos de Uy son muy necesarios en cualquier lenguaje de programación basado en la web en particular.

Sus aplicaciones son enormes.

More Interesting

¿Crees que los IDE basados ​​en la web son el futuro de los IDE? ¿Cuáles son las ventajas y desventajas de los IDE web? ¿Qué características tienen mucho más sentido en un IDE web? ¿Cuáles son los mejores IDE basados ​​en la web?

¿Cómo agrego imágenes aleatorias en una página web sin o con la ayuda de Backstretch en jQuery?

¿Es Google el mejor motor de búsqueda? Si no, ¿cuáles son sus defectos?

¿Qué es una aplicación de Windows que puede organizar mi biblioteca de música y hacer lo siguiente?

¿Existe una aplicación móvil o web para el seguimiento del tiempo de trabajo que también haga un seguimiento del tiempo restante o del trabajo excesivo del día anterior?

¿Cuáles son las herramientas o marcos de animaciones web utilizados en un sitio web popular como Apple.com?

¿Es posible crear una aplicación web usando solo HTML5, CSS3 y JavaScript?

¿Cuál es la práctica estándar para que un servidor notifique a un equilibrador de carga que no está disponible?

¿Cómo puedo obtener la lista de bloggers en India que pueden promocionar mi aplicación web?

¿Existe algún servicio web para administrar el flujo de trabajo en línea?

¿Cuáles son algunas cosas interesantes y sofisticadas que puedo construir en JS y frameworks web que se verían atractivas en las aplicaciones universitarias / laborales?

¿Cuál es el significado de Travel CRS en el software del sistema de reservas?

¿Qué tipo de aplicación web necesitaría para crear un sitio donde los usuarios puedan seguir su progreso?

¿Cuáles son los mejores recursos para aprender más sobre los navegadores, el diseño del marco web y la seguridad?

Cómo migrar a AngularJs 1.4