ベストプラクティス-メタデータと機能定義データを混在させる必要がありますか?
-
03-07-2019 - |
質問
「ステータス」のDBテーブル列がある単純なニュース記事Webアプリケーションの場合を検討してください。次のラジオボタンセットからアクセスできます。
ステータス-[x]公開[]ドラフト[]アーカイブ
... where" Publish&quot ;;は記事を公開し、「ドラフト」を表示します。および「アーカイブ」しない。機能的に「ドラフト」および「アーカイブ」同じことを行いますが、追加のメタデータの意味を伝えます。 「show」の2つの機能状態および「非表示」 「公開」、「下書き」のメタデータとともにおよび「アーカイブ」 " status"の同じ列に混在しています。
これは良い習慣ですか?これは非常に単純なケースですが、より大きなケースでは、このようなプラクティスの欠陥が明らかになる可能性があります(またはそうではありません)。
解決
機能状態は動作に関するものです-データベースでモデル化する必要はありません。ビジネスロジックが「表示」のみを重視する場合ステータスが「公開済み」の記事-表示列でデータの複雑さを2倍にする理由はありません。
ビジネスロジックで記事を表示するか非表示にするか(おそらくIsApprovedフラグ)を決定するために追加のデータが必要になると判断した時点で、そのデータを保存できます。
別の角度から見る-「表示」の別の列を追加する場合、「ドラフト」のステータスの記事はどうなるでしょうか。および「表示」 = 1ですか?ビジネスルールによると、それは無効な状態です。
他のヒント
この例では、これが適切な機能であると言えます。
メディアで誰かが誤ってショーにヒットしたWTFを見てきました[x] ドラフト[x]を同時に。
現状では、誤って下書きを表示することはできません。記者は次のようなもので悪名高いため、これは新聞では重要です。
StackOverflowのJohn Doe氏は次のように述べています。「---あのいf * ckerが言ったことを思い出せません-テープを確認して後で記入してください」
おそらく、印刷すべきではありません。