2

特定のデータベース行を ID で参照するか、コードから参照するか、データベース内のクラス名を指定することを意味します。例:

というデータベース テーブルがありますSocialNetwork。ルックアップテーブルです。アプリケーションは、書き込み、書き込み、または削除を行いません。主にデータベースの整合性のために存在します。シバン全体が次のようになっているとしましょう。

SocialNetwork table:

Id | Description
-----------------------------
1  | Facebook
2  | Twitter

SocialNetworkUserName table:

Id | SocialNetworkId | Name
---------------------------------------------------
1  | 2               | @seanssean
2  | 1               | SeanM

コードには、Facebook ユーザーに対して実行する必要がある特別なロジックがいくつかあります。私が通常行うことは、コード内で列挙型またはいくつかのクラス定数を作成して、次のように簡単に参照できるようにすることです。

if (socailNetwork.Id == SocialNetwork.FACEBOOK ) // SocialNetwork.FACEBOOK = 1
  // special facebook-specific functionality here

これは、ハードコードされたデータベース ID です。ルックアップテーブルを参照しているだけなので大した犯罪ではありませんが、データとロジックが明確に分かれていないのが気になります。

私が考えることができる他のオプションは、データベース内のクラスまたはデリゲートの名前を指定することですが、データとロジックの間の分割を壊しただけでなく、データとロジックの分割を壊したため、IMO はさらに悪いことです。今の言語。

私は何もないことを大騒ぎしていますか?

4

2 に答える 2

1

ええ、ただし「場合による」という警告があります。変わりそうにありませんが。

クラスまたはデリゲートの名前を保存することはおそらく悪いことですが、クラスまたはデリゲートファクトリで使用されるトークンを保存することは言語に中立であるため、そうではありませそのテーブルに関連付けられた言語固有のもののテーブルがない限り、その時点であなたは撃たれると思います。

メインライン コードで一定の比較を維持するのではなく、IMO この種の状況は工場などに適しています。パターン、列挙ルックアップなどを使用して、ネットワーク固有のクラス ルックアップ/動作を実装します。主流のコードは、それがどのように実装されているかを気にする必要はありませ.

最終的には問題にならない可能性があることに注意してください。もしそれが私だったら、少なくともメインライン コードを分離するでしょう。

于 2011-10-06T16:33:03.910 に答える
1

問題がわかりません。

ある時点で、コードで何かを行う必要があります。Facebook は、独自の実際の API を備えた実際のソーシャル ネットワークであり、コード内で Facebook 固有の処理を行う必要があります。些細なタスクでない限り、Facebook 固有のものをすべてデータベースに入れることは、コードの頭痛の種になるでしょう。(たとえば、Twitter の「いいね」に相当するものは何ですか?)

Facebook エントリがデータベースにない場合、Facebook 固有のコードは実行されません。それくらいできる。

于 2011-10-06T16:35:03.507 に答える