【发布时间】:2013-06-29 00:28:58
【问题描述】:
考虑这段代码:
public void AddPrice(int exchangeTypeId, decimal price)
{
GoldPrice lastPriceValue = UnitOfWork.GoldPrice.Last(x => x.GoldId == exchangeTypeId);
if (lastPriceValue == null || lastPriceValue.Value != price)
{
UnitOfWork.GoldPrice.Add(
new GoldPrice
{
Id = Guid.NewGuid().ToString(),
EntryDate = DateTime.Now,
Value = price,
GoldId = exchangeTypeId,
}
);
}
else
{
lastPriceValue.EntryDate = DateTime.Now;
}
UnitOfWork.Commit();
}
在上面的代码中,我有一些业务,例如检查 null、获取最后价格和....所以考虑一下:
public void AddPrice(int exchangeTypeId, decimal price)
{
CurrencyPrice lastPriceValue = UnitOfWork.CurrencyPrice.Last(x => x.CurrencyId == exchangeTypeId);
if (lastPriceValue == null || lastPriceValue.Value != price)
{
UnitOfWork.CurrencyPrice.Add(
new CurrencyPrice
{
Id = Guid.NewGuid().ToString(),
EntryDate = DateTime.Now,
Value = price,
CurrencyId = exchangeTypeId,
}
);
}
else
{
lastPriceValue.EntryDate = DateTime.Now;
}
UnitOfWork.Commit();
}
我有两个具有完全相同业务的函数。如果业务发生变化,我应该更改每个添加价格函数那么我如何才能遵循 DRY 业务代码原则?
【问题讨论】:
-
GoldPrice 和 CurrencyPrice 是继承自一个共同的祖先还是实现相同的接口?
-
Jefri,我不是要你改变他们的定义,只是要检查他们是否有共同的祖先(F12 是你的朋友;))