2013-05-22 7 views
6

エンティティフレームワークを使用して、ASP.Netでホテル登録/請求アプリケーションを開発しています。登録者のための請求書を作成することになると、私のクライアントは多くの不気味な基準を持っています。 1泊あたりのベッド数(かなり標準的な)の代わりに、顧客は年齢、訪問した特定の日付、部屋のタイプ(ダブルベッド、シングルベッドなど)に基づいて別の金額を請求することができます会議彼らは ロバスト課金システム設計。私は完全に間違った方向に行っていますか?

は、ここに私の図だ...参加、または4つのすべてのしていること:私はどこかに「ルール」テーブルに沿って、何かが欠けてるよう http://s8.postimg.org/w8nxh8qlh/abstraction.jpg

比較的若いコーダである、私は感じています。私がしようとしているのは、管理者が任意の数のConditionalStatements( "Age> 5"または "Age < 10"、 "Age"はStatement.Value、「>」はCondition.Value、 '5'はConditionalStatement.Valueです)、それらの任意の数をリンクして、「ルール」を作成します。私は正しい軌道に乗ってるように感じる、と...

を管理者は、その後、様々なRateSchedulesとルールを関連付けるだろう、とアプリケーションは、滞在のために登録しているすべての顧客のための法案を生成する能力を有することこのソリューションの大部分は私が必要とするあらゆる方法で動作するが、何かが正しいとは思わない。私は "ルール"の作成に関する2つの質問があります。

  • "ルール"の設計については、私は間違っていますか?それは が新しいRuleSet.IDを生成していると間違っていると感じます。 は新しいルールを作成したいと考えています。 をプログラムで実行する必要がありますか?私はこのルールプロセスを完全に再考すべきでしょうか?

  • Entity Framework /スキャフォールディングの観点から、新しいルールをdbに追加するにはどうすればよいでしょうか?デフォルトの足場は私が一度に1つの行を挿入することができますが、実際にルールを作成するには、RuleSet.IDを複数のConditionalStatement.IDsに関連付ける必要がありますが、EFでこれを直感的に行う方法を見つけることはできません足場。

正しい方向のポインタは非常に高く評価されています!感謝:)

EDIT: 私は私の質問への回答に基づいて再設計巻き上げますが、研究中に、Microsoftのビジネスルールエンジンに出くわし:念のために http://ncalc.codeplex.com/http://msdn.microsoft.com/en-us/library/aa561216.aspx とも数式エバリュエータ今後誰かがこの質問を見つけ、これらのリンクが役立ちます。すべての助けを借りてくれてありがとう!

+1

SQLのテーブルを介してDSL/ASTを定義すると、常にheebie jeebiesという強力なケースが得られます。 –

+0

EFスカッフォールディングを使用して、外部キーを設定せずに複雑なエントリセットを作成できます。代わりにナビゲーションプロパティを使用してください。子オブジェクトを親オブジェクトのナビゲーションプロパティコレクションに追加します。変更をDBコンテキストに保存すると、すべての外部キーがEFによって自動的に解決されます。 –

答えて

-1

DBでドメインをモデリングすることは、通常悪い方法です。 DBはディテールでなければならず、すべてのロジックがコード内になければなりません。これを行うには、クライアントからの要件を把握し、その上にドメインを作成する設計を行う必要があります。この段階でそれらを永続させることは非常に簡単です。

たとえば、PricingRule抽象クラスと、AgePricingRule、DatePricingRule、RoomTypePricingRuleなどのさまざまな実装を想像してみてください。その後、BillオブジェクトはPricingRulesを取得して適用し、最終的な価格を取得することができます。

保存する必要のあるデータの複雑さは、値引きルールの一部の設定にすぎません。

+0

これは古い質問ですが、いいえいいえいいえいいえ!ドメインは、データベースをまとめて保持する接着剤です。データベースは、後で作業する詳細ではありません。関係はドメインで定義されます。このようなシナリオでは、適切なリレーショナル・モデリングがさらに重要です。 –

関連する問題