konto usunięte

Temat: Wzorce projektowe w JavaScript

Chciałem się dowiedzieć, czy stosujecie wzorce projektowe w swoim kodzie JS, czy też może uważacie, że w JS implementacja ich (wzorców), to przerost formy nad treścią.

Osobiście uważam, że wzorce są uniwersalnym rozwiązaniem (niezależnym od języka) i wykorzystywanie ich powinno towarzyszyć nam po obu stronach (klient-serwer) aplikacji. Tym bardziej teraz, gdy aplikacje stają się coraz bardziej rozbudowane i zaczynają przypominać małe systemy.
Coraz więcej pracy przerzuca się na kod JS, komunikacja z serwerem opiera się przede wszystkim na żądaniach AJAX, co również powoduje, że JS jest odpowiedzialny za większą ilość rzeczy.

Oczywiście zdaję sobie sprawę, że implementacja wzorców opartych o dziedziczenie jest niekiedy skomplikowana (niemożliwa?). Jednak odkąd JavaScript przestał być jedynie formą, a częścią aplikacji, to warto traktować go poważnie i dbać o to, aby jego kod był jak najlepszej jakości.Sebastian Malaca edytował(a) ten post dnia 06.07.12 o godzinie 13:38

konto usunięte

Temat: Wzorce projektowe w JavaScript

W JS normalnie stosuje sie wzorce :)
Przede wszystkim konstruktor-prototyp i dynamiczny prototyp jeśli robi się coś dużego to można też zastosować inne.

konto usunięte

Temat: Wzorce projektowe w JavaScript

Tak.. stosuje sie... Moze JS nie jest jezykiem stworzonym do OO, ale mozna naprawde, duzo fajnych rzeczy zrobic ;) Dla mnie JS to najfajniejszy jezyk na tym swiecie ;)

Oczywiscie nie nalezy popadac w skrajnosci i kombinowac, kiedy tak naprawde chcesz napisac proste rzeczy (to samo tyczy sie kodu PHP... ludzie uwielbiaja komplikowac zycie, wprowadzajac kosmosy, tylko dlatego ze jest "fajniej", nie zwracajac uwagi na uzytecznosc czy sens takiego zastosowania)... co kto lubi... w JS jest o tyle wazne, ze kazdy gram kodu = wiecej sciagania dla uzytkownika.

ps. ajaxowanie jest fajne, dopoki SEO nie jest glownym priorytetem ;)

Polecam jako lekturki:
- http://addyosmani.com/largescalejavascript/
- http://addyosmani.com/resources/essentialjsdesignpatte...Andrzej Winnicki edytował(a) ten post dnia 06.07.12 o godzinie 15:12

konto usunięte

Temat: Wzorce projektowe w JavaScript

http://eloquentjavascript.net/contents.html
Wojciech Mazurek

Wojciech Mazurek właściciel, PPHU
Neuron

Temat: Wzorce projektowe w JavaScript

Andrzej Winnicki:
ps. ajaxowanie jest fajne, dopoki SEO nie jest glownym priorytetem

przepraszam za OT ale może kolega powiedzieć kilka słów na ten temat?

Na mojej stronie mam kilka skryptow pisanych w czasach gdy moja znajomość JS ograniczała się do umiejętności używania copy/paste które miały mi zmniejszyć ilość pisania i które tak naprawdę robią kawałki kodu używając document.write
np. kod który robi panelik z opisem produktu na głównej stronie
(proszę pominąć milczeniem jakość tego kodu to było dawno i nieprawda - będę niedługo wszystko pisał od nowa)

function product(nazwa,link,img,opis)
{
document.write('<table cellSpacing="0" cellPadding="0" bgColor="#ffffff" border="0" >')
document.write('<tbody><tr><td width="40"></td><td> <a href='+link+'> <img src="images/'+img+'" alt="" border="1" width="200" height="148"></a> </td></tr>')
document.write('<tr><td width="40"></td><td bgcolor=#009900 height="3" ></td></tr>')
document.write('<tr><td width="40"></td><td class=toph height="24">'+nazwa+'</td></tr>')
document.write('<tr><td width="40"></td><td width="200" height="80" valign="top" class=textg >'+opis+'</td></tr>')
document.write('<tr><td width="40"></td><td width="200" height="20" valign="top"><a href="'+link+'" class=linkmenu>więcej</a>')
document.write('<tr><td width="40"></td><td bgcolor=black height="3" ></td></tr> </tbody></table> ')
}


No i się zastanawiam jaka jest wartość tego linku w kontekście SEO
Kiedyś znalazłem przeglądarkę która pokazuje jak kod strony widzi google i tam ten fragment był widoczny jako kod html a nie jako kod skryptu

konto usunięte

Temat: Wzorce projektowe w JavaScript

Wojciech Mazurek:

