Lubię, aby mój kod był testowalny i zdecydowałem się na strategię Dependency-Injection dla mojego obecnego frameworka MVC, który zdecydowanie okazał się świetnym sposobem na zapewnienie luźno powiązanego kodu, testowalności i modułowości.
Ale ponieważ jestem dalekim od mistrza we wzorcach projektowych, trudno mi znaleźć dobry sposób na utrzymanie moich modeli tak luźno powiązanych z klasami łączników bazy danych, jak to możliwe.
Jak można to zrobić?
Ponieważ nie podałem żadnego kodu fizycznego wraz z tym pytaniem, naprawdę docenię kilka przykładów logiki / kodu lub informacji, które mogłyby skierować mnie w kierunku zrozumienia wyżej opisanego problemu.
object-oriented
php
dependency-injection
Przemysłowy
źródło
źródło
Odpowiedzi:
Jednym ze sposobów jest zaprojektowanie modeli przed zaprojektowaniem bazy danych. Podczas projektowania modeli nacisk kładziony jest na uchwycenie logiki biznesowej i znaczeń w dziedzinie problemów. Powinno to zostać zarejestrowane w sposób, który ma sens dla firmy, obejmujący więcej niż tylko podmioty i pola danych. Niektóre elementy danych są interpretowane na podstawie innych, niektóre są zależne od innych, itp. Dodatkowo do tego modelu można dodać dowolną podstawową logikę, taką jak wewnętrzna reakcja obiektu, gdy określony element ma określoną wartość.
Jest całkiem prawdopodobne, że skończysz z czymś, co jest w ponad 90% identyczne z tym, w jaki sposób utrwalisz dane. W porządku. Może być całkowicie identyczny bez połączenia.
Zauważ też, że modelowanie domeny we mgle prawdziwej uporczywej ignorancji jest trochę świętym Graalem w projektowaniu oprogramowania. Jeśli możesz to zrobić, fantastycznie. Ale jeśli domena problemowa jest w ogóle znacząca i ma jakąkolwiek złożoność, to dobrze jest od czasu do czasu wycofać się z modelowania domeny, aby sprawdzić poprawność trwałości danych, aby upewnić się, że nie malowałeś się w kąt.
Pamiętaj tylko o rzeczywistych rolach różnych komponentów i zachowaj je oddzielnie podczas ich projektowania. Przy każdej decyzji projektowej zadaj sobie pytanie, czy któraś z tych ról została naruszona:
źródło
Chcesz mieć dwie rzeczy.
Twoje „Modele domeny”, czyli encje danych, reprezentują byty twojego systemu, takie jak użytkownicy, posty, produkty itp.
Kod użytkowania
Oto, jak tworzysz modele domen (Encje) i masz modele MVC wykonujące połączenia z DB i manipulujące danymi.
Jeśli zastanawiasz się, czym jest PPI, przejdź do Google dla „PPI Framework”.
Powodzenia w wyszukiwaniu.
Pozdrawiam, Paul Dragoonis.
źródło
Pamiętaj, MVC powstało w smalltalk, który ma automatyczną trwałość dla wszystkich obiektów. Tak więc wzorzec MVC nie zaleca żadnego rozwiązania dla separacji modelu / trwałości.
Preferuję obiekt „Repozytorium”, który wie, jak tworzyć obiekty modelu z bazy danych i przechowywać obiekty modelu w bazie danych. Wtedy Model nie wie nic o wytrwałości. Niektóre działania użytkownika będą musiały uruchomić zapis, więc prawdopodobnie kontroler będzie wiedział o repozytorium. Zwykle używam jakiejś formy wstrzykiwania zależności, aby nie dopuścić do połączenia kontrolera z repozytorium.
źródło