Czy upłynął wiek logiki domeny w bazach danych? [Zamknięte]

9

Niedawno natknąłem się na tę opinię z 2016 r., Mówiąc, że w bazie danych nadal istnieje uzasadnienie dla logiki domeny.

Myślałem, że to jest całkowicie przestarzałe. Zastanawiam się tylko, czy ten facet wciąż żyje w latach 90., czy to może być naprawdę prawda. Odłóż na bok starsze systemy.

Co z logiką domeny w bazie danych z powodu wymagań bezpieczeństwa. Czy to naprawdę coś do zrobienia?

ps-aux
źródło
3
Czy rzeczywiście przeczytałeś ten artykuł w całości? Wydaje mi się, że autor bardzo dobrze wypowiada się na ten temat i wyjaśnia, dla których części BL uważa, że ​​najlepiej umieścić je w bazie danych, a dla których nie. Więc który z punktów tego artykułu dokładnie jesteś struggeling z?
Doc Brown
Tak, został zamknięty 18 lutego 2009 roku i jest teraz fałszywy.
Michael Durrant,
Ciekawy. Przeczytałem tego gościa, podając wiele przykładów SQL (silnie związanych z Oracle), a potem nie mogę nie pamiętać, że mój klient powiedział mi: zapomniałem kupić licencję Oracle na PRE env. Mamy go dla PRO, ale nie dla PRE. Będziesz musiał wdrożyć aplikację, przeciwko MySQL w PRE i Oracle w PRO, przez chwilę ... Poproszę tego faceta, gdzie teraz idą wszystkie shinny funkcje wyroczni ... (Problem był z tego powodu Nie chcę wiedzieć, architekt zdecydował się na natywną metodę mapowania wierszy Sql zamiast Orm, ale nadal jest blisko problemu zablokowania dostawcy DB .
Laiv
@Laiv: To szalone i żadna ilość ORM ani innych abstrakcji cię nie uratuje. Zasadniczo wdrażasz nieprzetestowany kod do produkcji przy takiej konfiguracji.
JacquesB,
2
„Czy upłynął wiek logiki domeny w bazach danych?” Boże, mam taką nadzieję.
lunchmeat317

Odpowiedzi:

13

Programiści wydają się dziś myśleć bardzo dogmatycznie, zwłaszcza gdy czytają myśli, które inni piszą na swoich blogach.

Weźmy na przykład blog Clean Coding Boba Martina. Jako ogólną obserwację uważam, że pisma Boba Martina są dość jasne i klarowne, więc denerwuje mnie to, że ludzie są ciągle zdezorientowani przez to, co pisze, takie jak zasady SOLID. Rozłączają się z tym, czym powinna być „pojedyncza odpowiedzialność” lub dlaczego niektóre klasy łamią zasady Liskowa, a tym, co prawdopodobnie powinny robić, jest po prostu dążenie do napisania lepszego kodu i zdobycie doświadczenia w pierwszej kolejności, aby to, co czytali blogi mają pewien kontekst.


Zasadniczo mówisz, że baza danych powinna zawierać tabele i dane, i to wszystko, co powinna zawierać. Ale bazy danych są wyjątkowo odpowiednie do robienia pewnych rzeczy, w których ... cóż, bazy danych są dobre.

Artykuł cytuje te rzeczy:

  • Integralność i walidacja danych (np. Ograniczenia zerowe i unikalne)
  • Bezpieczeństwo na poziomie wiersza
  • Pisanie interfejsu API przy użyciu procedur przechowywanych
  • Obliczanie sald
  • Zadawanie pytań do bazy danych (tj. Zapytania i raportowanie)
  • Unikanie problemów ORM, takich jak N + 1

jako odpowiednie rzeczy do umieszczenia w bazie danych. Zgadzam się z nim.

Powody, dla których nie umieszczasz logiki biznesowej (ogólnie) w bazie danych:

  • Blokada dostawcy
  • Twoja baza danych nie jest organem centralnym
  • Twój zespół nie myśli w relacjach
  • Niższe oprzyrządowanie.

Ale te rzeczy zasadniczo dotyczą tylko tych technik, narzędzi i szkoleń, dla których baza danych nie jest specjalnie przystosowana.

Tak więc, jak w przypadku każdej innej techniki tworzenia oprogramowania, zależy to. Oceniasz swoje alternatywy i podejmujesz decyzję na podstawie tego, co Twoim zdaniem jest najlepszym możliwym kierunkiem działania dla konkretnego zastosowania.

Robert Harvey
źródło
3
Bardzo dobry podział i lepszy sposób na sformułowanie pytania.
candied_orange
9

wprowadź opis zdjęcia tutaj

Wiek koni i buggy się skończył, ale nadal możesz kupować baty buggy.

Dlaczego? Kiedy samochody są szybsze, tańsze w utrzymaniu, a ich zaniedbanie nie spowoduje odwiedzin w ludzkim społeczeństwie, dlaczego koń i wagon nadal są w pobliżu?

Ponieważ czasami masz inne powody, aby zrobić coś oprócz popularnych powodów.

Powinieneś się nauczyć, dlaczego logika domeny w bazie danych powoduje problemy i co każdy może z niej wyciągnąć. Następnie zdecyduj.

Mój osobisty pogląd:

Logika domeny dotyczy zachowania. Bazy danych dotyczą trwałości, relacji i, no cóż, danych. Gdy zobaczysz to w ten sposób, reguły biznesowe nie powinny znajdować się w bazie danych.

Z drugiej strony, kto powiedział, że baza danych nie może zachowywać się? Zbudowałem biurowe bazy danych przy użyciu Filemaker. Ludzie nazywają to bazą danych, ale tak naprawdę jest to również całe środowisko programowania aplikacji. Wszystko płynnie zintegrowane w jednym i nazywane bazą danych.

Wizdom zwykle znajduje się pomiędzy skrajnymi widokami. Nie mam wątpliwości, że można go zmusić do pracy. Próbując znaleźć środek, kusi po prostu pójść za stadem. Ostrzegam przed tym tutaj.

System, który utrzymuje logikę domeny w bazie danych, może działać dobrze. System, który utrzymuje logikę domeny poza bazą danych, może działać dobrze. System, który miesza logikę domen w obu miejscach, doprowadzi mnie do szału. Nie będę wiedział, gdzie umieścić nowe zachowanie. Nie będę pewien, gdzie znaleźć stare zachowanie.

Jeśli nadal nie możesz zdecydować się rzucić monetą i podjąć decyzję jako ewangelię dla każdego konkretnego projektu. O ile wiem, ta moneta wie, co jest najlepsze, tak samo jak wszyscy inni.

candied_orange
źródło
1
Twoja odpowiedź brzmi, że nawet nie spojrzałeś na artykuł powiązany z PO (nie to, że mówię, że autor ma rację, czy nie), ale czy możesz nam powiedzieć, gdzie się zgadzasz lub co do poglądów opisanych w tym artykule?
Doc Brown
@DocBrown Też go nie przeczytałem, ale i tak odpowiedź jest dobra, w pełni się zgadzam. I odnosi się do pytania OP (ostatnie zdanie), a nie cytowanego artykułu.
qwerty_so
@DocBrown Nie sądzę artykuł przeczytać artykuł wujek Bob że cytuje : „architektura wtyczek są bardzo wytrzymałe, ponieważ reguły biznesowe stabilna wysoka wartość może być przechowywana w zależności od wartości niskiej lotnych modułów takich jak interfejsy użytkownika i baz danych.”. Wujek Bob ma silniejsze poglądy na ten pomysł niż ja. Ten artykuł wybiera z artykułu Boba i sprawia wrażenie, jakby Bob mówił coś, czym nie jest.
candied_orange
2

Miałem przypadek, w którym rozwiązanie go w warstwie biznesowej byłoby prawdziwym zabójcą wydajności.

Nasza koncepcja bezpieczeństwa OO aplikacji składa się z ról i grup. Oba są strukturami rekurencyjnymi. Napisaliśmy procedurę składowaną, która rozwiązuje uprawnienia użytkownika do obiektu domeny.

Naprawdę mniej jest potrzeby powrotu do logiki bazy danych. Ale w tym przypadku postanowiłem pójść tą drogą. Ale to, co zawsze musisz wziąć pod uwagę: rezygnujesz z abstrakcji. Gdy tylko logika biznesowa pojawi się w bazie danych, masz ciężki dzień na zmianę warstwy trwałości. Więc bądź bardzo, bardzo ostrożny.

oopexpert
źródło