2009-08-23 11 views
5

Dla zabawy robię trochę HTML/CSS, ale szukam umiejętności programowania.Programowanie dla początkujących - porady dotyczące projektowania aplikacji internetowej

Czytałem już na PHP i MySQL. Do tej pory nie uważam, że zbyt trudne jest zrozumienie pojęć takich jak pętle, twierdzenia o stanie itp., Ale chcę utknąć i zacząć opracowywać aplikację, zanim będę zbyt znudzony czytaniem i całkowitym rezygnowaniem.

Mój pomysł ...

zdarza mi się uczyć do egzaminu na chwilę i mieć te egzaminy praktyczne na papierze. Pomyślałem, dlaczego nie umieścić tego w aplikacji, więc mogę przystąpić do egzaminu na komputerze.

Cechy:

  • Aplikacja może posiadać liczne egzaminy
  • Może losowo pytania lub wyświetlić je w kolejności
  • mieć możliwość wyświetlania odpowiedź na każde pytanie
  • czas czas zakończenia egzamin
  • Strona administracyjna, aby dodać nowe egzaminy i pytania/odpowiedzi

Ok, możecie przestać się śmiać, wiem, że to jeden krok powyżej Hello World, ale pomyślałem, że gdzieś rozpocznę!

Rozwinę to w PHP/MySQL, a może RoR, jeśli uważasz, że jest to lepsze dla początkującego. Myślę, że będę dobrze czytać/pisać do DB, ale nie jestem tak pewny na stronie struktura, projekt DB i ogólnie najlepszy sposób to zrobić.

Jeśli mam egzamin złożony z 50 pytań, każdy otrzymuje identyfikator. Jeśli usuniemy jedno pytanie, jak zaktualizować resztę za pomocą nowych identyfikatorów? To znaczy. jeśli usunę pytanie 3, wszystkie poniższe pytania muszą zmienić swój identyfikator z powrotem przez 1.

EDIT:

Jak bym reprezentują wystąpienie jednego egzaminu w moim schemacie bazy danych? Relacja na temat egzaminu i pytań będzie jedną lub więcej, ponieważ pytania będą unikalne dla jednego egzaminu. Ale skoro zamierzam mieć wiele egzaminów, jak mam to reprezentować?


Jak powinienem reprezentować wystąpienie jednego egzaminu w moim schemacie bazy danych? Relacja na temat egzaminu i pytań będzie jedną lub więcej, ponieważ pytania będą unikalne dla jednego egzaminu. Ale skoro zamierzam mieć wiele egzaminów, jak mam to reprezentować?

+2

Czy na pewno nie jest to tylko sposób na uniknięcie zmiany;) – APC

+0

Rozwalony! Zmiana jest tak nużąca, prawda? : D – Fred

+0

Szczerze mówiąc, stwierdzam, że do czasu wstawienia wszystkich pytań do bazy danych, przeprojektowania aplikacji, usunięcia tabel, przeprojektowania bazy danych ponownie włożono dane (i powtórzyć co najmniej cztery razy), będziesz mieć prawdopodobnie zmienione tak jak każdy inny =) –

Odpowiedz

2

Twoja największa rzecz, według mnie, będzie strukturą twojej bazy danych. Będziesz chciał przeczytać trochę o db-design i normalizacji.Zasadniczo będziemy chcieli logicznie zaplanować różne podmioty, które istnieją w aplikacji:

  1. Egzaminy
  2. egzaminu chętnych
  3. pytania
  4. odpowiedzi

A niektórzy z nich będzie powiązane ze sobą:

  1. Pytania -> Egzaminy
  2. Takers -> Egzaminy
  3. odpowiedzi -> Pytania

Gdy masz takie sytuacje, trzeba ustalić, czy związek jest jeden-do-jednego, jeden-do-wielu lub Many za dużo. Pytania mogą należeć do jednego egzaminu lub wielu. To zależy od ciebie. Jeśli pytanie należy do tylko jednego egzaminu, możesz utworzyć pole w tabeli pytań, aby zatrzymać ExamID. Jeśli pytanie może należeć do wielu egzaminów, utworzysz nową tabelę z dwoma polami: QuestionID, ExamID. To buduje twoją relację wiele do wielu.

Szczerze mówiąc, może to być bardzo duże i trudne przedsięwzięcie dla kogoś, kto ma bardzo małe doświadczenie programistyczne. Moim zdaniem powinieneś zacząć od czegoś znacznie prostszego, jak księga gości lub mini-blog.

Bez względu na to, jaki wniosek zdecydujesz się zbudować, SO jest tutaj dla Ciebie przez cały czas.

8

OK, po pierwsze, zapraszamy :) Po drugie: Wasz pomysł nie jest wcale głupi, w rzeczywistości wybrałeś najlepszy sposób nauki programowania: rób coś pożytecznego i zabawnego.

Aby uzyskać odpowiedź na pytanie: dlaczego potrzebne są kolejne identyfikatory do pytań? Z punktu widzenia bazy danych po prostu trzeba mieć różne identyfikatory w rzędzie.

Jeśli jest to wymaganie wyświetlania, dlaczego nie przypiszesz numeru podczas pętli podczas wyświetlania? Tak więc, na przykład, gdy robisz foreach, aby wyświetlić pytania, możesz zachować zmienną indeksową, którą zwiększasz w każdej pętli, i użyć jej do wyświetlenia liczby porządkowej.

Mam nadzieję, że to jest to, czego szukasz!

+0

O tak! to ma sens. Po prostu wygeneruję identyfikatory podczas ich przepuszczania. Myślę, że muszę mieć mózg, zanim będę mógł go zaprogramować: p Myślę, że to odnosi się do tego, co Rich mówi poniżej, o tym, że nigdy nie usuwa głównych identyfikatorów. – Fred

+0

@Jon, nie * dokładnie *, powinieneś generować numery pytań podczas ich przechodzenia, ale identyfikatory powinny zostać pozostawione same sobie, gdy zostaną przypisane w Db, jak wskazuje Rich Apodaca w swojej odpowiedzi. –

+3

Myślę, że częścią zamieszania może być to, co "ID" oznacza: (i) w bazie danych klucz podstawowy dla każdego pytania powinien się zawsze zmieniać; (ii) w interfejsie użytkownika numer pytania wyświetlany użytkownikowi powinien być dynamicznie generowany, jak sugerowałem w mojej odpowiedzi. – Argalatyr

1

Określona aplikacja to doskonały sposób nauki programowania, nawet jeśli takie aplikacje już istnieją (i robią to - ale unikałbym patrzenia na nie, po prostu stwórz i ucz się!).

Jedną z Twoich specyfikacji jest to, że pytania mogą być wyświetlane w dowolnej kolejności. Innym jest to, że można je usunąć. Jasne jest więc, że numeracja nie jest bezpośrednio związana z pytaniem - powinna być generowana dynamicznie po zestawie pytań i ich kolejności w teście. Musisz przemyśleć te wymagania, które stanowią podstawę do zaprojektowania komponentów. Interfejs użytkownika powinien być odizolowany od logiki programu, który powinien być odizolowany od bazy danych pytań. Spróbuj przekazać informacje między tymi częściami w najbardziej prymitywnej formie. W ten sposób, kiedy chcesz przeprojektować jedną z warstw, nie będziesz musiał zmieniać całej rzeczy.

+0

BTW, możesz chcieć zezwolić na przechowywanie i wyświetlanie języka znaczników, takich jak HTML w swoich pytaniach i odpowiedziach, i używać CSS lub podobnych, abyś mógł sformatować tekst! – Argalatyr

2

Jeśli mam egzamin złożony z 50 pytań, każdy otrzymuje identyfikator. Jeśli usuniemy jedno pytanie, jak zaktualizować resztę za pomocą nowych identyfikatorów? To znaczy.jeśli usuniemy pytanie 3, wszystkie poniższe pytania muszą zmienić identyfikator ponownie o 1.

Pierwotne identyfikatory nie powinny się nigdy zmieniać. Po usunięciu jednego wiersza w tabeli odpowiedni identyfikator podstawowy po prostu znika, ale nie powinno następować ponowne numerowanie kluczy podstawowych drugiego rzędu.

Jeśli zdecydujesz się na Rails, sprawdź doskonałą stronę z projekcjami Ryana Batesa Railscasts.

1

Zgadzam się z wszystkimi innymi odpowiedziami, wdrożenie przydatnej aplikacji to świetny sposób na naukę tworzenia stron internetowych. Ale, jak powiedział Jonathan, nie jest to bardzo prosta aplikacja, którą planujesz zbudować. To powiedziawszy, oto moje przemyślenia:

Ruby on Rails to framework dla Ruby. Może również wykorzystywać MySQL. PHP jest językiem programowania (jako ruby ​​dla RoR) i nie zawiera żadnej struktury. Jest jednak sporo dla PHP, aby wymienić tylko kilka z nich: CodeIgniter, Zend Framework, Symfony lub CakePHP. Frameworks implementują często używane aspekty aplikacji w elastyczny sposób, dzięki czemu mogą być wykorzystywane do różnych aplikacji. Niektóre z tych aspektów mogą być uwierzytelnianie, dostęp do bazy danych, buforowanie, renderowanie szablonu i wiele więcej.

Struktury są zazwyczaj pisane w celu przyspieszenia rozwoju aplikacji, jeśli wybierzesz php, możesz spróbować napisać własną strukturę, jeśli Twoim głównym celem jest nauka. Powinieneś spojrzeć na inne frameworki i wypróbować je, aby zobaczyć, czym one są i jak działają.

Polecam wykonanie kilku tutoriali dla jednego lub dwóch frameworków i zbadanie wszystkiego, czego jeszcze nie znasz (MVC, wzory kodowania itp.). Uważam, że english wikipedia jest bardzo pomocny.

Drugą częścią aplikacji będzie baza danych. Niektóre frameworki oferują pewien rodzaj ORM, który "osłabi" dostęp do bazy danych od ciebie, kiedy już skonfigurujesz swój schemat. Wciąż chciałbym polecić, aby spojrzeć na zapytanie do bazy danych, ponieważ wtedy wiesz, co robi struktura, gdy pobiera dane z bazy danych.

This wydaje się być dobrym źródłem informacji do wprowadzenia do serwera mysql i zawiera linki do samouczków sql (do odpytywania serwera db). I polecam this tutorial, jak utworzyć schemat bazy danych.

Mam nadzieję, że niektóre z tych zasobów są dla Ciebie przydatne i życzę powodzenia.

+0

Dzięki za informacje. Myślę, że zamierzam pozostać przy tym projekcie i zacząć od schematu DB. Samouczek, który łączyłeś z normalizacją, wygląda na bardzo użyteczny. – Fred

Powiązane problemy