Model view controller 存储库模式问题
我在下面有两个存储库类, MoneyTransferRepository类由我的项目中的其他类使用。我是这样设计的,对吗?如果没有,最好的方法是什么 谢谢Model view controller 存储库模式问题,model-view-controller,repository,Model View Controller,Repository,我在下面有两个存储库类, MoneyTransferRepository类由我的项目中的其他类使用。我是这样设计的,对吗?如果没有,最好的方法是什么 谢谢 public interface IMoneyTransferRepository { void UpdateBalance(); } public interface IOrderRepository { void Checkout(); void SaveOrder(); } public class Mone
public interface IMoneyTransferRepository
{
void UpdateBalance();
}
public interface IOrderRepository
{
void Checkout();
void SaveOrder();
}
public class MoneyTransferRepository : IMoneyTransferRepository
{
DBDataContext DB;
public MoneyTransferRepository(IDbConnection connection)
{
DB = new DBDataContext(connection);
}
public void UpdateBalance()
{
//do something DB.Table1.Update
}
}
public class OrderRepository : IOrderRepository,IMoneyTransferRepository
{
DBDataContext DB;
IMoneyTransferRepository moneyTransferRepository;
public OrderRepository()
{
DB = new DBDataContext();
moneyTransferRepository = new MoneyTransferRepository(DB.Connection);
}
public void Checkout()
{
TransactionOptions transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
try
{
UpdateBalance();
SaveOrder();
transactionScope.Complete();
}
catch
{
}
}
}
public void UpdateBalance()
{
moneyTransferRepository.UpdateBalance();
}
public void SaveOrder()
{
//do something DB.SaveOrder.Update ......
// DB.Updatestock .....
}
}
这绝对不是存储库模式的正确用法。我发现思考存储库最简单的方法是想象系统中的每个订单都可以在一个大集合(存储库)中使用。也就是说,您可能希望添加一种从存储库中查询特定对象的方法(通过查询模式或直接方法调用) 在我们的系统中,我们将有一个名为Checkout的服务层方法,看起来像这样 public void Checkout(int customerId) { if(CustomerHasOpenOrder(customerId) == false) { // do something depending on your standards. For us we'd // throw an exception } Order orderToCheckout = m_OrderRepository.FindOpenOrderForCustomer(customerId); orderToCheckout.Checkout(); m_OrderRepository.Save(orderToCheckout); } 公共无效签出(int customerId) { if(CustomerHasOpenOrder(customerId)==false) { //根据你的标准做点什么。对我们来说 //抛出异常 } Order orderToCheckout=m_OrderRepository.findopenderForCustomer(customerId); orderToCheckout.Checkout(); m_OrderRepository.Save(orderToCheckout); }
在我们的系统中,我们实际上不使用int来标识订单,但您可以理解…不要在存储库中进行事务管理。这就是你感到困惑的原因 更多信息请点击此处: