• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Validacja w JS.

VPS Starter Arubacloud
0 głosów
174 wizyt
pytanie zadane 15 kwietnia 2016 w JavaScript przez ShiroUmizake Nałogowiec (46,300 p.)

Postanowiłem, że wrócę do swojego starego projektu, którego nie skończyłem. Zmieniłem odrobinę założenia i chciałem się pobawić OOP w JS, by stworzyć jak najbardziej możliwie elastyczną bibliotekę do obliczenia wynagrodzenia netto, którą nazwałem taxJS. Pierwsze metody jakie napisałem, to oczywiście validacja naszych danych, testowy print, przy założeniu, że parametry konstruktora są poprawnie napisane (brak jeszcze debugMode).

Założenia związane z validacją były takie.

1. Czy ciągi znaków są większe niż zwrot z metody maxLength (domyślnie ustawione na 2)

2.Czy ciąg znakó jest pusty (metoda isNull)

3.Czy ciąg, da się parsować oraz zwraca wartość bezwględną(metoda isNaN)

4.Czy wartość zmiennej jest większa lub mniejsza (get/set Metod), w celu ograniczenia błędu statystycznego i zepuscia bazy.

Pytanie czy jest coś o czym zapomniałem?

Pytanie 2: Czy metody isNaN itd, lepiej dołączać przez prototype w miejscu ich wywołania.

Pytanie 3: Czy odwołując się do value danego elementu, jest w stanie odwołać się do jego id. nie pobierając jednocześnie do klasy document.getElementById?

Poniżej zamieszczam link do gita.

https://github.com/Bxxta/AmCalculator/blob/master/newAM/taxJS.js

 

 

2 odpowiedzi

+2 głosów
odpowiedź 15 kwietnia 2016 przez Comandeer Guru (599,730 p.)
edycja 15 kwietnia 2016 przez Comandeer

Polecam poczytać o klasach w ES6 i prototypach, bo metod do this się de facto nie przypisuje.

Konstruktor jest tylko i wyłącznie do deklarowania własności obiektu i odpalania metod inicjujących. Powinien być jak najmniejszy.

this.maxHour = function ()
	{
	var maxHour = 200;
	return maxHour;
	}

Nie mam zielonego pojęcia, czemu mają służyć te metody. Zwłaszcza, że nie są konfigurowalne! Zrozumiałbym jakby to były faktyczne gettery i settery z walidacją (np. nie można mieć minusowej pensji) → https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/get https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/set Jeśli nie chcesz tego typu rozwiązania, to zamieniłbym to na zwykłe własności, które można by od biedy podmienić.

this.isNull = function (paramValue)
	{
	if (paramValue == 0 || paramValue == "")
		{
		return true;
		}
	else
		{
		return false;
		}
		
	
	}

Można zapisać jako:

this.isNull = function( paramValue ) {
	return paramValue == 0 || paramValue == "";
}

Albo jeszcze prościej: return !paramValue.

To samo dotyczy isNaN → po co taka rozwlekła metoda, skoro można zwrócić po prostu sam warunek?

this.errorLog to jakieś nieporozumienie. Walidator takich rzeczy nawet nie powinien robić, jedynie zwracać tablicę błędów. Jak już chcemy się bawić w wyświetlanie błędów, to komunikaty o nich powinny być przekazywane z zewnątrz, a nie hardcode'owane.

6 parametrów w konstruktorze – IMO powyżej 3 to już znak, że niekoniecznie nasza funkcja jest optymalnie napisana ;)

No i: formatowanie kodu jest faktycznie straszne.

komentarz 15 kwietnia 2016 przez ShiroUmizake Nałogowiec (46,300 p.)

Konstruktor jest tylko i wyłącznie do deklarowania własności obiektu i odpalania metod inicjujących. Powinien być jak najmniejszy.

Czyli wyrzucić, wszystkie metody a zostawić tylko właściwości dobrze zrozumiałem?

Nie mam zielonego pojęcia, czemu mają służyć te metody. Zwłaszcza, że nie są konfigurowalne! Zrozumiałbym jakby to były faktyczne gettery i settery z walidacją (np. nie można mieć minusowej pensji) →

Metody gety i sety czyli pola możliwe do konfiguracji, zostawiłem na końcu. Bo nie wiem jeszcze jaką metodą to rozwiążę ( chętnie posłucham twoich propozycji).

To samo dotyczy isNaN → po co taka rozwlekła metoda, skoro można zwrócić po prostu sam warunek?

Nie dokońca rozumiem pytania.

this.errorLog to jakieś nieporozumienie. Walidator takich rzeczy nawet nie powinien robić, jedynie zwracać tablicę błędów. Jak już chcemy się bawić w wyświetlanie błędów, to komunikaty o nich powinny być przekazywane z zewnątrz, a nie hardcode'owane.

Czyli jak dobrze zrozumiałem, funkcja ma zwracać tablicę błędów kiedy validator zwróci false i dopiero komunikaty wyświetlać pokolei w jakimś div, zamiast alert. Tak?

