0

我正在开发一个应用程序,其中员工有一个要执行的任务列表。对于每项任务,他们都会使用一些项目。例如:一名机械师正在修车,必须更换保险杠换新的,所以机械师去仓库拿了一个新物品。该特定项目具有单价。因此,当这个人拿起他的固定汽车时,他会为保险杠支付特定的价格。但是,假设价格在几周后发生了变化。所以我改变了那个项目的单价。但在这项任务的历史上,它仍然必须是旧价格。

我想知道有什么方法可以最好地保留这个历史。我正在考虑在更改价格之前复制该特定项目,然后使用旧价格的项目更新任务。之后,我将使用新价格更新商品。

或者有没有其他方法可以实现这一目标?我正在使用 Fluent NHibernate 来处理我的数据库

假设这些是我的课程(对于示例来说有点简单,足够了)

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

In case of invoicing (which seems to be the use-case here) 'always' copy the current price to the invoice-line on creation.

Updating the prices should only be done on the actual pricelist. Saves you a lot of trouble on keeping track of prices & history.

Keeping a history on the actual pricelist is still an idea (auditing for example) but it shouldn't be used to create an invoice and asking/query the history for: [what was the actual price of the item on that particular date]

于 2013-01-12T16:12:38.823 回答
1

有两种基本策略:

  1. 使用历史记录,例如价格表上的scd-2实现。
  2. 将所有字段复制Item到单独的表/类(例如ItemInTask)中,该表/类捕获创建任务时使用的确切单元数据。
于 2013-01-12T16:05:57.387 回答