Czy najpierw powinniśmy modelować relacje między bytami, czy modelowanie obiektowe?

9

Budując aplikację od podstaw, czy powinienem zacząć od modelu obiektowego (OO), czy modelu relacji z bytem (ER)?

pphanireddy
źródło

Odpowiedzi:

13

Możesz spróbować przestrzegać zasady opóźniania decyzji architektonicznych tak długo, jak to możliwe. Uważa się, że w przyszłości dowiesz się więcej na temat swojej problematycznej domeny niż teraz - więc wszelkie podejmowane dziś decyzje są podejrzane.

Inną dobrą zasadą w połączeniu z tym może być próba wypróbowania najbardziej ryzykownych części twoich wymagań - myśl jest taka, że ​​jeśli wykonasz łatwe części, a następnie okaże się, że ryzykowne części skierują cię w innym kierunku, nie masz ponownie wykonać łatwe części. Ryzykowne, co oznacza, że ​​nie masz pewności, jak to zrobić.

Biorąc pod uwagę te dwa elementy i biorąc pod uwagę fakt, że często próbuję podchodzić do rzeczy z perspektywy OO, możesz spróbować zacząć od modelu OO najbardziej ryzykownych części aplikacji i zaimplementować możliwie najmniejszą ilość kodu, który może działać, który spełnia wymagania ryzykowne wymagania. Następnie zacznij rozszerzać swój model OO zgodnie z potrzebami, aby dodać funkcjonalność, której będziesz potrzebować. Przez cały czas możesz całkowicie opóźnić decyzję, czy użyć SQL, NoSQL, płaskich plików, pamięci w chmurze lub cokolwiek ... i może się okazać, że w ogóle nie będziesz chciał mieć relacji (eliminując potrzebę modelu ER).

Kyle Hodgson
źródło
7

Model ER określa sposób przechowywania danych aplikacji, a model OO decyduje, w jaki sposób te same dane będą przechowywane w pamięci lub podczas działania aplikacji. Tak więc projektowanie schematu bazy danych (model ER) i projektowanie struktury klasy (model OO) są powiązanymi względami projektowymi i zwykle można o nich myśleć jednocześnie. W rzeczywistości, jeśli używasz narzędzia mapowania obiektowo-relacyjnego (ORM) , Twój model ER i model OO mogą być jednym i tym samym. Innymi słowy, twoje klasy (model OO) mogą być opatrzone adnotacjami w taki sposób, że same określają model ER.

Jednak przed zaprojektowaniem upewnij się, że masz bardzo dobre pojęcie o rzeczywistych wymaganiach oprogramowania, do czego będzie ono używane, w jaki sposób będzie używane i kto będzie z niego korzystać. Wielu programistów zaczyna zastanawiać się nad decyzjami projektowymi, zanim w pełni zrozumie potrzeby, którymi musi zająć się produkt, i skończy się na projekcie, który jest nieodpowiedni do prawdziwego celu aplikacji.

CFL_Jeff
źródło
+1 za identyfikację różnicy między 2 rodzajami modelowania. Nie do końca zgadzam się, że możesz myśleć o dwóch modelach jednocześnie. Ponadto niektórzy fani OO uważają, że twoje modele OO i ER nie zawsze muszą być takie same. Jednak model OO może być wykorzystany jako podstawa do zaprojektowania bazy danych, ale ta transformacja jest nieco trudna.
NoChance,
@EmmadKareem Masz rację, nie zawsze właściwe jest jednoczesne myślenie o dwóch modelach. Mówiłem w związku z pomysłem użycia ORM i adnotacji klas, aby projekt modelu ER został zintegrowany z modelem OO, że tak powiem. Niektóre osoby decydują się na tworzenie aplikacji w ten sposób, który zasadniczo implementuje jednocześnie OO i ER.
CFL_Jeff
Nie myl modelu domeny z modelem danych - Nie myl obiektu (który reprezentuje pojedyncze wystąpienie) z tabelą bazy danych (zawierającą zbiór rzeczy)
Narender Parmar