Cokolwiek, co jest wsadzane dynamicznie na stronke (nie wazne czy ze zmiennej JS czy ajaxowane i wrzucone do DOMu) nie jest widoczne dla wyszukiwarek. Mozna oczywiscie pobawic sie glebiej w temacie i zastosowac pewne triki, zeby google widzialo cokolwiek, ale przy bardziej skomplikowanych aplikacjach bywa to po prostu niemozliwe. Bardzo dlugi temat... ;)
Igor Kutzner

Igor Kutzner Programista .NET

Temat: Wzorce projektowe w JavaScript

Sebastian Malaca:
Oczywiście zdaję sobie sprawę, że implementacja wzorców opartych o dziedziczenie jest niekiedy skomplikowana (niemożliwa?).

Dlaczego niemożliwa?
Język JavaScript ma coś takiego jak dziedziczenie. Nie jest to klasyczne dziedziczenie jakie występuje w językach C++, Java i C#. Jest to dziedziczenie prototypowe. Występuje wiele wzorców dziedziczenia w JavaScripcie. Dla osoby przyzwyczajonej do silnie-typowanych języków obiektowych, dziedziczenie w JavaScripcie, na pierwszy rzut oka będzie wydawało się dziwne i skomplikowane. Ale dziedziczenie istnieje w JavaScripcie i można implementować wzorce projektowe, choć ich implementacje mogą sprawiać wrażenie skomplikowanych.
http://www.jspatterns.com/tag/inheritance/
http://www.crockford.com/javascript/inheritance.html
Piotr Koszuliński

Piotr Koszuliński JavaScript ninja

Temat: Wzorce projektowe w JavaScript

Andrzej Winnicki:
Moze JS nie jest jezykiem stworzonym do OO (...)

Eee? Co ja pacze? :P JavaScript to przede wszystkim język obiektowy. Jest bardziej obiektowy niż wiele innych popularnych języków. A skoro jest obiektowy, to do czego innego miałby być stworzony jak nie do OOP?

Cytat z: http://es5.github.com/#x4
ECMAScript is an object-oriented programming language

Cały myk polega jednak na tym, że obiektowość jest, ale klas ni ma. Z tego powodu standardowe podejście, znane dużej ilości programistów mających na co dzień styczność ze "standardowy" OOP w PHP, Javie, C#, [cokolwiek]+, po prostu się nie sprawdza. Trzeba zastosować inne podejście i tyle.

Wszyscy polecają w tej kwestii książkę Stoyana Stefanova - http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefa... (wydał dwie - pierwszej ponoć nie tykać). Ze wstydem przyznam, że sam JESZCZE jej nie przeczytałem, ale książka zbiera bardzo pochlebne recenzje, więc warto spróbować.

konto usunięte

Temat: Wzorce projektowe w JavaScript

JS jest cholernie obiektowy tylko trzeba napisać coś większego niż plugin do jQuery.

konto usunięte

Temat: Wzorce projektowe w JavaScript

Michał Wachowski:
JS jest cholernie obiektowy tylko trzeba napisać coś większego niż plugin do jQuery.

A od kiedy wielkość projektu stanowi o jego obiektowości? A gdy napiszę coś takiego, to nie jest obiektowy JavaScript?


function jestemObiektem() {};

konto usunięte

Temat: Wzorce projektowe w JavaScript

Pisałem w kontekście wzorców, nie obiektowości.
Do jakiegoś szajsowego slidebara nie ma sensu zaprzęgać wzorców.
Przy większych rzeczach - sens jest, a brak takowych (wzorców) odbija się czkawką.


var foo = 'bar';

Też będzie obiektem :D

konto usunięte

Temat: Wzorce projektowe w JavaScript

Michał Wachowski:
Pisałem w kontekście wzorców, nie obiektowości.
Do jakiegoś szajsowego slidebara nie ma sensu zaprzęgać wzorców.
Przy większych rzeczach - sens jest, a brak takowych (wzorców) odbija się czkawką.


var foo = 'bar';

Też będzie obiektem :D

a nie stringiem?
Piotr Koszuliński

Piotr Koszuliński JavaScript ninja

Temat: Wzorce projektowe w JavaScript


var foo = 'bar';

Też będzie obiektem :D

a nie stringiem?

Stringiem, stringiem, a fakt, że można wywołać na foo metodę jest jedynie spowodowany tym, że JS automatycznie wrappuje typy podstawowe podczas prób dostępu do ich właściwości.

konto usunięte

Temat: Wzorce projektowe w JavaScript

Piotr L.:
Michał Wachowski:
Pisałem w kontekście wzorców, nie obiektowości.
Do jakiegoś szajsowego slidebara nie ma sensu zaprzęgać wzorców.
Przy większych rzeczach - sens jest, a brak takowych (wzorców) odbija się czkawką.


var foo = 'bar';

Też będzie obiektem :D

a nie stringiem?

Akurat w JS chyba wszystko jest obiektem. Więc foo raczej jest obiektem typu String. Widziałem sporo dyskusji na ten temat kiedy zabrałem się poważniej za JS, sam nawet raz się w taką wdałem gdzie ktoś mnie uświadomił że właściwie w JS wszystko jest obiektem (nawet funkcje, może nie z praktycznego punktu widzenia ale zapewne z technicznego).
Za argument co do stringów ktoś podał to (wklepujcie w konsolę JS):

