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?
Odpowiedzi:
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:
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:
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.
źródło
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.
źródło
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.
źródło