Projektowanie i kodowanie-od góry do dołu czy od dołu do góry? [zamknięte]

W kodowaniu, co z Twojego doświadczenia jest lepszym podejściem?

  1. rozbij problem na wystarczająco małe kawałki, a następnie zaimplementuj każdy kawałek.
  2. rozwiń problem, ale następnie zaimplementuj przy użyciu podejścia odgórnego.
  3. Jakieś inne?
Author: Carl, 2008-09-25

13 answers

Oto co robię:

Najpierw zrozum domenę. Zrozumieć problem do rozwiązania. Upewnij się, że ty i klient (nawet jeśli tym klientem jesteś ty!) są na tej samej stronie co do tego, jaki problem ma zostać rozwiązany.

Następnie proponuje się rozwiązanie problemu na wysokim poziomie i od tego projekt zamieni się w bąbelki lub kule na stronie lub cokolwiek innego, ale chodzi o to, że wstrząśnie się na komponenty, które można zaprojektować.

W tym momencie piszę testy do jeszcze nie pisane klasy, a następnie uzupełniać klasy, aby zdać te testy.

Stosuję podejście testowe i buduję działające, przetestowane komponenty. To mi pasuje. Kiedy interfejsy komponentów są znane, a "reguły" są znane ze sposobu, w jaki rozmawiają ze sobą i świadczą sobie usługi, staje się to zwykle prostym ćwiczeniem "połącz wszystko razem".

Tak to robię i dobrze mi to wyszło.

 12
Author: itsmatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 01:28:44

Projektuję odgórnie i realizuję oddolnie.

Dla implementacji najlepsze wydaje mi się budowanie najmniejszych elementów funkcjonalnych i łączenie ich w struktury wyższego poziomu. Ale w przypadku projektowania muszę zacząć od ogólnego obrazu i rozbić go, aby określić, jakie będą te elementy.

 15
Author: Dave Sherohman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 02:40:43

Możesz przejrzeć Manifest Agile . Top down I bottom up opierają się na zbudowaniu wszystkiego na raz projektowania i budowy.

"działające oprogramowanie nad obszerną dokumentacją" oznacza, że pierwsza rzecz, którą zbudujesz, jest najmniejszą użyteczną rzeczą, jaką możesz uruchomić. Top? Dno? Ani jedno, ani drugie.


Kiedy byłem młodszy, pracowałem nad projektami, które były -- na podstawie umowy -- ściśle odgórnie. To nie działa. W rzeczy samej, to nie może się udać. Dostajesz góry redundantnego projektu i kodu w rezultacie. Nie było to rozsądne podejście, gdy było stosowane bezmyślnie.

Zauważyłem, że zwinne podejście-małe kawałki, które działają-ma tendencję do rozbicia problemu na części, które można uchwycić na raz. Top-down/bottom-up nie ma już tak dużego znaczenia. W rzeczy samej, to może nie mieć znaczenia.

Który prowadzi do: "jak się rozkłada do zwinnego rozwoju?"Sztuką jest unikanie tworzenia wielkiej rzeczy, którą należy następnie rozkładać. Jeśli przeanalizujesz problem, znajdziesz aktorów, którzy próbują osiągnąć przypadki użycia i zawodzą, ponieważ nie mają wszystkich informacji, lub nie mają ich na czas, lub nie mogą wykonać swoich decyzji, lub coś w tym stylu.

Często nie są to duże rzeczy, które wymagają rozkładu. Kiedy są, musisz przepracować problem w kierunku celów Wstecz . Od celów do rzeczy, które umożliwiają osiągnięcie tego celu Do Rzeczy, które umożliwiają aktywatorów, itp. Od cele są często duże rzeczy, to wydaje się być odgórne-od ogólnego celu biznesowego do szczegółowego procesu biznesowego i kroku.

W pewnym momencie przeglądamy te różne kroki, które prowadzą do celów. Zrobiliśmy część analizy (rozkładanie rzeczy). Teraz przychodzi część syntezy: montujemy to, co mamy, w rzeczy, które możemy rzeczywiście zbudować. Synteza jest oddolna. Nie dajmy się jednak ponieść emocjom. Mamy kilka punktów widzenia, z których każdy jest inny.

