0

マイクロソフトの開発環境では、つまり。.net、c#、SQL サーバー、エンティティ フレームワークなど: ビジネス要件により、基礎となるデータベース内のテーブルにテーブルと列が頻繁に追加されるアプリケーションに最適な設計は何ですか。

このコンテキストで ORM/Entity フレームワークを使用する際の問題は、モデルを更新し、アプリケーションを再コンパイルして再デプロイする必要があることです。追加されたこれらの新しい列に必要なデータ検証が単純なものから複雑なものまである場合、これは面倒な場合があります。コードを適切な場所に慎重に書くことも必要です。

ORM の機能を使用して、些細なことごとに SP を作成するのではなく、簡単で効率的な方法があるかどうかを見つけようとしています。


同じ質問のパート2:

これらのテーブル (またはデータベース全体) を使用したいことを ORM に伝えることができず、実行時にクラスを生成できないのはなぜですか。そのため、物事が強く型付けされないことはわかっています。最大の欠点は、設計時/コンパイル時のエラーが強く型付けされた設計ほど発生しないことであり、バグの少ないコードを書く必要があります (または、少なくともそのために多くの時間を節約できます)。

しかし、これにより、少なくとも次の問題が解決されます。

  • データベースからすべての列をフェッチします(新しい列を含む)
  • 小さな変更のため、コンパイル、デプロイする必要はありません

ORM を使用して優れた設計を実装する簡単な方法や、この設計を容易にする方法があれば、私に知らせてください。提案は高く評価されます。

4

2 に答える 2

4

あなたが示唆するように、データベーススキーマを頻繁に拡大することは、メンテナンスの悪夢につながります。代わりに、垂直アプローチを検討してください。たとえば、各新しいレコードがそのエンティティの新しいプロパティを表すスキーマ マッピング テーブルを想定します。新しいプロパティ (本質的には、水平テーブル構造の新しい列) が必要な場合はいつでも、単純に新しいレコードとして作成されます。

PropertyID(PK)      PropertyName
1                   ID
2                   Name
3                   Description
4                   LastModDate

2 番目のテーブルには、エンティティ インスタンス レコードが保持されます。

InstanceID      PropertyID(FK)  PropertyValue
1               1               1
1               2               Target Field
1               3               Minnesota Twins baseball stadium
1               4               1/15/2013 12:00:00 PM

C# モデルは、エンティティのインスタンスを表す汎用プロパティ オブジェクトのリストを保持します。特定のエンティティのプロパティとその値のリストは、実行時にエンティティのインスタンス レコードから取り込まれます。

public class EntityInstance
{
    public int InstanceID { get; set; }
    public List<InstanceProperty> Properties { get; set; }
}

public class InstanceProperty
{
    public int PropertyID { get; set; }
    public string PropertyName { get; set; }
    public object PropertyValue { get; set; }
}

このアプローチにより、エンティティを絶えず再生成したり、さらに悪いことに、エンティティを使用するために毎回マネージド コードに特定の新しいプロパティを追加したりすることなく、データ モデル スキーマを拡張できます。

当社は、膨大な製品ラインに高度に構成可能なルール エンジンを実装することに成功し、会社全体で使用されるいくつかの独立したアプリケーションのオプション、ワークフロー、および動作を駆動します。上記の例は少し陳腐ですが、ポイントを示唆するのに役立ちます。

繰り返しになりますが、「水平」ではなく「垂直」に考えることが重要です。

于 2013-01-16T05:55:29.480 に答える
-1

このような環境では、各テーブルを独立した状態に保つようにしてください。つまり、テーブル間に多くの関係がありません。私たちも同じ問題に直面しており、このためにアジャイルの方法論に従っています。このリンクは、 アジャイルに変化をもたらすのに役立ちます

于 2013-01-16T05:55:33.740 に答える