6 parametrów w konstruktorze – IMO powyżej 3 to już znak, że niekoniecznie nasza funkcja jest optymalnie napisana ;)

W sumie można zł i gr połączyć w jedno, i parsować na float. Klasę taxJS rozbić na dwie klasy np taxOrder i taxContract gdzie już parametrów w obiekcie będzie mniej, a metody przepisywać dopiero do nich?

Tak wiem, formatowanie jest brzydkie. Muszę nad tym popracować.

komentarz 15 kwietnia 2016 przez Comandeer Guru (599,730 p.)

Czyli wyrzucić, wszystkie metody a zostawić tylko właściwości dobrze zrozumiałem?

Metody przerzuć do prototypu.

Metody gety i sety czyli pola możliwe do konfiguracji, zostawiłem na końcu. Bo nie wiem jeszcze jaką metodą to rozwiążę ( chętnie posłucham twoich propozycji). 

No ja proponuję settery i gettery z ES5.

 Czyli jak dobrze zrozumiałem, funkcja ma zwracać tablicę błędów kiedy validator zwróci false i dopiero komunikaty wyświetlać pokolei w jakimś div, zamiast alert, poza klasą. Tak?

W sumie do wyświetlania błędów powinna być osobna klasa.

 

komentarz 15 kwietnia 2016 przez ShiroUmizake Nałogowiec (46,300 p.)
Jeszcze jedna sprawa, Napisałeś return paramValue == 0 || paramValue == "". Jak dobrze zrozumiałem, to jeżeli dla przykładu paramValue będzie równe 2, to ona nie spełni warunku return i zwórci false. Ale tego już nie rozumiem: !paramValue. Dlaczego użyłeś negacji jak nie ma tu żadnego warunku?
komentarz 15 kwietnia 2016 przez Comandeer Guru (599,730 p.)

No bo przecież negacja się wykona i jeśli zmienna będzie pusta, to otrzymamy true.

komentarz 15 kwietnia 2016 przez ShiroUmizake Nałogowiec (46,300 p.)
Faktycznie :D.

Jeszcze jedno pytanie: Jeżeli mamy 2 obiekty o klasie xy i yz i te 2 obiekty korzystają z tych samych po części metod. To jest lepsza metoda niż xy.prototype.jakasFunkcja = function {}? Bo przychodzi, mi do głowy xy.prototype.jakasFunkcja = jakasFunkcja (); i yz.prototype.jakasFunkcja = jakasFunkcja (); Pytam by bez powodu doklejać właściwie to samo.
komentarz 15 kwietnia 2016 przez Comandeer Guru (599,730 p.)
Hm… poczytaj o mixinach ;)
komentarz 15 kwietnia 2016 przez ShiroUmizake Nałogowiec (46,300 p.)
Czyli twórzę klase, która ma jakąś metodę przepisana, i tworzę "subklasa", który wywołuje superkonstuktor z klasa głównej  i potem wywołując kolejny prototyp wywołuje obiekt protototypu z klasy-głównej, który przepisuje do subKlasy. (Brzmi jak masło maślane). Pytanie czy ten w sposób wszsytkie metody przepisane z klasy głównej? (Da radę odwołać w subklasie)

Pytanie, czy ja to dobrze zrozumiałem , bo jak to czytałem to aż mnie głowa zabolała :D
komentarz 15 kwietnia 2016 przez Comandeer Guru (599,730 p.)

Najprostszy mixin można uzyskać przy pomocy czegoś na wzór jQuery.extend → http://api.jquery.com/jQuery.extend/

Ty raczej opisujesz wielostopniowe dziedziczenie.

komentarz 15 kwietnia 2016 przez ShiroUmizake Nałogowiec (46,300 p.)
Czaję ogólny zamysł, ale nie wiem jak to napisać w JS. Będę musiał trochę nad tym usiąść i zobaczymy co wyjdzie. Napewno napiszę post jak poprawię błędy i wprowadzę lepsze rozwiązania :). Wtedy będziesz mógł mi powiedzieć, czy dobrze to wprowadziłem.
0 głosów
odpowiedź 15 kwietnia 2016 przez maly Nałogowiec (37,190 p.)

Nie znam się na js, ale:

Formatowanie do dupy.

W errorLog zamiast switch mogłeś użyć tablicy, nie wiem czy w js są jakieś enumy ale wywoływanie tej funkcji z magiczną liczbą jest bardzo nieczytelne.

validateForm nie skomentuję bo nie widzę co tam się dzieje.

this.maxSalary = function ()
{
var maxSalary = 15;
return maxSalary;
}

Poważnie musiałeś do tego robić funkcję?

Nie wiem czy wspominałem ale formatowanie do dupy.

Podobne pytania

+1 głos
1 odpowiedź 318 wizyt
0 głosów
2 odpowiedzi 409 wizyt
pytanie zadane 30 grudnia 2018 w JavaScript przez BlaBlaCar Początkujący (440 p.)
0 głosów
1 odpowiedź 135 wizyt
pytanie zadane 23 kwietnia 2017 w JavaScript przez hoktaur Pasjonat (22,250 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...