2013-08-08 17 views
5

W tej chwili pracuję nad bardzo dużą i złożoną aplikacją webową i mam do czynienia z ogromną ilością kodu js po stronie klienta, i aby ułatwić sobie życie Próbuję odłączyć ten kod tak bardzo jak mogę.Oddzielenie zbyt skomplikowanych modułów javascript

Byłem bardzo zainspirowany przez Nicholasa Zakasa (http://www.youtube.com/watch?v=vXjVFPosQHw) i Addy Osmani (http://addyosmani.com/largescalejavascript) mówiąc o skalowalnej architekturze js i próbowałem zastosować niektóre z ich pomysłów do mojej pracy.

ja oddzielone wszystkie moje kodu poprzek stwardnienie niezależnych modułów i obsługiwać wszystkie intercommunications z jakimś mediatora. Takie podejście działało świetnie w większości przypadków. Ale są pewne przypadki, w których myślę, że to za mało.

Jeden z modułów, nad którym pracuję, przedstawia dość złożoną strukturę podobną do listy. Oto niektóre uproszczony przykład:

very simplified example

Oprócz pewnej logiki renderowania, moduł odpowiedzialny za ten kawałek strony powinien obsługiwać:

  • paginacja
  • przełączanie grup
  • ruchome elems i grup wokół z dnd
  • cięcie/kopiowanie/wklejanie elementów i grup
  • orzeźwiający certaing grupy/elems
  • niektóre logika wewnątrz elems
  • może być więcej rzeczy w najbliższej przyszłości

miałem przeprowadzić cały niepowiązanych logiki, że mogę (na przykład edycji i logiki usuwanie jest przeprowadzana do innego modułu za pośrednictwem zdarzeń), ale rozmiar modułu jest nadal duży (ponad 1K linii kodu) i nie wiem, jak go zmniejszyć. Co więcej, używam wzorca modułów dla moich modułów, więc jeszcze trudniej jest oddzielić logikę między wieloma plikami.

Przyszedłem tu zapytać, czy istnieje sposób na rozłączenie złożonej logiki w ramach jednego modułu?

UPDATE:

chcę coś wyjaśnić. Jestem dość świadomi, jak mogę oddzielić moduły ("moduł" od wzorca modułu) w wielu plikach w moim kodzie.

Ale to, co naprawdę szukają jest nowy logiczne sposób oddzielić obawy obrębie jednego modułu („moduł” z prezentacją NKZ).

+0

Twoje pytanie jest trochę niejasne, ale ogólnie rzecz biorąc, możesz traktować moduł jak program, a wewnątrz ścian modułu możesz tworzyć submoduły, klasy, typy i czyste funkcje, aby zmniejszyć bałagan. moduły samodzielne są zazwyczaj stosunkowo drogie ze względu na ograniczoną wewnętrzną recyrkulację; ex: samodzielny sorter list w porównaniu do wtyczki jQuery. Moduły są lepsze niż bałagan, więc jesteś na dobrej drodze. Opanowanie pojęć Dependency Injection i Inversion of Control jest prawdopodobnie potrzebne do przeniesienia twoich skryptów na wyższy poziom. – dandavis

+0

Osoby zainteresowane tym tematem mogą chcieć sprawdzić [t3] (http://t3js.org/), framework JS niedawno opublikowany przez samego Nicolasa Zakasa i jego zespół w Box, który wywodzi się bezpośrednio z koncepcji przedstawionych w prezentacji połączone w pytanie. [Tutaj jest (https://www.box.com/blog/introducing-t3-enabling-large-scale-javascript-applications/) wpis na blogu od Zakasa, który go przedstawia. – Nobita

+0

Cześć, to trochę za późno, ale może być pomocne jakoś. https://pogsdotnet.blogspot.sg/2017/07/modular-javascript-architecture.html –

Odpowiedz

1

oddzielić jeden moduł do wielu plików Polecam przy użyciu wzorca Powiększanie znaleźć na tej stronie http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

Dodatkowo, oto kilka środków na tworzenie skalowalnych JS aplikacje:

Oto film z prezentację Nicholas Zakas na temat "Tworzenie skalowalnej architektury aplikacji JavaScript". http://www.youtube.com/watch?v=7BGvy-S-Iag

Innym dobrym źródłem http://addyosmani.com/largescalejavascript/

Znajomość tych pojęć będzie można zbudować aplikację, która jest zdolna do modułów spada i obecnie bezproblemowo. Będziesz mógł zmienić moduł bez wpływu na żaden inny moduł, ponieważ twój program będzie luźno powiązany. Dodatkowo, jeśli zdecydujesz się przełączyć bibliotekę bazową, na przykład KnockoutJS na Angular, ta struktura pozwoli ci łatwo zamienić bibliotekę podstawową bez łamania bardzo dużego kodu.

Ponadto używanie modułów i mediatora lub piaskownicy ułatwi testowanie kodu. Testowanie jest ważne w każdej nietrywialnej aplikacji. Mam nadzieję, że to pomoże!

+0

Dzięki @Spencer. Na początku wiedziałem o schemacie Augmention, ale wolę trzymać się z dala od niego, ponieważ używając go nie mogę wykorzystać niektórych funkcji wzorca modułu. Na przykład nie mogę mieć prawdziwie prywatnego zakresu dla niektórych var i funkcji. Ale właściwie nie mogę wymyślić lepszego rozwiązania do dzielenia modułu (z wzorca modułu) na wiele plików. Po drugie wspomniałem już o podejściu Nicholasa Zakasa i Addy Osmani'ego do budowania skalowalnych aplikacji js i już z nich korzystam. – panfil

+1

I ostatnia. Knockout lub Angular oczywiście ułatwi mi życie. Trochę. Ale inne fajne ramy nie rozwiążą problemu ogromnej koncentracji logiki w jednym miejscu. – panfil

+0

Ups! Brakowało mi części, w której powiedziałeś, że czytałeś o dwóch źródłach, które dostarczyłem! Niestety, nie jestem świadomy lepszego sposobu na rozdzielenie modułów na osobne pliki inne niż przy użyciu wzorca augmentacji. – Spencer

Powiązane problemy