よって最初に読み取られたものと等しい場 合にのみ、カウンタの値を更新する。 public class LogVisit { … public void Execute(Guid userId, long expectedVisits) { _db.Execute(@"UPDATE Users SET visits=visits+1 WHERE user_id=@p1 and visits=@p2", userId, visits); } } Implicit distributed transactions
or view, encapsulates the database access, and adds domain logic on that data. -Martin Fowler データベースのテーブルやビューの行をラップし、データベースへのアクセスをカプセル 化し、そのデータにドメインロジックを追加するオブジェクト。
エージェントのアクティブチケットのカウンター を1つ増やすことができるが、そのエージェントには 新しいチケットが割り当てられない c. エージェントが新しいチケットを取得しても、そ れについて通知されない d. 上記のような問題はすべて考えられる public void CreateTicket(TicketDate data) { var agent = FindLeastBusyAgent(); agent.ActiveTickets = agent.ActiveTickets + 1; agent.Save(); var ticket = new Ticket(); ticket.Id = Guid.New(); ticket.Data = data; ticket.AssinedAgent = agent; ticket.Save(); _alerts.Send(agent, "You have a new ticket!"); }
エージェントのアクティブチケットのカウンター を1つ増やすことができるが、そのエージェントには 新しいチケットが割り当てられない c. エージェントが新しいチケットを取得しても、そ れについて通知されない d. 上記のような問題はすべて考えられる public void CreateTicket(TicketDate data) { var agent = FindLeastBusyAgent(); agent.ActiveTickets = agent.ActiveTickets + 1; agent.Save(); var ticket = new Ticket(); ticket.Id = Guid.New(); ticket.Data = data; ticket.AssinedAgent = agent; ticket.Save(); _alerts.Send(agent, "You have a new ticket!"); }