Java [1242]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • Anonim

    Witam

    Tak wiem, nie ma czegoś takiego w javie i w tym problem :)

    Powiedzmy, że chcemy aby program mial kilka mutacji (typu lite, pro). Jakbyście rozwiązali ten problem?

    1. Oddzielne klasy, które podmieniamy, przed kompilacją;
    2. Jeszcze jedna klasa ze zmiennymi statycznymi finalnymi i rozbudowa klas właściwych o if..else ew. switch
    3. A może jeszcze inaczej

    Ad. 1
    Dość kłopotliwe, gdy modyfikacji ulegają wspólne części klas

    Ad. 2
    Komplikuje kod źródłowy i pogarsza jego czytelność.

    Właśnie się zastanawiam nad wyborem, którejś z opcji. Dlatego proponuję rozpoczęcie dyskusji nt. teoretycznych rozważań która (opcja) do jakich rozwiązań i dlaczego.

    Pozdrawiam
  • Anonim

    Zapomniałem dodać, że należy pozostać przy javie :)
  • Brut[all]

    Heh.. fajnie mi się czyta ten Twój post, bo ledwie 3 tyg. temu zakładałem dokładnie ten sam temat i pisałem niemalże to samo, co Ty :P
    Tłumaczyłem się z nazwy tematu, bo "tak, wiem, że dyrektywy takie nie istnieją", pisałem o niewygodach rozwiązania 1. i 2., ale to jedynie jako wstęp bo cały ogień skierowałem na moją własną opcję 3. :)

    Aha.. dodam od razu, że mój problem, przeciwnie do prośby z Twojego drugiego postu, nie dotyczył wcale Javy, a PHP, ale to nic a nic nie zmienia - problem jest dokładnie ten sam, a technikaliów jezykowych w tekście za dużo nie ma, więc powinieneś sobie poradzić.

    Jeśli jesteś wytrwały i masz dużo czasu, bo jestem bardzo "wylewny", możesz sobie poczytać tutaj:
    http://g2.grono.net/forum/topic/616...
    Pomysł się ogólnie nie spodobał tym bardziej doświadczonym, ale jakoś nie potrafię z niego zrezygnować i chyba i tak zacznę stosować :)
  • spec

    w javie to bym postawil na odzielne klasy.
    i ladowanie ich moze w runtimie.
  • Maciek Makowski

    A dlaczego nie skorzystac z preprocesora? To, ze nie ma go w Sunowskim SDK nie oznacza, ze nie ma go w ogole:

    http://www.vortoj.com/sjpp/readme.h...
    http://jappo.opensourcefinland.org/

  • *Kamil*

    Rozwiazanie "ładne":
    Mozesz tez rozejrzec sie za wzorcami projektowymi, wzorzec strategi, wzorce fabryk, wzorzec mostu tez by pasowal do rozwiazania tego problemu, moze nawet wzorzec dekoratora. Wszystkie w jakis sposob umozliwiaja podmiane algorytmow czy wybor klasy nadrzednej tworzonego obiektu, dobre rozwiazanie zalerzy od twojego problemu, popatrz sobie w necie co robia odpowiednie wzorce i dopasuj je do siebie.

    Rozwiazanie "na szybko":
    Jezeli te kilka mutacji to tak naprawde jedna funkcja w kodzie (u mnie to bylo tak ze wesja demo mogla miec max 5 poziomow wiec roznica jest tylko w funkcji wczytujacej level) to w zupelnosci wystarczy jedna dodatkowa zmienna typu isDemo.
  • Anonim

    Dzięki za odpowiedzi.

    Deth: W obecny momencie wykorzystywana jest metoda ,,na szybko'', ale jak program przekroczył 60tys. linii kodu do kompilowania, a klas zamiennych jest ponad 20, do tego program ma 4 mutacje (a będzie więcej), to robi to się zbyt uciążliwe. Poczytam sobie o wzorcach :)

    Brutal: Na początku myślałem, że przeoczyłem jakiegoś postach na tym forum :). Dzieki za linka, kiedy z PHP też miałem doczynienia, więc sobie poradze :)

    Pozdrawiam
  • Anonim

    60tys liniii kodu i zadnych wzorcow. HARDKOR
  • Anonim

    ok, nikt nie mowil, ze wzorcow nie ma, wiec sie wycofuje; ]
  • konyo

    bo to zła praktyka?
  • konyo

    strach na coś takiego spojżeć
  • konyo

    moze opracuj sobie mechanizm licencji i na jej podstawie określaj wersję i używany kod? fabryczki i te sprawy to chyba dobry pomysł, w aplikacji
    korzystaj jedynie z interfejsów, zrób sobie abstrakty i zaimplementuj odpowiednio dla każdej licencji itp jeśli aplikacja ma 60 tyś linii, a jeszcze tego nie zrobiłeś to każdy moment jest dobry aby zacząć naprawiać sytuację, bo potem będzie jeszcze gorzej (to w zasadzie często spotykana sytuacja, ktoś uczy się pisząc - to normalne, ale jesli w pewnym momencie nie zacznie przeprojektowywać i przepisywać aplikacji tak by jej utrzymanie było proste i przyjemne to łolaboga)
  • konyo

    aha no i warstwy aplikacji, są rozróżnialne? - w zdrowej sytuacji powinny być
  • Anonim

    Interfejsy, abstracty, fabryki itp wykorzystywałem narazie tylko do komponentów, których używałem w różnych sytuacjach. Teraz gdy kod przytył i jeszcze doszły różne mutacje, to... musze zrobić to również z większymi elementami.

    ,,to w zasadzie często spotykana sytuacja, ktoś uczy się pisząc'' - a raczej człowiek uczy się całe życie :). A i owszem pierwszy mój tak duży projekt.

    Tak warstwy są rozróżnialne.
  • konyo

    w takim razie może nie jest tak źle, usiądź spokojnie, poczytaj o wzorcach i przemyśl architekturę całej aplikacji na nieco wyższym poziomie :) może zainteresuj się spring-iem, to fajny framework, modularny, możesz użyć z niego co jest ci potrzebne, nadaje się nie tylko do aplikacji webowych a pomaga trzymać się dobrych praktyk