var foo = "test";
typeof foo; // string
foo.constructor.name; // String
foo.constructor; // function String() { [native code] }
String instanceof Object // true;


mimo że:

foo instanceof Object; //false
foo instanceof String; //false


Nie mówiąc o tym że foo ma swoje metody i atrybuty.

konto usunięte

Temat: Wzorce projektowe w JavaScript

Piotr Koszuliński:

var foo = 'bar';

Też będzie obiektem :D

a nie stringiem?

Stringiem, stringiem, a fakt, że można wywołać na foo metodę jest jedynie spowodowany tym, że JS automatycznie wrappuje typy podstawowe podczas prób dostępu do ich właściwości.

"obiekt typu string" :D Dziwne a jednocześnie dzieki temu JS jest fajny :D

konto usunięte

Temat: Wzorce projektowe w JavaScript

Piotr L.:
Michał Wachowski:
Pisałem w kontekście wzorców, nie obiektowości.
Do jakiegoś szajsowego slidebara nie ma sensu zaprzęgać wzorców.
Przy większych rzeczach - sens jest, a brak takowych (wzorców) odbija się czkawką.


var foo = 'bar';

Też będzie obiektem :D

a nie stringiem?
Stringiem, z dużej litery - bo taka to klasa :D

konto usunięte

Temat: Wzorce projektowe w JavaScript

Dzięki za linki:) Będę miał więcej argumentów za forsowaniem wzorców u siebie w projekcie:)
Igor Kutzner:
Sebastian Malaca:
Oczywiście zdaję sobie sprawę, że implementacja wzorców opartych o dziedziczenie jest niekiedy skomplikowana (niemożliwa?).

Dlaczego niemożliwa?
Napisałem, że skomplikowana. W nawiasie dodałem "niemożliwa" ze znakiem zapytania, bo:
Język JavaScript ma coś takiego jak dziedziczenie. [...]Jest to dziedziczenie prototypowe. Występuje wiele wzorców dziedziczenia w JavaScripcie. Dla osoby przyzwyczajonej do silnie-typowanych języków obiektowych, dziedziczenie w JavaScripcie, na pierwszy rzut oka będzie wydawało się dziwne i skomplikowane. Ale dziedziczenie istnieje w JavaScripcie i można implementować wzorce projektowe, choć ich implementacje mogą sprawiać wrażenie skomplikowanych.
i to skomplikowanie oraz inne podejście do OO było powodem tego zapytania. Po prostu nie implementowałem wszystkich i dlatego też, nie przyjmowałem za pewnik, że się da to zrobić:)

konto usunięte

Temat: Wzorce projektowe w JavaScript

Sebastian Malaca:
Dzięki za linki:) Będę miał więcej argumentów za forsowaniem wzorców u siebie w projekcie:)

Jesli cos ma sens, to nie trzeba tego forsowac, samo sie usprawiedliwi ;)
Piotr Koszuliński

Piotr Koszuliński JavaScript ninja

Temat: Wzorce projektowe w JavaScript

Ależ herezje tu czytam. String, number i boolean to typy podstawowe, których przykładami są:


'a';
typeof 'a'; // string
1;
typeof 1; // number
true;
typeof true; // boolean


Nie są one obiektami, same z siebie nie mają właściwości. To że możemy dostać się do właściwości z odpowiadających im prototypów konstruktorów String, Number i Boolean to zasługa wrapperów typów podstawowych. Więcej: http://docstore.mik.ua/orelly/webprog/jscript/ch03_12.htm
JavaScript can flexibly convert values from one type to another. When we use a string in an object context -- i.e., when we try to access a property or method of the string -- JavaScript internally creates a String wrapper object for the string value. This String object is used in place of the primitive string value; the object has properties and methods defined, so the use of the primitive value in an object context succeeds.

Jeszcze kilka przykładów:


typeof 'a'; // 'string'
typeof new String('a'); // 'object'
'a' === new String('a'); // false
'a'.match === new String('a').match; // true
typeof new String('a').valueOf(); // 'string'
new String('a') === new String('a'); // false
new String('a').valueOf() === new String('a').valueOf(); // true

2..toFixed(); // '2.00'

true.__proto__ === Boolean.prototype; // true


I jeszcze:
a nie stringiem?
Stringiem, z dużej litery - bo taka to klasa :D

Z małej, bo to nie klasa a typ.Piotr Koszuliński edytował(a) ten post dnia 09.07.12 o godzinie 11:52

konto usunięte

Temat: Wzorce projektowe w JavaScript

Piotr Koszuliński:
Ależ herezje tu czytam. String, number i boolean to typy podstawowe, których przykładami są:

A już miałem się produkować, a tu jak zwykle Reinmar na straży poprawności:D

Następna dyskusja:

JavaScript a programowanie ...




Wyślij zaproszenie do