Pisanie JavaScript według SOLID

Czy ktoś używał zasady programowania SOLID (lub jej części) podczas tworzenia JavaScript?

Właśnie zacząłem czytać o tym, ale nie mogę znaleźć nikogo, kto używał go do JS. Jedyną częścią, którą uważam za łatwą do wdrożenia/użycia, jest "zasada jednej odpowiedzialności".

To czego szukam to artykuły lub przykład gdzie te zasady są używane. A czy są jakieś argumenty, dlaczego nie należy używać niektórych części?

Na przykład " segregacja interfejsu zasada "mówi, że" przekonanie, że wiele interfejsów specyficznych dla klienta jest lepszych niż jeden interfejs ogólnego przeznaczenia."

Ale z mojej wiedzy nie ma czegoś takiego jak interfejsy w JS (fajnie gdyby były).

Author: fredrik, 0000-00-00

5 answers

Wygląda na to, że Derek Greer próbuje to zrobić ze swoją serią artykułów na temat SOLID JavaScript w Fresh Brewed Code:

  1. Zasada Jednej Odpowiedzialności
  2. Zasada Otwarcia / Zamknięcia
  3. Zasada Substytucji Liskowa
  4. Zasada Segregacji Interfejsów
  5. Zasada Inwersji Zależności
 50
Author: Ryan Ransford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-25 14:05:32

JavaScript czasami dostaje zły rap jako sub-par do tych, takich jak C++, C# i Java, podczas gdy w rzeczywistości jest to bardzo potężny funkcjonalny język programowania, który ma również możliwości zorientowane obiektowo (chociaż tak naprawdę nie jest klasyfikowany jako obiektowo zorientowany)

Być może wielu programistów patrzy na to z góry, ponieważ tak wielu z nich jest przyzwyczajonych do słabych praktyk programistycznych, a co za tym idzie, błędnych zachowań w JavaScript. Z jakiegoś nieznanego powodu, wydaje się bardziej dopuszczalne, aby być niechlujny na po stronie klienta. To jest coś, co chciałbym zmienić.

Uważam, że te solidne zasady są solidne. (Nie zamierzony kalambur). Jeśli zastosujesz się do tych konwencji, będziesz mniej podatny na gromadzenie zadłużenia technicznego stworzonego przez niechlujny kod, skróty i brak architektury. Twój kod będzie bardziej konserwowalny, bardziej wielokrotnego użytku, bardziej modułowy, mniej szczelnie sprzężony oraz skalowalny i rozszerzalny. Będziesz również przyczyniać się do wykazania pełnej mocy JavaScript, gdy twój produkt jest zaprojektowane, a nie tylko lekkomyślnie spoliczkowane.

Ten dokument opisuje podstawy SOLID. Te same zasady obowiązują niezależnie od tego, czy chodzi o C++, Javę, JavaScript czy jakikolwiek inny język obiektowy.

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

Oto więcej informacji na temat pojęć JavaScript: http://www.colourcoding.net/blog/Tags/SOLID%20Principles/default.aspx

 12
Author: jmort253,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-17 10:28:18

Ta przyjęta odpowiedź jest błędna. Polecam przeczytać pięć artykułów linkowanych przez Ryana Rensforda poniżej. ostatni artykuł dochodzi do następującego wniosku, którego nie udało mi się przekazać (podkreślenie przeze mnie):

Podczas gdy w trakcie naszego badania widzieliśmy różnice w sposobie, w jaki SOLID design principles stosuje się do JavaScript w porównaniu z innymi językami, każda z zasad została pokazana , aby mieć pewien stopień stosowalności w JavaScript rozwój.

bryła przeznaczona jest do programowania obiektowego. JavaScript jest językiem opartym na prototypach, ale pozwala na programowanie w sposób OOP(jeśli naprawdę bardzo się starasz). Wiele osób uważa, że nie należy zmuszać paradygmatów poznanych języków (takich jak C++/C#/Java) do narzucania innym (JavaScript). Oto artykuł na temat OOP w JS, który również dochodzi do tego wniosku.

istnieją pewne podejścia do OOP w prototypie.js, CoffeeScript i John tworzy proste dziedziczenie JavaScript (każdy z własnymi pułapkami).

jednak terminologia (interfejsy, abstrakcja) bryła jest trudna do właściwego zastosowania w JavaScript. Będziesz mógł zastosować "S", a może " L " (które są dobrymi koncepcjami). Ale pójście dalej wymagałoby konstruktów, takich jak interfejsy (które i tak trudno znaleźć w językach dynamicznych, umowy mogą działać) i możliwości ograniczenia dziedziczenie/modyfikacja.

 4
Author: Marcel Jackwerth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-11 10:54:34

Ta prezentacja: SOLID JavaScript In a Wobbly (World Wide Web) autorstwa Dericka Baileya pokazuje, jak używać solidnych zasad programowania podczas tworzenia javascript.

On jawnie rozwiązuje problem interfejsów w javascript kilka razy. W javascript interfejsy są bardziej konwencją, więc to od Ciebie zależy, jak je zdefiniować. Możesz napisać pustą definicję obiektu(pomyśl o tym jak o abstrakcyjnej klasie lub interfejsie). Możesz też polegać na dokumentacji do Twoich protokołów/umów.

Na bardziej pojęciowym poziomie, podpisy metod obiektu domyślnie definiują jego interfejs, więc w javascript często można przejść przez "pisanie kaczką" i nadal trzymać się SOLID. (!) Oto przykład "zasady segregacji interfejsów" z prezentacji, która to demonstruje:

// 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;
};

Ten kod i cała reszta przykładowego kodu z rozmowy jest zamieszczona na Githubie: https://github.com/derickbailey/solid-javascript

 2
Author: wxactly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-25 23:00:31

Większość stałych zasad zależy od abstrakcji, w innych językach, takich jak Java, możemy tworzyć abstrakcje za pomocą interfejsów, a Javascript nie ma interfejsów, czy to oznacza, że nie możemy osiągnąć stałych zasad w Javascript? Odpowiedź brzmi nie. Jest to świetny artykuł, aby wyjaśnić rzeczy.

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

W konsekwencji JavaScript jest językiem słabo typowanym i nie posiada klasycznych wsparcie dla abstrakcji. Staraliśmy się osiągnąć abstrakcję w JavaScript, definiując interfejsy i używając ich. Niemniej jednak interfejsy w ogóle nie wpływają na nasz kod. Są one niczym więcej niż sposobem dokumentowania kodu dla ludzi. Wszystkie przykłady, które pokazaliśmy powyżej, będą działać dokładnie tak samo, nawet jeśli całkowicie usuniemy interfejsy. Chodzi jednak o jednoznaczne określenie ról. Zwiększa to czytelność, zrozumiałość i łatwość konserwacji kodu.

In ogólnie rzecz biorąc, głównym celem SOLID principles jest uczynienie kodu czytelnym i łatwym do modyfikacji, zastosowanie SOLID do kodu polega na tym, aby nie powtarzać się i uczynić kod ładniejszym i czystszym.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 13:03:37