Wzorzec projektowy State to jeden ze wzorców opisanych przez Gang of Four. Mimo że w wielu przypadkach State będzie armatą na muchę, to i tak warto go poznać. W najnowszym artykule na blogu przedstawiłem przykładową implementację wzorca State. Dowiesz się również, dlaczego i kiedy warto go wykorzystać.
Miejsce do użycia wzorca State można znaleźć w praktycznie każdej aplikacji. Sprawdź, jak możesz go wykorzystać oraz kiedy ma to sens.
https://devszczepaniak.pl/wzorzec-projektowy-state/Wytycznych i dobrych praktyk programowania istnieje mnóstwo. O SOLID-zie, DRY, KISS, YAGNI słyszał chyba każdy, kto poważnie myśli o swojej karierze programisty. Jednak w najnowszym artykule na blogu poświęciłem uwagę nieco mniej znanemu "prawu", które może pomóc w utrzymaniu lepszego kodu. Prawo Demeter to jedno z praw, którego stosowanie pomaga w zmniejszeniu wysokiego couplingu w naszym kodzie, który w długim terminie może mieć nieprzyjemne konsekwencje.
W artykule przeczytasz:
na czym polega prawo Demeter?
co oznacza, że w kodzie jest wysoki coupling?
dlaczego wysoki coupling jest niepożądany?
W celu lepszego zrozumienia tematu przygotowałem przykład kodu, który łamie prawo Demeter oraz jego zrefaktoryzowaną formę.
Prawo Demeter to jedno z wielu praw w programowaniu, którego celem jest powstawanie lepszego kodu. Sprawdź, na czym ono polega!
https://devszczepaniak.pl/prawo-demeter/Czasem wypada coś zmodyfikować na nieswojej stronie internetowej i tak jak ktoś lubi grzebać w bebechach nieswoich programów, w takim javascript poziom assembler.
class App extends React.Component {
count: number;
constructor(props: any) {
super(props);
this.count = 0;
}
inc() {
this.count += 1;
this.forceUpdate();
}
render() {
return <>
<div className="App">
<button onClick={() => this.inc()}>Test</button>
<p>Count: { this.count } </p>
</div>
</>
}
}
Nie mamy akurat dostępu do kodu źródłowego więc trzeba sobie inaczej poradzić :P
$(".App")[Object.getOwnPropertyNames($(".App"))[0]].return.stateNode.inc = () => { let x = document.querySelector(".App")[Object.getOwnPropertyNames(document.querySelector(".App"))[0]].return.stateNode; x.count += 100; x.forceUpdate(); }
Można odpalić w konsoli lub jako plugin.
Zmienne closures są gubione więc trzeba je odzyskać dlatego tyle kodu.
Taka inżyniera wsteczna Reacta, czasem gra w react nie będzie zbyt funkcjonalna to można ją rozbudować bez wiedzy autora :>
Wykorzystanie wzorca projektowego Dekorator to prosty sposób by w prosty i schludny sposób rozszerzyć możliwości Twojego kodu. Mnogość zastosowań Dekoratora sprawia, że jest to jeden z moich ulubionych wzorców. W najnowszym wpisie na blogu podzielę się z Tobą założeniami stojącymi za Dekoratorem, jego wadami i zaletami. Przedstawię Ci też, jak wygląda zastosowanie dekoratorów w JavaScript i TypeScript w praktyce. W artykule przemyciłem również wiele praktycznych przypadków, gdzie wykorzystanie dekoratora pasuje idealnie.
Wzorzec projektowy Dekorator to jeden z moich ulubionych. Pozwala on w prosty i schludny sposób rozszerzyć kod o nowe możliwości.
https://devszczepaniak.pl/wzorzec-projektowy-dekorator/Wzorzec projektowy Mediator, wbrew pozorom, z powodzeniem można zastosować nawet w prostej aplikacji. W najnowszym artykule na blogu przedstawiłem założenia wzorca Mediator, wady i zalety, a co najważniejsze praktyczne przykłady implementacji w TypeScript.
Mediator to behawioralny wzorzec projektowy, który z powodzeniem może być stosowany nawet w niedużych systemach. Zobacz go w praktyce!
https://devszczepaniak.pl/wzorzec-projektowy-mediator/@somekind: https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/identifier-names :p no jak byk jest Private instance fields start with an underscore (_).
Tak samo jak przykład z nawiasami: public IWorkerQueue WorkerQueue { get; init; }
, string[] vowels1 = { "a", "e", "i", "o", "u" };
itd;
Jakby było już mało zła na świecie do nadciąga DevilScript DeviceScript czyli TS dla IoT, który jest kompilowany do bytecodu
Swoją drogą szkoda że nie jest kompilowany do WASMa wtedy mógłby być zgodny z AssemblyScript i M$ nie musiałby wynajdywać koła na nowo. No ale oni przecież to lubią, bo ich koło jest zawsze lepsze :P
Teraz tylko czekam aż C# zostanie zastąpiony BackendScriptem :D
Może to chodzi o to że programiści niskopoziomowi powoli wymierają i trzeb szukać jakiegoś wspólnego języka z młodym pokoleniem który za tylko JS :D Dla procesora to w sumie wszystko jedno w czym będzie napisany kod
@Marius.Maximus: Procesorowi zawsze wszystko jedno. Są tylko różne czasy wykonania XD No ale procesory też coraz mocniejsze. Wszędzie pchają 32 bitowe ARMy, albo nawet 64 bitowe. Żyć nie umierać XD
@elszczepano: Moim zdaniem sposób w jaki opisany jest ten artykuł nie jest specjalnie pomocny dla kogoś kto go nie zna. Moim zdaniem powinieneś zacząć od problemu, jak np dodanie cache'owania do jakiejś funkcji, i pokazać dwa przykłady. Najpierw jeden przykład jak dodać taką funkcję bez wzorca, a potem pokazać jak ją dodać z wzorcem Dekorator. To, moim zdaniem byłaby faktycznie dobra lekcja dla kogoś kto nie zna tego wzorca. Po prostu pokazanie co to jest, w żaden sposób nie pokaże czytającym jak go użyć.