0

私は、従業員が実行するタスクのリストを持っているアプリケーションを開発しています。そして、タスクごとに、彼らはいくつかのアイテムを使用しています。例:整備士が車の作業をしていて、バンパーを新しいものに交換する必要があるため、整備士は倉庫に行き、新しいアイテムを受け取ります。その特定のアイテムには単価があります。したがって、男が固定車を手に取るとき、彼はバンパーにその特定の価格を支払います。しかし、数週間後に価格が変更されているとしましょう。そこで、その商品の単価を変更します。しかし、そのタスクの歴史では、それはまだ古い価格でなければなりません。

私はあなたがこれのために歴史を最もよく保つことができる方法が何であるか疑問に思いました。価格を変更する前にその特定のアイテムをコピーしてから、古い価格のアイテムでタスクを更新することを考えていました。その後、新しい価格でアイテムの更新を行います。

または、これを達成する他の方法はありますか?私はFluentNHibernateを使用してデータベースを管理しています

これらが私のクラスだとしましょう(少し単純化されており、例としては十分です)

public class Task
{
  public virtual int Id;
  public virtual string Description;
  public virtual IList<Item> Items;
}

public class Item
{
  public virtual int Id;
  public virtual string ItemName;
  public virtual decimal UnitPrice;
}

どんな助けでも歓迎します:)

4

2 に答える 2

1

これには2つの基本的な戦略があります。

  1. 価格表のscd-2実装のように、履歴レコードを使用します。
  2. Itemからのすべてのフィールドを別のテーブル/クラス(例)にコピーします。このテーブル/クラスItemInTaskは、タスクの作成時に使用された正確なユニットデータをキャプチャします。
于 2013-01-12T16:05:57.387 に答える
1

請求の場合(ここではユースケースのようです)、「常に」作成時に現在の価格を請求書にコピーします。

価格の更新は、実際の価格表でのみ行う必要があります。価格と履歴を追跡する際の多くの手間を省きます。

実際の価格表に履歴を保持することはまだアイデアですが(たとえば監査)、請求書を作成したり、履歴を尋ねたり照会したりするために使用しないでください:[その特定の日付のアイテムの実際の価格は何でしたか]

于 2013-01-12T16:12:38.823 に答える