Подтвердить что ты не робот

Написание JavaScript в соответствии с SOLID

Кто-нибудь использовал принцип программирования SOLID (или любой из его частей) при разработке JavaScript?

Я только что начал читать, но, похоже, не нашел никого, кто использовал его для JS. Единственная часть, которую я нахожу простой в реализации/использовании, - это принцип "единой ответственности".

Я ищу статьи или примеры, в которых используются эти принципы. И есть ли аргумент, почему нельзя использовать некоторые части?

Например, "Принцип сегрегации интерфейса" говорит, что "понятие о том, что многие клиентские интерфейсы лучше, чем один интерфейс общего назначения".

Но, насколько мне известно, в JS нет таких интерфейсов, как если бы это было так.

4b9b3361

Ответ 2

JavaScript иногда получает плохой рэп как под-пар для таких, как С++, С# и Java, когда на самом деле это очень мощный язык функционального программирования, который также имеет объектно-ориентированные возможности (хотя он не классифицируется как объектно-ориентированный )

Возможно, многие разработчики смотрят на него снисходительно, потому что многие из них привыкли к плохой практике программирования и, следовательно, к ошибкам в JavaScript. По какой-то неизвестной причине представляется более приемлемым быть неаккуратным на стороне клиента. Это то, что я хотел бы изменить.

Я считаю, что эти СОВЕРШЕННЫЕ принципы тверды. (Каламбур не предназначен). Если вы будете следовать этим соглашениям, у вас будет меньше шансов накапливать технический долг, создаваемый неаккуратным кодом, ярлыками и без архитектуры. Ваш код будет более ремонтопригодным, более многоразовым, более модульным, менее плотно связанным, масштабируемым и расширяемым. Вы также будете способствовать демонстрации полной мощности JavaScript, когда ваш продукт спроектирован, а не просто безрассудно ударил вместе.

В этом документе описываются основы SOLID. Те же правила применяются независимо от того, ссылаетесь ли вы на С++, Java, JavaScript или на любой другой объектно-ориентированный язык.

http://www.codeproject.com/Articles/60845/The-S-O-L-I-D-Object-Oriented-Programming-OOP-Prin.aspx

Вот еще информация о концепциях JavaScript: http://www.colourcoding.net/blog/Tags/SOLID%20Principles/default.aspx

Ответ 3

Этот принятый ответ ошибочен. Я рекомендую прочитать пять статей, связанных с Райаном Ренсфордом ниже. последняя статья приходит к следующему выводу, который я не смог сообщить (выделение мной):

В ходе нашего исследования мы увидели различия в том, как принципы дизайна SOLID применимы к JavaScript по сравнению с другими языками, каждый из принципов был показан , чтобы иметь некоторую степень применимости в разработке JavaScript.

SOLID предназначен для объектно-ориентированного программирования. JavaScript - это язык, основанный на прототипе, но позволяет программировать в OOP-манере (если вы действительно стараетесь это сделать). Многие люди считают, что вы не должны пытаться заставить парадигмы изученных вами языков (например, С++/С#/Java) другим (JavaScript). Вот статья о OOP в JS, которая также приходит к такому выводу.

Есть несколько подходов к ООП в Prototype.js, CoffeeScript и John Resigs Simple JavaScript Inheritance (каждый со своими ловушками).

Но терминология (интерфейсы, абстракция) SOLID трудно применить к ванильному JavaScript в надлежащем порядке. Вы сможете применить "S" и, возможно, "L" (которые являются хорошими понятиями). Но для дальнейшего потребуются конструкции, такие как интерфейсы (которые в любом случае трудно найти на динамических языках, контракты могут работать) и возможность ограничения наследования/модификации.

Ответ 4

Эта презентация: SOLID JavaScript в Wobbly (World Wide Web) от Derick Bailey демонстрирует, как использовать принципы программирования SOLID при разработке javascript.

Он явно рассматривает проблему интерфейсов в javascript несколько раз. В javascript интерфейсы более условны, поэтому вам решать, как их определить. Вы можете написать определение пустого объекта (подумайте об этом как абстрактный класс или интерфейс). Или вы можете полагаться на документацию для ваших протоколов/контрактов.

На более концептуальном уровне сигнатуры объектного метода неявно определяют его интерфейс, поэтому в javascript вы часто можете получить "утиную печать" и по-прежнему придерживаться SOLID. (!) Здесь приведен пример "принципа сегрегации интерфейса" из презентации, которая демонстрирует это:

// Copyright 2014 Muted Solutions, LLC, and freely distributable and re-usable under the MIT License

// JavaScript has no interface construct ...
// sooooooo..... use inheritance instead? o_O

// Rectangle
// ---------

function Rectangle(){}

Rectangle.prototype.area = function(){
  return this.height * this.width;
};

Rectangle.prototype.setHeight = function(height){
  this.height = height;
};

Rectangle.prototype.setWidth = function(width){
  this.width = width;
};

// Square
// ------

function Square(){}

Square.prototype.area = function(){
  return this.size * this.size;
};

Square.prototype.setSize = function(size){
  this.height = size;
  this.width = size;
};

Этот код и весь остальной код примера из разговора размещены на GitHub: https://github.com/derickbailey/solid-javascript

Ответ 5

Большинство принципов SOLID зависят от абстракции. На других языках, таких как Java, мы можем делать абстракции с помощью интерфейсов, а Javascript не имеет интерфейсов. Означает ли это, что мы не можем достичь принципов SOLID в Javascript? Ответ - нет. Это отличная статья, чтобы прояснить ситуацию.

http://www.yusufaytas.com/achieving-abstraction-in-javascript/

В результате JavaScript является слабо типизированным языком и не имеет классической поддержки абстракции. Мы попытались достичь абстракции в JavaScript, указав интерфейсы и используя их. Тем не менее, интерфейсы вообще не влияют на наш код. Это не что иное, как способ документирования кода для людей. Все приведенные выше примеры будут работать точно так же, даже если мы полностью удалим интерфейсы. Однако речь идет о том, чтобы сделать роли явными. Это повышает читаемость, понятность и удобство обслуживания кода.

В целом, главная цель принципов SOLID - сделать код читаемым и легко модифицировать. Применение SOLID к вашему коду - это попытка не повторять себя и сделать код более приятным и чистым.