データベースのドメインロジックの時代は終わりましたか?[閉まっている]


9

私は最近、2016年にこの意見に出くわしましたが、データベースのドメインロジックにはまだケースがあると言っています。

これは完全に時代遅れだと思いました。その男がまだ90代に住んでいるのか、それとも本当のことなのかと思います。レガシーシステムを脇に置きます。

セキュリティ要件のため、データベースにドメインロジックを含めることについてはどうでしょうか。それは本当にやるべきことですか?


3
実際にその記事を完全に読みましたか?著者は彼の主張を非常に明確にし、BLのどの部分についてデータベースに配置するのが最適であり、どの部分がそうでないかを説明していると思います。どのように記事のポイントは、まさにあなたがstruggelingていますか?
Doc Brown、

はい、2009年2月18日に閉鎖され、現在は誤りです。
Michael Durrant 2016年

それは好奇心が強い。私はこの男を読んで、SQLの例(Oracleに強く結びついている)をたくさん提供しました。それから、顧客が私に言ったのを避けられません。PRE環境用のOracleのライセンスを購入するのを忘れていました。PROにはありますが、PREにはありません。MySQLをPREで、OracleをPROでしばらくの間、アプリをデプロイする必要があります...オラクルのすべての優れた機能が今どこにあるのか、その人に尋ねます... (ここでの問題は、それが理由でした知りたくないのですが、アーキテクトはOrmの代わりにネイティブのSql行マッピングの方法を採用することにしましたが、DBプロバイダーにロックされるという問題はまだあります)
Laivは2016年

@Laiv:それはめちゃくちゃで、ORMやその他の抽象化があなたを救うことはありません。基本的に、このような設定でテストされていないコードを本番環境にデプロイします。
JacquesB 2016年

2
「データベースのドメインロジックの時代は終わりましたか?」神様、そう願っています。
ランチミート317

回答:


13

今日のプログラマーは、特に他の人々がブログに書いている考えを読んだとき、非常に独断的に考えているようです。

たとえば、ボブマーティンのClean Codingブログを見てください。一般的な観察として、ボブマーティンの著作は非常に明確で明快であるため、SOLIDの原則など、彼が書いたものに人々が常に混乱していることに戸惑います。彼らは「単一の責任」が何であるか、またはなぜ一部のクラスがリスコフの原則に違反しているのかということに夢中になっています。ブログにはいくつかのコンテキストがあります。


基本的に言っていることは、データベースにはテーブルとデータが含まれている必要があるということです。しかし、データベースは、データベースが得意である特定のことを実行するのに非常に適しています。

記事はこれらのものを引用します:

  • データの整合性と検証(nullや一意の制約など)
  • 行レベルのセキュリティ
  • ストアドプロシージャを使用したAPIの記述
  • 残高の計算
  • データベースに質問する(クエリとレポート)
  • N + 1などのORM問題の回避

データベースに入れるのに適したものとして。たまたま彼に同意する。

ビジネスロジック(一般的に)をデータベースに入れない理由:

  • ベンダーロックイン
  • データベースは中央機関ではありません
  • あなたのチームは関係を考えていません
  • 劣ったツーリング。

しかし、これらのことは一般に、データベースが一意に適していない技術、ツール、およびトレーニングにのみ適用されます。

したがって、ソフトウェア開発における他の技法と同様に、それは状況によって異なります。代替案を評価し、特定のアプリケーションで可能な最善の行動方針であると信じるものに基づいて決定を行います。


3
非常に良い内訳と質問を組み立てるより良い方法。
candied_orange 2016年

9

ここに画像の説明を入力してください

馬とバギーの時代は終わりましたが、まだバギーの鞭を買うことができます。

どうして?車の方が速く、維持費が安く、無視しても人道的社会からの訪問が得られないのに、なぜ馬と荷車がまだ残っているのですか?

なぜなら、人気の理由以外にも何かをする理由が異なる場合があるからです。

あなたが学ばなければならないのは、データベースのドメインロジックが問題を引き起こす理由と、だれもがデータベースから抜け出す可能性があることです。その後、あなた自身の決心をしてください。

私の個人的な見解:

ドメインロジックは動作に関するものです。データベースは、持続性、関係、そしてデータに関するものです。このように表示された場合、ビジネスルールはデータベースに存在するべきではありません。

一方、データベースが振る舞うことができないだろうと誰が言ったのですか?Filemakerを使用してOfficeデータベースを構築しました。人々はそれをデータベースと呼んでいますが、実際にはアプリケーション開発環境全体でもあります。すべてが1つにシームレスに統合され、データベースと呼ばれます。

Wizdomは通常、極端なビューの間にあります。私も間違いなく働かせることができたでしょう。真ん中を見つけようとするとき、群れをたどるのは魅力的です。ここでは注意します。

データベースにドメインロジックを保持するシステムは、適切に機能します。データベースからドメインロジックを除外するシステムはうまく機能します。両方の場所でドメインロジックを混在させるシステムは、私をバカにするでしょう。新しい行動をどこに置けばいいのかわかりません。古い行動がどこにあるかわかりません。

それでも判断できない場合は、コインを投げて、特定のプロジェクトの福音としてその判断を下します。私が知る限り、コインは他の誰と同じように何が最良かを知っています。


1
あなたの答えは、OPによってリンクされた記事を調べなかったように思われます(著者が正しいか間違っていると言っているわけではありません)が、その記事で説明されている見解に同意または異なる点を教えていただけますか?
ドクブラウン

@DocBrown私もそれを読んでいませんが、この答えは私が完全に同意するところでとにかく良いものです。また、引用された記事ではなく、OPの質問(最後の文)を扱います。
qwerty_so 2016年

@DocBrown 記事が引用するUncle Bobの記事を読んだと思いません:「プラグインアーキテクチャは非常に堅牢です。安定した高価値のビジネスルールは、ユーザーインターフェイスやデータベースなどの揮発性の低価値モジュールに依存しないためです。」ボブおじさんは私よりもこの考えに対して強い見方をしています。この記事は、ボブの記事から抜粋したもので、ボブが自分の言っていないことを言っているように見えます。
candied_orange 2016年

2

ビジネス層でそれを解決することは、実際のパフォーマンスのキラーであるだろうというケースがありました。

私たちのアプリケーションOOセキュリティの概念は、役割とグループで構成されています。そして、どちらも再帰的な構造です。ドメインオブジェクトに対するユーザーのアクセス許可を解決するストアドプロシージャを作成しました。

データベースロジックにフォールバックする必要性が本当に少なくなります。しかし、この場合、私はそうすることにしました。しかし、常に考慮しなければならないこと:抽象化をあきらめること。データベースにビジネスロジックがあるとすぐに、永続化レイヤーを変更するのに苦労します。非常に注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.