Mamy model. Jest to często budowane z detali w większy model koncepcyjny. Następnie, czasami rozkłada się ponownie na model znormalizowany dla OLTP. Lub rozkłada się na schemat Gwiazdy znormalizowanej dla OLAP. Następnie tworzymy mapowanie ORM z znormalizowanego modelu. Góra-Dół-Góra.

Mamy przetwarzanie. Jest to często zbudowane z podsumowań procesów biznesowych aż do szczegółów etapów przetwarzania. Następnie oprogramowanie jest projektowane wokół kroków. Następnie oprogramowanie jest podzielone na klasy i metody. Dół-Góra-Dół.

[dygresja . Z oświeconymi użytkownikami, rozkład ten określa nowe tytuły pracy i sposoby pracy. Z nieoświeconymi użytkownikami, stare zadania pozostają i piszemy góry dokumentacji, aby mapować stare zadania na nowe oprogramowanie.]

Mamy komponenty. Często przyglądamy się elementom, przyglądamy się temu, co wiemy o dostępnych komponentach i dokonujemy pewnego rodzaju dopasowania. Jest to najbardziej przypadkowy Proces; jest podobny do sposobu, w jaki tworzą się kryształy -- Istnieją centra zarodkowania i konstrukcja rodzaj krzepnie wokół tych centrów. Usługi Internetowe. Baza danych. Zarządzanie Transakcjami. Wydajność. Głośności. Różne funkcje, które w jakiś sposób pomagają nam wybrać komponenty, które implementują niektóre lub wszystkie nasze rozwiązanie. Często wydaje się oddolne (od funkcji do produktu), ale czasami odgórne ("trzymam młotek, nazwij wszystko gwoździem" = = używaj RDBMS do wszystkiego.)

W końcu musimy kodować. To jest oddolne. Tak jakby. Masz aby zdefiniować strukturę pakietu. Musisz zdefiniować klasy jako całość. Ta część była z góry na dół. Musisz pisać metody w klasach. Często robię to oddolnie. opracowuję metodę, piszę test jednostkowy, kończę metodę. Przygotuj następną metodę, napisz test jednostkowy, Zakończ metodę.

Zasada działania jest zwinna-zbuduj coś, co działa. Szczegóły są na całej mapie-góra , dół, przód, tył, DANE, proces, aktor, obszar tematyczny, wartość biznesowa.

 3
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 12:45:50

Tak. Zrób to wszystko.

To może wydawać się sarkastyczne( przepraszam, wracam do formy), ale tak naprawdę jest to przypadek, w którym nie ma prawidłowej odpowiedzi.

 2
Author: KevDog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 01:18:53

Również w zwinny sposób, napisz najpierw swoje testy!

Wtedy całe oprogramowanie jest ciągłym cyklem

  • Czerwony-Kod nie przejdzie testu
  • Zielony-kod przechodzi test
  • Refactor - ulepszenia kodu, które mają na celu zachowanie intencji.

Wady, nowe funkcje, zmiany. Wszystko przebiega według tego samego schematu.

 2
Author: Robert Paulson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 01:40:49

Twoja druga opcja to rozsądna droga. Jeśli podzielisz problem na zrozumiałe kawałki, podejście odgórne ujawni wszelkie główne wady projektu, zanim zaimplementujesz wszystkie szczegóły. Możesz pisać znaczniki dla funkcji niższego poziomu, aby wszystko wisiało razem.

 1
Author: Mike Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 01:19:34

Myślę, że jest coś więcej do rozważenia niż projektowanie z góry na dół. Oczywiście trzeba podzielić projekt na zarządzalne jednostki pracy, ale trzeba również rozważyć ustalenie priorytetów itp. W projekcie iteracyjnym często zmienisz definicję problemu dla następnej iteracji po dostarczeniu rozwiązania dla poprzedniej.

 1
Author: Ty.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 01:29:07

Przy projektowaniu lubię robić middle-out. Lubię modelować domenę, a następnie projektować klasy, przenosić się do bazy danych i interfejsu użytkownika stamtąd. Jeśli istnieją konkretne funkcje, które są oparte na interfejsie użytkownika lub bazie danych, mogę zaprojektować je z góry, jak również.

Podczas kodowania, ogólnie lubię robić oddolne (najpierw baza danych, potem podmioty gospodarcze, potem interfejs użytkownika), jeśli w ogóle to możliwe. Uważam, że jest o wiele łatwiej utrzymać rzeczy prosto z tej metody.

 1
Author: Guy Starbuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 01:40:17

Uważam, że z dobrymi projektantami oprogramowania (i moim zdaniem wszyscy programiści powinni być projektantami oprogramowania na pewnym poziomie), magia polega na tym, że mogą robić to odgórnie i oddolnie jednocześnie.

To, do czego zostałem "przeszkolony" przez moich mentorów, to zacząć od bardzo krótkiego odgórnego zrozumienia zaangażowanych podmiotów, a następnie przejść do oddolnego, aby dowiedzieć się podstawowych elementów, które chcę stworzyć, a następnie wykonać kopię zapasową i zobaczyć, jak Mogę przejść jeden poziom w dół, wiedząc, co wiem o tym, co robię. wyniki mojego dołu w górę, i tak dalej, aż "spotykają się w środku".

Mam nadzieję, że to pomoże.

 1
Author: Roee Adler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-13 15:25:12

Outside-In design.

Zaczynasz od tego, co próbujesz osiągnąć na górze, i wiesz, z czym musisz pracować na dole. Pracuj na obu końcach, aż spotkają się w środku.

 0
Author: Andrew Edgecombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 01:31:50

W pewnym sensie zgadzam się ze wszystkimi, którzy mówią "ani", ale każdy spada gdzieś na widmo.

Jestem bardziej typem faceta z góry na dół. Wybieram jedną funkcję wysokiego poziomu / punkt / cokolwiek i wdrażam ją jako kompletny program. To pozwala mi szkicować podstawowy plan i strukturę w granicach domeny problemu.

Następnie zaczynam od innej funkcji i refaktoruje wszystko z oryginału, który może być używany przez drugiego do nowych, wspólnych jednostek. Piana, spłukać, powtarzać aż do zakończenia aplikacji.

Znam jednak wielu ludzi, którzy są oddolni, którzy słyszą problem i zaczynają myśleć o wszystkich podsystemach wsparcia, które mogą być potrzebne do zbudowania aplikacji na nim.

Nie wierzę, że ani podejście jest złe, ani dobre. Oba mogą osiągnąć rezultaty. Staram się nawet znaleźć oddolnych facetów do pracy, ponieważ możemy zaatakować problem z dwóch różnych perspektyw.

 0
Author: Benjamin Autin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 01:56:15

Oba są poprawnymi podejściami. Czasami jeden po prostu "czuje się" bardziej naturalny niż drugi. Istnieje jednak jeden duży problem: niektóre główne języki, a zwłaszcza ich frameworki i biblioteki naprawdę mocno na wsparcie IDE, takie jak podświetlanie składni, sprawdzanie typu tła, Kompilacja w tle, inteligentne uzupełnianie kodu, IntelliSense i tak dalej.

Jednak to nie działa z odgórnym kodowaniem! w kodowaniu odgórnym stale używasz zmiennych, pól, stałe, funkcje, procedury, metody, klasy, moduły, cechy, mixiny, aspekty, pakiety i typy , których jeszcze nie zaimplementowałeś! Tak więc IDE będzie ciągle krzyczeć na Ciebie z powodu błędów kompilacji, wszędzie będą czerwone linie, nie otrzymasz zakończenia kodu i tak dalej. Więc, IDE prawie zabrania wykonywania odgórnego kodowania.

 0
Author: Jörg W Mittag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 04:27:40

Wykonuję wariant top-down. Staram się najpierw zrobić interfejs - potem używam go jako listy funkcji. Co jest dobre w tej wersji jest, to nadal działa z IDE, które inaczej narzekają. Wystarczy skomentować jedno wywołanie funkcji do tego, co jeszcze nie zostało zaimplementowane.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-13 19:56:07