我正在尝试找出保存我的域更改的最佳位置。我有以下实体:
public class Period
{
public Guid PeriodId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
Trade
{
public Guid TradeId { get; set; }
Trader Instigator { get; set; }
Trader Acceptor { get; set; }
Period period { get; set; }
public long Volume { get; set; }
public decimal Price { get; set; }
}现在,为了创建一个新的交易,我已经将其卸载到一个域服务
tradeService.PlaceTrade(Guid periodId, Guid UserId, decimal price. long volume)place交易功能似乎很适合上面的域服务,交易服务持久化交易。为了方便起见,我传入了一个ITradeRepository类。
要接受交易,我希望具有以下内容,以便交易的域逻辑位于交易实体中。
Trade trade = tradeRepository.Get(Guid tradeId)
TradeStatus = trade.Accept(userId);上面的问题是,交易实体负责持久化数据,因此依赖于ITradeRepository。
这是正确的做法吗?感觉很脏?或者更好的方法是为交易类创建一个扩展方法,以促进接受交易的相同功能?
有什么想法吗?谢谢
发布于 2012-05-24 19:38:19
这些实体不应该知道任何关于存储库的信息。因此,交易应该接受用户id,并设置其内部状态来反映它。但随后服务或控制器应将交易添加或保存到存储库。将交易保存到存储库,然后一次性持久化实体(可能还有许多交易聚合的子实体)。
发布于 2012-05-25 18:09:08
正如Jack Hughes所说,实体不应该依赖于它们的存储库。另外,我不明白为什么你需要一个“服务”来获得你的交易实体?这是存储库的责任。也不确定为什么要将对交易对象的引用传递给get方法?
下面是我编写代码的方式:
//This is an application service method
public void AcceptTrade(Guid tradeId, Guid acceptingTraderId)
{
using (IUnitOfWork unitOfWork = UnitOfWorkFactory.Create())
{
Trade trade = _tradeRepository.GetById(tradeId);
Trader acceptingTrader = _traderRepository.GetById(acceptingTraderId);
trade.Accept(acceptingTrader);
_tradeRepository.Save(trade);
}
}https://stackoverflow.com/questions/10736590
复制相似问题