Od dłuższego czasu próbuję owinąć głowę wokół OOP. Widzę jego zalety. Przeczytałem wiele tutoriali i obejrzałem tyle samo filmów na ten temat. Dostaję przykłady zwierząt / kotów / psów, dostaję przykłady samochodów / jazdy. Walczę z tym, jak zastosować te koncepcje w rzeczywistej aplikacji. Tak więc postanowiłem zbudować jeden przy użyciu OOP.
Nie proszę o pomoc w składni lub pisaniu konkretnego kodu - mogę to znaleźć w dokumentacji i przeszukując fora itp. Tak naprawdę potrzebuję wskazówek i od czasu do czasu popychania we właściwym kierunku. Czy są doświadczeni programiści, którzy chcą mnie mentorować?
Jako mój projekt edukacyjny chciałbym zbudować prostą „aplikację internetową” ogłoszeń. Coś podobnego do Craigslist, ale znacznie rozwodnione pod względem zakresu. Chciałbym używać PHP5 i MySQL, ponieważ jestem z nimi zaznajomiony.
Powiedzmy, że są tylko 2 przypadki użycia:
- Zamieszczanie czegoś na sprzedaż
- Przeglądanie / szukanie czegoś do kupienia
Jakie „rzeczy” powinny być przedmiotami? Mogę sobie wyobrazić, że każdy przedmiot może być przedmiotem, ale w którym momencie? I dlaczego?
Na przykład użytkownik wypełnia formularz „wystawić na sprzedaż”, czy formularz ten powinien zostać przekształcony w obiekt, który jest przekazywany do innego obiektu, który wstawia wartości do bazy danych?
A co, gdy inny użytkownik przegląda i prosi o wyświetlenie wszystkich pozycji kategorii C? Czy ma sens, że ilekroć aplikacja musi połączyć się z bazą danych, tworzy obiekt bazy danych, a następnie pobiera kilka obiektów przedmiotów i wyświetla je na stronie? … Napisanie tego z pewnością uświadamia mi, jak wciąż nieświadomy jestem OOP. Proszę, pomóż mi to naprawić.
Jeśli Twoim zdaniem nie jest to dobry projekt, aby rozpocząć branie w OOP, możesz zaproponować inny pomysł!
źródło
Odpowiedzi:
Szczerze sądzę, że jak dotąd porady dla nowych uczniów z OO były okropne. Nie jest dobrym pomysłem, aby od razu zacząć myśleć o obiektach jako o reprezentacji określonego wystąpienia „rzeczy” zdefiniowanej przez jakąś klasę. Lepiej myśleć o nich jako o podzielonych na części komponentach maszyny, które mają pewne interakcje między sobą, ale nie są wewnętrznymi elementami. Każdy z tych składników utrzymuje stan
Jeśli chcesz używać ORM (mapowanie obiektowo-relacyjne) do interakcji DB, niezależnie od tego, jakiego frameworku używasz lub tworzysz, prawdopodobnie będzie miał kilka płytkich obiektów reprezentujących tabele, które prawdopodobnie są kolekcjami „rzeczy”, ale osobiście nie lubię ORM , i nie sądzę, że niekoniecznie reprezentują idealne praktyki OO, ale są popularne w dużych aplikacjach internetowych.
Poza tym prawdopodobnie będziesz mieć pewne ważne komponenty, które musi uruchomić komputer z aplikacją, takie jak jedno lub więcej połączeń DB (możesz stworzyć klasę, która utrzymuje połączenie i możesz uruchamiać przygotowane zapytania -
PDO
jest świetny , ale owinąłbym to) i być może system szablonów dla twoich widoków. Możesz także chcieć, aby twoje kontrolery były również obiektami PHP. Jeśli masz formularz do wypełnienia, możesz mieć obiekt, który zachowuje wartości formularza dla P / R / G, token zabezpieczający CSRF i może wykonywać weryfikację na swoich danych wejściowych.Nie powinieneś próbować szukać „rzeczy”, które zamieniają się w obiekty podczas konstruowania projektu aplikacji i grafu obiektowego. Zamiast tego powinieneś pomyśleć o logicznych komponentach, które tworzą je razem. Nie sądzę, że powinieneś próbować to wymusić, i powinno to nastąpić dość naturalnie, ale bardzo trudno to zrobić poprawnie i na pewno skończysz z koniecznością zmiany niektórych decyzji projektowych po drodze.
Moja ostatnia rada jest następująca: kompozycja zamiast dziedziczenia jest właściwą drogą.
źródło
Oto, w jaki sposób możesz używać OOP do kupowania i sprzedawania swoich zwierząt domowych, tę samą metodologię można zastosować do sprzedaży samochodów lub samolotów; p
źródło
Na prośbę OP podzielę się moim kodem księgi gości.
Klasa wiadomości:
Klasa obiektu danych dostępu do wiadomości:
index.php
Zmieniłem nazwy niektórych zmiennych i funkcji, aby miały dla ciebie sens (przetłumaczone z holenderskiego na angielski: P), więc czasami możesz znaleźć dziwne sentencje, ponieważ właśnie zrobiłem szybką zamianę itp. Baw się dobrze. Również nie jest to cały kod, ponieważ spowodowałbym, że opublikowałbym kod o wartości 20 plików: P
źródło
Jak wspomniano w Explosion Pills, w złożonej aplikacji większość obiektów odnosi się do komponentów aplikacji (np. Pul połączeń do bazy danych, poleceń, struktur danych, takich jak mapy skrótów), a nie do rzeczywistych obiektów (takich jak karta pokładowa, faktura lub plik mp3 ). Istnieje wiele dobrych książek na temat wzorców projektowych, które pokazują, w jaki sposób ludzie rozwiązali wiele powtarzających się problemów w tej dziedzinie. Książka GOF, jak wiadomo, jest dokładna, ale bardzo sucha, wzory Head First Design mogą być bardziej dostępne.
Pod względem analizy i projektowania w świecie rzeczywistym. Często pomocne jest myślenie w kategoriach rzeczowników i czasowników. Na przykład biblioteka wypożyczająca wideo (czy są już przestarzałe?) Może zawierać następujące rzeczy / rzeczowniki:
Pod względem czasowników:
Można je następnie przekształcić w klasy z operacjami (już dawno nie napisałem żadnego PHP, więc go uniknę):
Wszystko wymaga dużo praktyki i zabawy. Najlepiej jest utknąć i uczyć się na nieudanych projektach. Moim zdaniem OO jest czymś, czego możesz się uczyć i rozwijać przez całe swoje życie (nie jest to łatwe i nie ma idealnych rozwiązań na nic). Dobry projekt jest często iteracyjny, więc spodziewaj się wypróbowania kilku różnych pomysłów na swoją aplikację internetową „Lista Craiga”.
źródło
Najlepiej jest znaleźć sposób skoncentrowania się na rdzeniu aplikacji - „post”, „user”, „post :: FindByName ()”, „user-> Validate ()” itd. I nie martw się za dużo o hydraulice - jak przykleić posty do tabel bazy danych, jak zachować spójność wyświetlania postu między różnymi wyszukiwaniami i jak przykleić formularz „enter post” do rekordu bazy danych.
Na szczęście istnieje wiele ram, które robią to za Ciebie; dominującym paradygmatem w aplikacjach sieciowych OO jest „Model-View-Controller”, znany również jako MVC ; w PHP dostępnych jest wiele gotowych frameworków MVC.
Chociaż rozszerza to twoją potrzebę uczenia się - teraz musisz dowiedzieć się o MVC, a także OO - oznacza to, że twoje wysiłki OO są głównie ograniczone do warstwy „Modelowej”, która reprezentuje Twoją domenę biznesową; właśnie tam OO jest najbardziej naturalne i wyraziste. Większość frameworków MVC umożliwia zdefiniowanie warstwy „modelowej”, a następnie automatyczne utworzenie strony internetowej przy użyciu techniki znanej jako rusztowanie - w ten sposób uzyskuje się szybki sposób eksperymentowania z różnymi implementacjami dla modelu domeny, bez konieczności odznaczenie całej hydrauliki.
źródło