gitextract_uu88b_d3/ ├── .gitattributes ├── .gitignore ├── 05 - Domain Model Implementation Patterns/ │ ├── PPPDDDChap05.DomainModel/ │ │ ├── PPPDDDChap05.DomainModel/ │ │ │ ├── Application/ │ │ │ │ └── BidOnAuctionService.cs │ │ │ ├── Model/ │ │ │ │ ├── Auction.cs │ │ │ │ ├── Bid.cs │ │ │ │ ├── ClassDiagram.cd │ │ │ │ ├── HistoricalBid.cs │ │ │ │ ├── IAuctionRepository.cs │ │ │ │ ├── Money.cs │ │ │ │ ├── Price.cs │ │ │ │ └── WinningBid.cs │ │ │ ├── PPPDDDChap05.DomainModel.csproj │ │ │ └── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── PPPDDDChap05.DomainModel.sln │ ├── PPPDDDChap05.TableModule/ │ │ ├── PPPDDDChap05.TableModule/ │ │ │ ├── Domain/ │ │ │ │ ├── Customers.cs │ │ │ │ ├── Orders.cs │ │ │ │ └── TableModuleBase.cs │ │ │ ├── PPPDDDChap05.TableModule.csproj │ │ │ └── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── PPPDDDChap05.TableModule.sln │ └── PPPDDDChap05.TransactionScript/ │ ├── PPPDDDChap05.TransactionScript/ │ │ ├── Application/ │ │ │ └── BidOnAuctionService.cs │ │ ├── Domain/ │ │ │ ├── Auction.cs │ │ │ ├── BidOnAuction.cs │ │ │ ├── BidOnAuctionCommand.cs │ │ │ ├── ClassDiagram1.cd │ │ │ ├── CreateAuction.cs │ │ │ └── ICommand.cs │ │ ├── PPPDDDChap05.TransactionScript.csproj │ │ └── Properties/ │ │ └── AssemblyInfo.cs │ └── PPPDDDChap05.TransactionScript.sln ├── 10 - Applying the Principles, Practices and Patterns of DDD/ │ └── PPPDDD.Chap10.ecommerce/ │ ├── PPPDDD.Chap10.ecommerce/ │ │ ├── ExplicitLogic/ │ │ │ └── Model/ │ │ │ ├── BasketItem.cs │ │ │ ├── BasketItemFactory.cs │ │ │ ├── BasketItems.cs │ │ │ ├── Country.cs │ │ │ ├── OverSeasSellingPolicyException.cs │ │ │ ├── OverseasSellingPolicy.cs │ │ │ ├── Product.cs │ │ │ ├── Quantity.cs │ │ │ └── basket.cs │ │ ├── ImplicitLogic/ │ │ │ └── Model/ │ │ │ ├── BasketItem.cs │ │ │ ├── BasketItemFactory.cs │ │ │ ├── BasketItems.cs │ │ │ ├── Product.cs │ │ │ ├── Quantity.cs │ │ │ └── basket.cs │ │ ├── PPPDDD.Chap10.ecommerce.csproj │ │ └── Properties/ │ │ └── AssemblyInfo.cs │ └── PPPDDD.Chap10.ecommerce.sln ├── 11 - Integrating Bounded Contexts/ │ └── README.md ├── 12 - Integrating Via Messaging/ │ ├── Billing.Messages/ │ │ ├── Billing.Messages.csproj │ │ ├── Commands/ │ │ │ └── RecordPaymentAttempt.cs │ │ ├── Events/ │ │ │ └── PaymentAccepted.cs │ │ └── Properties/ │ │ └── AssemblyInfo.cs │ ├── Billing.Payments.PaymentAccepted/ │ │ ├── App.config │ │ ├── Billing.Payments.PaymentAccepted.csproj │ │ ├── EndpointConfig.cs │ │ ├── OrderCreatedHandler.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── RecordPaymentAttemptHandler.cs │ │ └── packages.config │ ├── DDDesign.Web/ │ │ ├── App_Start/ │ │ │ ├── FilterConfig.cs │ │ │ ├── RouteConfig.cs │ │ │ └── WebApiConfig.cs │ │ ├── Controllers/ │ │ │ └── OrdersController.cs │ │ ├── DDDesign.Web.csproj │ │ ├── Global.asax │ │ ├── Global.asax.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Views/ │ │ │ ├── Orders/ │ │ │ │ └── Index.cshtml │ │ │ └── Web.config │ │ ├── Web.Debug.config │ │ ├── Web.Release.config │ │ ├── Web.config │ │ └── packages.config │ ├── DDDesign.sln │ ├── Promotions.LuckyWinner.LuckyWinnerSelected/ │ │ ├── App.config │ │ ├── Application/ │ │ │ └── Program.cs │ │ ├── Promotions.LuckyWinner.LuckyWinnerSelected.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── packages.config │ ├── Promotions.LuckyWinner.LuckyWinnerSelected.Bridge/ │ │ ├── App.config │ │ ├── Application/ │ │ │ └── OrderCreatedHandler.cs │ │ ├── Infrastructure/ │ │ │ └── EndpointConfig.cs │ │ ├── Promotions.LuckyWinner.LuckyWinnerSelected.Bridge.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── packages.config │ ├── README.md │ ├── Sales.Messages/ │ │ ├── Commands/ │ │ │ └── PlaceOrder.cs │ │ ├── Events/ │ │ │ ├── OrderCreated.cs │ │ │ └── OrderCreated_V2.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── Sales.Messages.csproj │ ├── Sales.Orders.OrderCreated/ │ │ ├── App.config │ │ ├── Application/ │ │ │ └── PlaceOrderHandler.cs │ │ ├── Infrastructure/ │ │ │ └── EndpointConfig.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Sales.Orders.OrderCreated.csproj │ │ └── packages.config │ ├── Shipping.BusinessCustomers.ShippingArranged/ │ │ ├── App.config │ │ ├── Application/ │ │ │ └── Handlers.cs │ │ ├── Infrastructure/ │ │ │ └── EndpointConfig.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Shipping.BusinessCustomers.ShippingArranged.csproj │ │ └── packages.config │ └── Shipping.Messages/ │ ├── Events/ │ │ └── ShippingArranged.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ └── Shipping.Messages.csproj ├── 13 - Integrating Via Http and Rest/ │ ├── PPPDDD.JSON.SocialMedia/ │ │ ├── AccountManagement/ │ │ │ ├── AccountManagement.csproj │ │ │ ├── App_Start/ │ │ │ │ └── WebApiConfig.cs │ │ │ ├── Controllers/ │ │ │ │ └── FollowerDirectoryController.cs │ │ │ ├── Global.asax │ │ │ ├── Global.asax.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ ├── Web.config │ │ │ └── packages.config │ │ ├── Discovery/ │ │ │ ├── App_Start/ │ │ │ │ └── WebApiConfig.cs │ │ │ ├── Controllers/ │ │ │ │ └── RecommenderController.cs │ │ │ ├── Discovery.csproj │ │ │ ├── Global.asax │ │ │ ├── Global.asax.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ ├── Web.config │ │ │ └── packages.config │ │ └── PPPDDD.JSON.SocialMedia.sln │ ├── PPPDDD.REST.SocialMedia/ │ │ ├── .gitignore │ │ ├── AccountManagement.Accounts.Api/ │ │ │ ├── AccountManagement.Accounts.Api.csproj │ │ │ ├── App_Start/ │ │ │ │ └── WebApiConfig.cs │ │ │ ├── Controllers/ │ │ │ │ ├── AccountsController.cs │ │ │ │ └── FollowersController.cs │ │ │ ├── Global.asax │ │ │ ├── Global.asax.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ ├── Web.config │ │ │ └── packages.config │ │ ├── AccountManagement.EntryPoint/ │ │ │ ├── .gitignore │ │ │ ├── AccountManagement.EntryPoint.Api.csproj │ │ │ ├── App_Start/ │ │ │ │ └── WebApiConfig.cs │ │ │ ├── Controllers/ │ │ │ │ └── EntryPointController.cs │ │ │ ├── Global.asax │ │ │ ├── Global.asax.cs │ │ │ ├── MIT-LICENSE.txt │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── README.md │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ ├── Web.config │ │ │ ├── browser.html │ │ │ ├── js/ │ │ │ │ ├── hal/ │ │ │ │ │ ├── browser.js │ │ │ │ │ ├── http/ │ │ │ │ │ │ └── client.js │ │ │ │ │ ├── resource.js │ │ │ │ │ └── views/ │ │ │ │ │ ├── browser.js │ │ │ │ │ ├── documentation.js │ │ │ │ │ ├── embedded_resource.js │ │ │ │ │ ├── embedded_resources.js │ │ │ │ │ ├── explorer.js │ │ │ │ │ ├── inspector.js │ │ │ │ │ ├── links.js │ │ │ │ │ ├── location_bar.js │ │ │ │ │ ├── navigation.js │ │ │ │ │ ├── non_safe_request_dialog.js │ │ │ │ │ ├── properties.js │ │ │ │ │ ├── query_uri_dialog.js │ │ │ │ │ ├── request_headers.js │ │ │ │ │ ├── resource.js │ │ │ │ │ ├── response.js │ │ │ │ │ ├── response_body.js │ │ │ │ │ └── response_headers.js │ │ │ │ └── hal.js │ │ │ ├── packages.config │ │ │ ├── styles.css │ │ │ └── vendor/ │ │ │ ├── css/ │ │ │ │ ├── bootstrap-responsive.css │ │ │ │ └── bootstrap.css │ │ │ └── js/ │ │ │ ├── backbone.js │ │ │ ├── bootstrap.js │ │ │ ├── jquery-1.10.2.js │ │ │ ├── underscore.js │ │ │ └── uritemplates.js │ │ ├── AccountManagement.RegularAccounts.BeganFollowing/ │ │ │ ├── AccountManagement.RegularAccounts.BeganFollowing.csproj │ │ │ ├── App_Start/ │ │ │ │ ├── EnableCorsAttribute.cs │ │ │ │ └── WebApiConfig.cs │ │ │ ├── Controllers/ │ │ │ │ └── BeganFollowingController.cs │ │ │ ├── Global.asax │ │ │ ├── Global.asax.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ ├── Web.config │ │ │ └── packages.config │ │ ├── Discovery.Reccommendations.Followers/ │ │ │ ├── BeganFollowingPollingFeedConsumer.cs │ │ │ ├── Discovery.Reccommendations.Followers.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ └── PPPDDD.REST.SocialMedia.sln │ ├── PPPDDD.SOAP.SocialMedia/ │ │ ├── AccountManagement/ │ │ │ ├── AccountManagement.csproj │ │ │ ├── FollowerDirectory.svc │ │ │ ├── FollowerDirectory.svc.cs │ │ │ ├── IFollowerDirectory.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ └── Web.config │ │ ├── Discovery/ │ │ │ ├── Discovery.csproj │ │ │ ├── IRecommender.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Recommender.svc │ │ │ ├── Recommender.svc.cs │ │ │ ├── Service References/ │ │ │ │ └── AccountManagement/ │ │ │ │ ├── Discovery.AccountManagement.Follower.datasource │ │ │ │ ├── FollowerDirectory.disco │ │ │ │ ├── FollowerDirectory.wsdl │ │ │ │ ├── FollowerDirectory.xsd │ │ │ │ ├── FollowerDirectory1.xsd │ │ │ │ ├── FollowerDirectory2.xsd │ │ │ │ ├── FollowerDirectory3.xsd │ │ │ │ ├── Reference.cs │ │ │ │ ├── Reference.svcmap │ │ │ │ ├── configuration.svcinfo │ │ │ │ └── configuration91.svcinfo │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ └── Web.config │ │ └── PPPDDD.SOAP.SocialMedia.sln │ └── README.md ├── 14 - Introducing Domain Modelling Patterns and Best Practices/ │ └── README.md ├── 15 - Value Objects/ │ ├── Examples/ │ │ ├── BankAccount/ │ │ │ └── BankAccount.cs │ │ ├── Examples.csproj │ │ ├── Model/ │ │ │ ├── BankAccount.cs │ │ │ ├── Customer.cs │ │ │ ├── Meters.cs │ │ │ ├── MicroTypes.cs │ │ │ ├── Money.cs │ │ │ ├── Name.cs │ │ │ └── ValueObject.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── app.config │ │ └── packages.config │ ├── PPPDDD.Chap16.ValueObjects.sln │ ├── README.md │ └── Tests/ │ ├── Tests/ │ │ ├── Combining_money_tests.cs │ │ ├── DateTime_immutability_tests.cs │ │ ├── Denormalized_persistence_example.cs │ │ ├── Meters_equality_tests.cs │ │ ├── Micro_types_example_tests.cs │ │ ├── Name_validation_tests.cs │ │ ├── Normalized_persistence_example.cs │ │ ├── Persistence_format_examples.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Tests.csproj │ │ ├── TimeSpan_factory_method_tests.cs │ │ ├── app.config │ │ └── packages.config │ └── Tests.sln ├── 16 - Entities/ │ ├── PPPDDDChap17.Entities.Examples/ │ │ ├── Customer.cs │ │ ├── Model/ │ │ │ ├── Book.cs │ │ │ ├── Dice.cs │ │ │ ├── FlightBooking.cs │ │ │ ├── GlobalCounter.cs │ │ │ ├── HolidayBooking.cs │ │ │ ├── Hotel.cs │ │ │ ├── OnlineTakeawayOrder.cs │ │ │ ├── SoccerMatch.cs │ │ │ └── Vehicle.cs │ │ ├── PPPDDDChap17.Entities.Examples.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── packages.config │ ├── PPPDDDChap17.Entities.Tests/ │ │ ├── BookTests.cs │ │ ├── DatastoreIdGenerationExample.cs │ │ ├── FlightBookingTests.cs │ │ ├── GlobalCounterTest.cs │ │ ├── HolidayBookingTest.cs │ │ ├── HotelTests.cs │ │ ├── PPPDDDChap17.Entities.Tests.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── app.config │ │ └── packages.config │ ├── PPPDDDChap17.Entities.sln │ └── README.md ├── 17 - Domain Services/ │ ├── PPPDDDChap18.DomainServices/ │ │ ├── Insurance/ │ │ │ ├── Application/ │ │ │ │ └── MultiMemberInsurancePremium.cs │ │ │ └── Model/ │ │ │ ├── IMemberRepository.cs │ │ │ ├── IMultiMemberPremiumCalculator.cs │ │ │ ├── IPolicyRepository.cs │ │ │ ├── Member.cs │ │ │ ├── Policy.cs │ │ │ └── Quote.cs │ │ ├── OnlineDating/ │ │ │ └── Model/ │ │ │ ├── BloodType.cs │ │ │ ├── CompatibilityRating.cs │ │ │ ├── LoveSeeker.cs │ │ │ └── RomanceOMeter.cs │ │ ├── OnlineGaming/ │ │ │ ├── WithDomainServices/ │ │ │ │ └── Model/ │ │ │ │ ├── Competitor.cs │ │ │ │ ├── IGame.cs │ │ │ │ ├── IGameRewardPolicy.cs │ │ │ │ ├── IGameScoringPolicy.cs │ │ │ │ ├── IScoreFinder.cs │ │ │ │ ├── OnlineDeathmatch.cs │ │ │ │ ├── Ranking.cs │ │ │ │ └── Score.cs │ │ │ └── WithoutDomainServices/ │ │ │ └── Model/ │ │ │ ├── Competitor.cs │ │ │ ├── OnlineDeathmatch.cs │ │ │ ├── Ranking.cs │ │ │ └── Score.cs │ │ ├── PPPDDDChap18.DomainServices.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── RestaurantBooking/ │ │ │ └── Model/ │ │ │ ├── BookingDetails.cs │ │ │ ├── Customer.cs │ │ │ ├── DomainEvents.cs │ │ │ ├── Events/ │ │ │ │ └── BookingConfirmedByCustomer.cs │ │ │ ├── Handlers/ │ │ │ │ └── NotifyRestaurantOnCustomerBookingConfirmation.cs │ │ │ ├── IHandleEvents.cs │ │ │ ├── Restaurant.cs │ │ │ ├── RestaurantBooking.cs │ │ │ ├── RestaurantBookingFactory.cs │ │ │ ├── RestaurantBookingRepository.cs │ │ │ └── RestaurantNotifier.cs │ │ └── Shipping/ │ │ ├── Application/ │ │ │ └── ShippingRouteFinder.cs │ │ └── Model/ │ │ └── IShippingRouteFinder.cs │ ├── PPPDDDChap18.DomainServices.sln │ └── README.md ├── 18 - Domain Events/ │ ├── .nuget/ │ │ ├── NuGet.Config │ │ └── NuGet.targets │ ├── DomainEvents.OnlineTakeawayStore.sln │ ├── OnlineTakeawayStore.NServiceBus/ │ │ ├── App.config │ │ ├── Application/ │ │ │ ├── ConfirmDeliveryOfOrder.cs │ │ │ └── Events/ │ │ │ └── RefundDueToLateDelivery.cs │ │ ├── Infrastructure/ │ │ │ └── EndpointConfig.cs │ │ ├── Model/ │ │ │ ├── Events/ │ │ │ │ └── DeliveryGuaranteeFailed.cs │ │ │ ├── FoodDeliveryOrderSteps.cs │ │ │ ├── IDeliveryGuaranteeOffer.cs │ │ │ ├── IOrderRepository.cs │ │ │ └── OrderForDelivery.cs │ │ ├── OnlineTakeawayStore.NServiceBus.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── packages.config │ ├── OnlineTakeawayStore.NativeEvents/ │ │ ├── Application/ │ │ │ ├── CofirmDeliveryOfOrder.cs │ │ │ └── Events/ │ │ │ └── RefundDueToLateDelivery.cs │ │ ├── Model/ │ │ │ ├── Events/ │ │ │ │ └── DeliveryGuaranteeFailed.cs │ │ │ ├── FoodDeliveryOrderSteps.cs │ │ │ ├── IDeliveryGuaranteeOffer.cs │ │ │ ├── IOrderRepository.cs │ │ │ └── OrderForDelivery.cs │ │ ├── OnlineTakeawayStore.NativeEvents.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── packages.config │ ├── OnlineTakeawayStore.ReturnEvents/ │ │ ├── Application/ │ │ │ └── ConfirmDeliveryOfOrder.cs │ │ ├── Infrastructure/ │ │ │ └── IEventDispatcher.cs │ │ ├── Model/ │ │ │ ├── Events/ │ │ │ │ └── DeliveryGuaranteeFailed.cs │ │ │ ├── FoodDeliveryOrderSteps.cs │ │ │ ├── IDeliveryGuaranteeOffer.cs │ │ │ ├── IOrderRepository.cs │ │ │ └── OrderForDelivery.cs │ │ ├── OnlineTakeawayStore.ReturnEvents.csproj │ │ └── Properties/ │ │ └── AssemblyInfo.cs │ ├── OnlineTakeawayStore.StaticDomainEvents/ │ │ ├── Application/ │ │ │ ├── ConfirmDeliveryOfOrder.cs │ │ │ └── Events/ │ │ │ └── RefundDueToLateDelivery.cs │ │ ├── Infrastructure/ │ │ │ └── DomainEvents.cs │ │ ├── Model/ │ │ │ ├── Events/ │ │ │ │ └── DeliveryGuaranteeFailed.cs │ │ │ ├── FoodDeliveryOrderSteps.cs │ │ │ ├── IDeliveryGuaranteeOffer.cs │ │ │ ├── IOrderRepository.cs │ │ │ └── OrderForDelivery.cs │ │ ├── OnlineTakeawayStore.StaticDomainEvents.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ └── packages.config │ └── OnlineTakeawayStore.Tests/ │ ├── OnlineTakeawayStore.Tests.csproj │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── ServiceLayerTestExamples/ │ │ └── Delivery_guarantee_failed.cs │ ├── UnitTestExamples/ │ │ ├── ReturnDomainEvents.cs │ │ └── StaticDomainEvents.cs │ └── packages.config ├── 19 - Aggregates/ │ ├── PPPDDDChap19.eBidder/ │ │ ├── PPPDDDChap19.eBidder.Common/ │ │ │ ├── PPPDDDChap19.eBidder.Common.csproj │ │ │ └── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── PPPDDDChap19.eBidder.Disputes/ │ │ │ ├── PPPDDDChap19.eBidder.Disputes.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── _ReadMe.txt │ │ ├── PPPDDDChap19.eBidder.Listings/ │ │ │ ├── Application/ │ │ │ │ ├── Auctions/ │ │ │ │ │ └── BusinessUseCases/ │ │ │ │ │ ├── AuctionCreation.cs │ │ │ │ │ ├── BidOnAuctionService.cs │ │ │ │ │ └── CreateAuctionService.cs │ │ │ │ ├── QandA/ │ │ │ │ │ └── BusinessUseCases/ │ │ │ │ │ ├── Answer.cs │ │ │ │ │ ├── AnswerAQuestionService.cs │ │ │ │ │ └── AskAQuestionService.cs │ │ │ │ └── Watching/ │ │ │ │ └── BusinessUseCases/ │ │ │ │ ├── UnWatchItem.cs │ │ │ │ ├── WatchItem.cs │ │ │ │ └── WatchItemService.cs │ │ │ ├── Infrastructure/ │ │ │ │ ├── DomainEvents.cs │ │ │ │ ├── Entity.cs │ │ │ │ ├── IClock.cs │ │ │ │ ├── SystemClock.cs │ │ │ │ └── ValueObject.cs │ │ │ ├── Model/ │ │ │ │ ├── ListingFormat/ │ │ │ │ │ ├── Auctions/ │ │ │ │ │ │ ├── Auction.cs │ │ │ │ │ │ ├── AuctionId.cs │ │ │ │ │ │ ├── AutomaticBidder.cs │ │ │ │ │ │ ├── BidHistory/ │ │ │ │ │ │ │ ├── Bid.cs │ │ │ │ │ │ │ └── IBidHistoryRepository.cs │ │ │ │ │ │ ├── BidPlaced.cs │ │ │ │ │ │ ├── IAuctionRepository.cs │ │ │ │ │ │ ├── Offer.cs │ │ │ │ │ │ ├── OutBid.cs │ │ │ │ │ │ ├── Price.cs │ │ │ │ │ │ └── WinningBid.cs │ │ │ │ │ └── FixedPriceListings/ │ │ │ │ │ ├── FixedPriceListing.cs │ │ │ │ │ ├── IFixedPriceListingRepository.cs │ │ │ │ │ └── Offers/ │ │ │ │ │ └── BestOffer.cs │ │ │ │ ├── Listings/ │ │ │ │ │ ├── FormatType.cs │ │ │ │ │ ├── IListingRepository.cs │ │ │ │ │ ├── Listing.cs │ │ │ │ │ ├── ListingFormat.cs │ │ │ │ │ ├── ListingRevision.cs │ │ │ │ │ └── ListingRevisionEvent.cs │ │ │ │ ├── Members/ │ │ │ │ │ ├── IMemberService.cs │ │ │ │ │ └── Member.cs │ │ │ │ ├── Money.cs │ │ │ │ ├── MoneyCannotBeANegativeValueException.cs │ │ │ │ ├── MoreThanTwoDecimalPlacesInMoneyValueException.cs │ │ │ │ ├── QandA/ │ │ │ │ │ ├── Answer.cs │ │ │ │ │ ├── IQuestionRepository.cs │ │ │ │ │ ├── Question.cs │ │ │ │ │ ├── QuestionAnswered.cs │ │ │ │ │ └── QuestionSubmitted.cs │ │ │ │ ├── Sellers/ │ │ │ │ │ ├── ISellerService.cs │ │ │ │ │ └── Seller.cs │ │ │ │ └── WatchLists/ │ │ │ │ ├── IWatchedItemRepository.cs │ │ │ │ └── WatchedItem.cs │ │ │ ├── PPPDDDChap19.eBidder.Listings.csproj │ │ │ └── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── PPPDDDChap19.eBidder.Membership/ │ │ │ ├── Model/ │ │ │ │ └── Members/ │ │ │ │ ├── IMemberRepository.cs │ │ │ │ └── Member.cs │ │ │ ├── PPPDDDChap19.eBidder.Membership.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── _ReadMe.txt │ │ ├── PPPDDDChap19.eBidder.SellerAccount/ │ │ │ ├── PPPDDDChap19.eBidder.SellerAccount.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── _ReadMe.txt │ │ └── PPPDDDChap19.eBidder.sln │ └── README.md ├── 20 - Factories/ │ └── README.md ├── 21 - Repositories/ │ ├── DDDPPP.Chap21.EFExample/ │ │ ├── .nuget/ │ │ │ ├── NuGet.Config │ │ │ └── NuGet.targets │ │ ├── DDDPPP.Chap21.EFExample.Application/ │ │ │ ├── App.config │ │ │ ├── Application/ │ │ │ │ ├── BusinessUseCases/ │ │ │ │ │ ├── BidOnAuction.cs │ │ │ │ │ ├── CreateAuction.cs │ │ │ │ │ └── NewAuctionRequest.cs │ │ │ │ └── Queries/ │ │ │ │ ├── AuctionStatus.cs │ │ │ │ ├── AuctionStatusQuery.cs │ │ │ │ ├── BidHistoryQuery.cs │ │ │ │ └── BidInformation.cs │ │ │ ├── Bootstrapper.cs │ │ │ ├── DDDPPP.Chap21.EFExample.Application.csproj │ │ │ ├── Infrastructure/ │ │ │ │ ├── AuctionDatabaseContext.cs │ │ │ │ ├── AuctionRepository.cs │ │ │ │ ├── BidHistoryRepository.cs │ │ │ │ ├── DataModel/ │ │ │ │ │ ├── AuctionDTO.cs │ │ │ │ │ └── BidDTO.cs │ │ │ │ ├── DomainEvents.cs │ │ │ │ ├── Entity.cs │ │ │ │ ├── IClock.cs │ │ │ │ ├── Mapping/ │ │ │ │ │ ├── AuctionMap.cs │ │ │ │ │ └── BidMap.cs │ │ │ │ ├── SystemClock.cs │ │ │ │ └── ValueObject.cs │ │ │ ├── Model/ │ │ │ │ ├── Auction/ │ │ │ │ │ ├── Auction.cs │ │ │ │ │ ├── AuctionSnapshot.cs │ │ │ │ │ ├── AutomaticBidder.cs │ │ │ │ │ ├── BidPlaced.cs │ │ │ │ │ ├── IAuctionRepository.cs │ │ │ │ │ ├── Money.cs │ │ │ │ │ ├── MoneyCannotBeANegativeValueException.cs │ │ │ │ │ ├── MoneySnapshot.cs │ │ │ │ │ ├── MoreThanTwoDecimalPlacesInMoneyValueException.cs │ │ │ │ │ ├── Offer.cs │ │ │ │ │ ├── OutBid.cs │ │ │ │ │ ├── Price.cs │ │ │ │ │ ├── WinningBid.cs │ │ │ │ │ └── WinningBidSnapshot.cs │ │ │ │ └── BidHistory/ │ │ │ │ ├── Bid.cs │ │ │ │ ├── BidHistory.cs │ │ │ │ └── IBidHistoryRepository.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── DDDPPP.Chap21.EFExample.Presentation/ │ │ │ ├── App.config │ │ │ ├── DDDPPP.Chap21.EFExample.Presentation.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ └── DDDPPP.Chap21.EFExample.sln │ ├── DDDPPP.Chap21.MicroORM/ │ │ ├── .nuget/ │ │ │ ├── NuGet.Config │ │ │ └── NuGet.targets │ │ ├── DDDPPP.Chap21.MicroORM.Application/ │ │ │ ├── Application/ │ │ │ │ ├── BusinessUseCases/ │ │ │ │ │ ├── BidOnAuction.cs │ │ │ │ │ ├── CreateAuction.cs │ │ │ │ │ └── NewAuctionRequest.cs │ │ │ │ └── Queries/ │ │ │ │ ├── AuctionStatus.cs │ │ │ │ ├── AuctionStatusQuery.cs │ │ │ │ ├── BidHistoryQuery.cs │ │ │ │ └── BidInformation.cs │ │ │ ├── Bootstrapper.cs │ │ │ ├── DDDPPP.Chap21.MicroORM.Application.csproj │ │ │ ├── Infrastructure/ │ │ │ │ ├── AuctionRepository.cs │ │ │ │ ├── BidHistoryRepository.cs │ │ │ │ ├── ConcurrencyException.cs │ │ │ │ ├── DataModel/ │ │ │ │ │ ├── AuctionDTO.cs │ │ │ │ │ └── BidDTO.cs │ │ │ │ ├── DomainEvents.cs │ │ │ │ ├── Entity.cs │ │ │ │ ├── IAggregateDataModel.cs │ │ │ │ ├── IClock.cs │ │ │ │ ├── IUnitOfWork.cs │ │ │ │ ├── IUnitOfWorkRepository.cs │ │ │ │ ├── SystemClock.cs │ │ │ │ ├── UnitOfWork.cs │ │ │ │ └── ValueObject.cs │ │ │ ├── Model/ │ │ │ │ ├── Auction/ │ │ │ │ │ ├── Auction.cs │ │ │ │ │ ├── AuctionSnapshot.cs │ │ │ │ │ ├── Bid.cs │ │ │ │ │ ├── BidPlaced.cs │ │ │ │ │ ├── IAuctionRepository.cs │ │ │ │ │ ├── Money.cs │ │ │ │ │ ├── MoneyCannotBeANegativeValueException.cs │ │ │ │ │ ├── MoneySnapshot.cs │ │ │ │ │ ├── MoreThanTwoDecimalPlacesInMoneyValueException.cs │ │ │ │ │ ├── OutBid.cs │ │ │ │ │ ├── Price.cs │ │ │ │ │ ├── WinningBid.cs │ │ │ │ │ └── WinningBidSnapshot.cs │ │ │ │ └── BidHistory/ │ │ │ │ ├── BidHistory.cs │ │ │ │ ├── HistoricalBid.cs │ │ │ │ └── IBidHistoryRepository.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── DDDPPP.Chap21.MicroORM.Presentation/ │ │ │ ├── App.config │ │ │ ├── DDDPPP.Chap21.MicroORM.Presentation.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ └── DDDPPP.Chap21.MicroORM.sln │ ├── DDDPPP.Chap21.NHibernateExample/ │ │ ├── .nuget/ │ │ │ ├── NuGet.Config │ │ │ └── NuGet.targets │ │ ├── DDDPPP.Chap21.NHibernateExample.Application/ │ │ │ ├── Application/ │ │ │ │ ├── BusinessUseCases/ │ │ │ │ │ ├── BidOnAuction.cs │ │ │ │ │ ├── CreateAuction.cs │ │ │ │ │ └── NewAuctionRequest.cs │ │ │ │ └── Queries/ │ │ │ │ ├── AuctionStatus.cs │ │ │ │ ├── AuctionStatusQuery.cs │ │ │ │ ├── BidHistoryQuery.cs │ │ │ │ └── BidInformation.cs │ │ │ ├── Bootstrapper.cs │ │ │ ├── DDDPPP.Chap21.NHibernateExample.Application.csproj │ │ │ ├── Infrastructure/ │ │ │ │ ├── Auction.hbm.xml │ │ │ │ ├── AuctionRepository.cs │ │ │ │ ├── Bid.hbm.xml │ │ │ │ ├── BidHistoryRepository.cs │ │ │ │ ├── DomainEvents.cs │ │ │ │ ├── Entity.cs │ │ │ │ ├── IClock.cs │ │ │ │ ├── SystemClock.cs │ │ │ │ └── ValueObject.cs │ │ │ ├── Model/ │ │ │ │ ├── Auction/ │ │ │ │ │ ├── Auction.cs │ │ │ │ │ ├── AutomaticBidder.cs │ │ │ │ │ ├── BidPlaced.cs │ │ │ │ │ ├── IAuctionRepository.cs │ │ │ │ │ ├── Money.cs │ │ │ │ │ ├── MoneyCannotBeANegativeValueException.cs │ │ │ │ │ ├── MoreThanTwoDecimalPlacesInMoneyValueException.cs │ │ │ │ │ ├── Offer.cs │ │ │ │ │ ├── OutBid.cs │ │ │ │ │ ├── Price.cs │ │ │ │ │ └── WinningBid.cs │ │ │ │ └── BidHistory/ │ │ │ │ ├── Bid.cs │ │ │ │ └── IBidHistoryRepository.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── DDDPPP.Chap21.NHibernateExample.Presentation/ │ │ │ ├── App.config │ │ │ ├── DDDPPP.Chap21.NHibernateExample.Presentation.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ └── DDDPPP.Chap21.NHibernateExample.sln │ ├── DDDPPP.Chap21.RavenDBExample/ │ │ ├── .nuget/ │ │ │ ├── NuGet.Config │ │ │ └── NuGet.targets │ │ ├── DDDPPP.Chap21.RavenDBExample.Application/ │ │ │ ├── Application/ │ │ │ │ ├── BusinessUseCases/ │ │ │ │ │ ├── BidOnAuction.cs │ │ │ │ │ ├── CreateAuction.cs │ │ │ │ │ └── NewAuctionRequest.cs │ │ │ │ └── Queries/ │ │ │ │ ├── AuctionStatus.cs │ │ │ │ ├── AuctionStatusQuery.cs │ │ │ │ ├── BidHistoryQuery.cs │ │ │ │ └── BidInformation.cs │ │ │ ├── Bootstrapper.cs │ │ │ ├── DDDPPP.Chap21.RavenDBExample.Application.csproj │ │ │ ├── Infrastructure/ │ │ │ │ ├── AuctionRepository.cs │ │ │ │ ├── BidHistoryRepository.cs │ │ │ │ ├── BidHistory_NumberOfBids.cs │ │ │ │ ├── DomainEvents.cs │ │ │ │ ├── Entity.cs │ │ │ │ ├── IClock.cs │ │ │ │ ├── SystemClock.cs │ │ │ │ └── ValueObject.cs │ │ │ ├── Model/ │ │ │ │ ├── Auction/ │ │ │ │ │ ├── Auction.cs │ │ │ │ │ ├── AutomaticBidder.cs │ │ │ │ │ ├── BidPlaced.cs │ │ │ │ │ ├── IAuctionRepository.cs │ │ │ │ │ ├── Money.cs │ │ │ │ │ ├── MoneyCannotBeANegativeValueException.cs │ │ │ │ │ ├── MoreThanTwoDecimalPlacesInMoneyValueException.cs │ │ │ │ │ ├── Offer.cs │ │ │ │ │ ├── OutBid.cs │ │ │ │ │ ├── Price.cs │ │ │ │ │ └── WinningBid.cs │ │ │ │ └── BidHistory/ │ │ │ │ ├── Bid.cs │ │ │ │ ├── BidHistory.cs │ │ │ │ └── IBidHistoryRepository.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── DDDPPP.Chap21.RavenDBExample.Application.Tests/ │ │ │ ├── DDDPPP.Chap21.RavenDBExample.Application.Tests.csproj │ │ │ ├── Domain/ │ │ │ │ └── AutomaticBidderScenarios.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── DDDPPP.Chap21.RavenDBExample.Presentation/ │ │ │ ├── App.config │ │ │ ├── DDDPPP.Chap21.RavenDBExample.Presentation.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ └── DDDPPP.Chap21.RavenDBExample.sln │ └── Database_script_for_examples.sql ├── 22 - Event Sourcing/ │ ├── PPPDDD.Chap23.EventSourcing.EventStoreDemo/ │ │ ├── GetEventStore.cs │ │ ├── ImportTestData.cs │ │ ├── PPPDDD.Chap23.EventSourcing.EventStoreDemo.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Tests.cs │ │ └── packages.config │ ├── PPPDDDChap22/ │ │ ├── .nuget/ │ │ │ ├── NuGet.Config │ │ │ └── NuGet.targets │ │ ├── PPPDDDChap23.EventSourcing.Application/ │ │ │ ├── Application/ │ │ │ │ └── BusinessUseCases/ │ │ │ │ ├── CreateAccount.cs │ │ │ │ ├── RecordPhonecall.cs │ │ │ │ └── TopUpCredit.cs │ │ │ ├── Bootstrapper.cs │ │ │ ├── Infrastructure/ │ │ │ │ ├── Entity.cs │ │ │ │ ├── EventSourcedAggregate.cs │ │ │ │ ├── EventStore.cs │ │ │ │ ├── EventStream.cs │ │ │ │ ├── EventWrapper.cs │ │ │ │ ├── IClock.cs │ │ │ │ ├── PayAsYouGoAccountRepository.cs │ │ │ │ ├── SystemClock.cs │ │ │ │ └── ValueObject.cs │ │ │ ├── Model/ │ │ │ │ └── PayAsYouGo/ │ │ │ │ ├── AccountCreated.cs │ │ │ │ ├── CreditAdded.cs │ │ │ │ ├── CreditSatisfiesFreeCallAllowanceOffer.cs │ │ │ │ ├── FreeCallAllowance.cs │ │ │ │ ├── IPayAsYouGoAccountRepository.cs │ │ │ │ ├── Minutes.cs │ │ │ │ ├── Money.cs │ │ │ │ ├── PayAsYouGoAccount.cs │ │ │ │ ├── PayAsYouGoAccountSnapshot.cs │ │ │ │ ├── PayAsYouGoInclusiveMinutesOffer.cs │ │ │ │ ├── PhoneCall.cs │ │ │ │ ├── PhoneCallCharged.cs │ │ │ │ ├── PhoneCallCosting.cs │ │ │ │ └── PhoneNumber.cs │ │ │ ├── PPPDDDChap23.EventSourcing.Application.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── PPPDDDChap23.EventSourcing.ApplicationTests/ │ │ │ ├── PPPDDDChap23.EventSourcing.ApplicationTests.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── PPPDDDChap23.EventSourcing.Presentation/ │ │ │ ├── App.config │ │ │ ├── PPPDDDChap23.EventSourcing.Presentation.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ └── PPPDDDChap23.EventSourcing.sln │ ├── PPPDDDChap23.EventSourcing/ │ │ ├── .nuget/ │ │ │ ├── NuGet.Config │ │ │ └── NuGet.targets │ │ ├── PPPDDDChap23.EventSourcing.Application/ │ │ │ ├── Application/ │ │ │ │ └── BusinessUseCases/ │ │ │ │ ├── CreateAccount.cs │ │ │ │ ├── RecordPhonecall.cs │ │ │ │ └── TopUpCredit.cs │ │ │ ├── Bootstrapper.cs │ │ │ ├── Infrastructure/ │ │ │ │ ├── DomainEvent.cs │ │ │ │ ├── Entity.cs │ │ │ │ ├── EventSourcedAggregate.cs │ │ │ │ ├── EventStore.cs │ │ │ │ ├── EventStream.cs │ │ │ │ ├── EventWrapper.cs │ │ │ │ ├── IClock.cs │ │ │ │ ├── PasAsYouGoSnapshotJob.cs │ │ │ │ ├── PayAsYouGoAccountRepository.cs │ │ │ │ ├── SystemClock.cs │ │ │ │ └── ValueObject.cs │ │ │ ├── Model/ │ │ │ │ └── PayAsYouGo/ │ │ │ │ ├── AccountCreated.cs │ │ │ │ ├── CreditAdded.cs │ │ │ │ ├── CreditSatisfiesFreeCallAllowanceOffer.cs │ │ │ │ ├── FreeCallAllowance.cs │ │ │ │ ├── IPayAsYouGoAccountRepository.cs │ │ │ │ ├── Minutes.cs │ │ │ │ ├── Money.cs │ │ │ │ ├── PayAsYouGoAccount.cs │ │ │ │ ├── PayAsYouGoAccountSnapshot.cs │ │ │ │ ├── PayAsYouGoInclusiveMinutesOffer.cs │ │ │ │ ├── PhoneCall.cs │ │ │ │ ├── PhoneCallCharged.cs │ │ │ │ ├── PhoneCallCosting.cs │ │ │ │ └── PhoneNumber.cs │ │ │ ├── PPPDDDChap23.EventSourcing.Application.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── PPPDDDChap23.EventSourcing.ApplicationTests/ │ │ │ ├── PPPDDDChap23.EventSourcing.ApplicationTests.csproj │ │ │ ├── PayAsYouGoAccount_Tests.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ ├── PPPDDDChap23.EventSourcing.Presentation/ │ │ │ ├── App.config │ │ │ ├── PPPDDDChap23.EventSourcing.Presentation.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ └── packages.config │ │ └── PPPDDDChap23.EventSourcing.sln │ └── README.md ├── 23 - Architecting Application User Interfaces/ │ ├── PPPDDD.NonDist.UIComp/ │ │ ├── PPPDDD.NonDist.UIComp/ │ │ │ ├── App_Start/ │ │ │ │ └── RouteConfig.cs │ │ │ ├── Controllers/ │ │ │ │ ├── CatalogueBoundedContextController.cs │ │ │ │ ├── HomeController.cs │ │ │ │ ├── PricingBoundedContextController.cs │ │ │ │ └── ShippingBoundedContextController.cs │ │ │ ├── Global.asax │ │ │ ├── Global.asax.cs │ │ │ ├── PPPDDD.NonDist.UIComp.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Scripts/ │ │ │ │ ├── jquery-1.10.2.intellisense.js │ │ │ │ ├── jquery-1.10.2.js │ │ │ │ ├── jquery.validate-vsdoc.js │ │ │ │ ├── jquery.validate.js │ │ │ │ └── jquery.validate.unobtrusive.js │ │ │ ├── Views/ │ │ │ │ ├── CatalogBoundedContext/ │ │ │ │ │ └── ItemInBasket.cshtml │ │ │ │ ├── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ ├── PricingBoundedContext/ │ │ │ │ │ └── Price.cshtml │ │ │ │ ├── ShippingBoundedContext/ │ │ │ │ │ └── DeliveryOptions.cshtml │ │ │ │ └── web.config │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ ├── Web.config │ │ │ └── packages.config │ │ └── PPPDDD.NonDist.UIComp.sln │ ├── PPPSSS.Dist.UIComp/ │ │ ├── PPPSSS.Dist.UIComp/ │ │ │ ├── App_Start/ │ │ │ │ └── RouteConfig.cs │ │ │ ├── Controllers/ │ │ │ │ ├── HolidaysController.cs │ │ │ │ ├── HomeController.cs │ │ │ │ ├── PromotionsController.cs │ │ │ │ └── RecommendationsController.cs │ │ │ ├── Global.asax │ │ │ ├── Global.asax.cs │ │ │ ├── PPPSSS.Dist.UIComp.csproj │ │ │ ├── Properties/ │ │ │ │ └── AssemblyInfo.cs │ │ │ ├── Scripts/ │ │ │ │ ├── jquery-1.10.2.intellisense.js │ │ │ │ ├── jquery-1.10.2.js │ │ │ │ ├── jquery.validate-vsdoc.js │ │ │ │ ├── jquery.validate.js │ │ │ │ ├── jquery.validate.unobtrusive.js │ │ │ │ └── pppddd-application.js │ │ │ ├── Views/ │ │ │ │ ├── Home/ │ │ │ │ │ └── Index.cshtml │ │ │ │ └── web.config │ │ │ ├── Web.Debug.config │ │ │ ├── Web.Release.config │ │ │ ├── Web.config │ │ │ └── packages.config │ │ └── PPPSSS.Dist.UIComp.sln │ └── README.md ├── 24 - CQRS An Architecture of A Bounded Context/ │ └── README.md ├── 25 - Commands Application Service Patterns for processing Business Use Cases/ │ ├── .nuget/ │ │ ├── NuGet.Config │ │ └── NuGet.targets │ ├── DDDPPP.Chap20.CommandHandler.Application/ │ │ ├── Application/ │ │ │ ├── Api.cs │ │ │ ├── Commands/ │ │ │ │ ├── AddProductToBasketCommand.cs │ │ │ │ ├── ApplyCouponToBasketCommand.cs │ │ │ │ ├── CreateABasketCommand.cs │ │ │ │ ├── RemoveOfferFromBasketCommand.cs │ │ │ │ ├── RemoveProductFromBasketCommand.cs │ │ │ │ └── UpdateBasketDeliveryCountry.cs │ │ │ ├── Contract/ │ │ │ │ └── _readme.txt │ │ │ ├── Handlers/ │ │ │ │ ├── AddProductToBasketCommandHandler.cs │ │ │ │ ├── ApplyCouponToBasketCommandHandler.cs │ │ │ │ ├── CreateABasketCommandHandler.cs │ │ │ │ ├── RemoveCouponFromBasketCommandHandler.cs │ │ │ │ └── RemoveProductFromBasketCommandHandler.cs │ │ │ └── ReadModel/ │ │ │ └── Product.cs │ │ ├── CommandHandlerRegistry.cs │ │ ├── DDDPPP.Chap20.CommandHandler.Application.csproj │ │ ├── DomainEventHandlerRegistery.cs │ │ ├── Infrastructure/ │ │ │ ├── BasketRepository.cs │ │ │ ├── Mapping/ │ │ │ │ ├── Basket.hbm.xml │ │ │ │ ├── BasketItem.hbm.xml │ │ │ │ ├── BasketVoucher.hbm.xml │ │ │ │ ├── Offer.hbm.xml │ │ │ │ └── Product.hbm.xml │ │ │ └── PromotionsRepository.cs │ │ ├── Model/ │ │ │ ├── Baskets/ │ │ │ │ ├── Basket.cs │ │ │ │ ├── BasketItem.cs │ │ │ │ ├── BasketItemFactory.cs │ │ │ │ ├── BasketPricingBreakdown.cs │ │ │ │ ├── BasketPricingService.cs │ │ │ │ ├── Events/ │ │ │ │ │ ├── BasketCreated.cs │ │ │ │ │ ├── BasketModified.cs │ │ │ │ │ ├── BasketPriceChanged.cs │ │ │ │ │ └── CouponNotApplicableForBasketItems.cs │ │ │ │ ├── IBasketPricingService.cs │ │ │ │ ├── IBasketRepository.cs │ │ │ │ ├── NonNegativeQuantity.cs │ │ │ │ └── ProductSnapshot.cs │ │ │ └── Promotions/ │ │ │ ├── Coupon.cs │ │ │ ├── CouponIssues.cs │ │ │ ├── ICouponPolicy.cs │ │ │ ├── IPromotionsRepository.cs │ │ │ ├── Promotion.cs │ │ │ └── PromotionNotApplicableException.cs │ │ └── Properties/ │ │ └── AssemblyInfo.cs │ ├── DDDPPP.Chap20.CommandHandler.Presentation/ │ │ ├── Content/ │ │ │ ├── Site.css │ │ │ └── themes/ │ │ │ └── base/ │ │ │ ├── jquery-ui.css │ │ │ ├── jquery.ui.accordion.css │ │ │ ├── jquery.ui.all.css │ │ │ ├── jquery.ui.autocomplete.css │ │ │ ├── jquery.ui.base.css │ │ │ ├── jquery.ui.button.css │ │ │ ├── jquery.ui.core.css │ │ │ ├── jquery.ui.datepicker.css │ │ │ ├── jquery.ui.dialog.css │ │ │ ├── jquery.ui.progressbar.css │ │ │ ├── jquery.ui.resizable.css │ │ │ ├── jquery.ui.selectable.css │ │ │ ├── jquery.ui.slider.css │ │ │ ├── jquery.ui.tabs.css │ │ │ └── jquery.ui.theme.css │ │ ├── Controllers/ │ │ │ ├── AccountController.cs │ │ │ └── HomeController.cs │ │ ├── DDDPPP.Chap20.CommandHandler.Presentation.csproj │ │ ├── Global.asax │ │ ├── Global.asax.cs │ │ ├── Models/ │ │ │ └── AccountModels.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Scripts/ │ │ │ ├── MicrosoftAjax.debug.js │ │ │ ├── MicrosoftAjax.js │ │ │ ├── MicrosoftMvcAjax.debug.js │ │ │ ├── MicrosoftMvcAjax.js │ │ │ ├── MicrosoftMvcValidation.debug.js │ │ │ ├── MicrosoftMvcValidation.js │ │ │ ├── jquery-1.7.1.intellisense.js │ │ │ ├── jquery-1.7.1.js │ │ │ ├── jquery-ui-1.8.20.js │ │ │ ├── jquery.unobtrusive-ajax.js │ │ │ ├── jquery.validate-vsdoc.js │ │ │ ├── jquery.validate.js │ │ │ ├── jquery.validate.unobtrusive.js │ │ │ └── modernizr-2.5.3.js │ │ ├── Views/ │ │ │ ├── Account/ │ │ │ │ ├── ChangePassword.aspx │ │ │ │ ├── ChangePasswordSuccess.aspx │ │ │ │ ├── LogOn.aspx │ │ │ │ └── Register.aspx │ │ │ ├── Home/ │ │ │ │ ├── About.aspx │ │ │ │ └── Index.aspx │ │ │ ├── Shared/ │ │ │ │ ├── Error.aspx │ │ │ │ ├── LogOnUserControl.ascx │ │ │ │ └── Site.Master │ │ │ └── Web.config │ │ ├── Web.Debug.config │ │ ├── Web.Release.config │ │ ├── Web.config │ │ └── packages.config │ ├── DDDPPP.Chap20.CommandHandler.sln │ ├── PPPDDD.ApplicationServices.Gambling/ │ │ ├── App_Start/ │ │ │ └── RouteConfig.cs │ │ ├── ApplicationServices/ │ │ │ ├── 1_validation/ │ │ │ │ └── RecommendAFriendService.cs │ │ │ ├── 2_transaction/ │ │ │ │ └── RecommendAFriendService.cs │ │ │ ├── 3_error_handling/ │ │ │ │ └── RecommendAFriendService.cs │ │ │ ├── 4_logging_metrics/ │ │ │ │ └── RecommendAFriendService.cs │ │ │ ├── 5_authentication/ │ │ │ │ └── AdminRecommendAFriendService.cs │ │ │ ├── 6_communication/ │ │ │ │ └── RecommendAFriendService.cs │ │ │ ├── AsyncAwait/ │ │ │ │ └── RecommendAFriend.cs │ │ │ ├── CommandProcessor/ │ │ │ │ ├── BloatedRecommendAFriendService.cs │ │ │ │ └── RecommendAFriend.cs │ │ │ ├── CommandProcessorChained/ │ │ │ │ └── RecommendAFriend.cs │ │ │ ├── FrameworkHooks/ │ │ │ │ ├── ErrorFilter.cs │ │ │ │ └── TransactionFilter.cs │ │ │ ├── PublishSubscribe/ │ │ │ │ └── RecommendAFriend.cs │ │ │ ├── PublishSubscribeAsync/ │ │ │ │ └── ReferAFriend.cs │ │ │ └── RequestReply/ │ │ │ └── RecommendAFriend.cs │ │ ├── Controllers/ │ │ │ └── RecommendAFriendController.cs │ │ ├── Global.asax │ │ ├── Global.asax.cs │ │ ├── PPPDDD.ApplicationServices.RecommendAFriend.csproj │ │ ├── PPPDDD.ApplicationServices.RecommendAFriend.sln │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Views/ │ │ │ └── web.config │ │ ├── Web.Debug.config │ │ ├── Web.Release.config │ │ ├── Web.config │ │ └── packages.config │ ├── PPPDDD.ApplicationServices.RecommendAFriend.sln │ └── PPPDDD.ApplicationServices.Tests/ │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── Refer_a_friend.cs │ ├── Tests.csproj │ └── packages.config ├── 26 - Queries Domain Reporting/ │ ├── PPPDDD.Reporting/ │ │ ├── App_Start/ │ │ │ └── RouteConfig.cs │ │ ├── Controllers/ │ │ │ ├── DealershipPerformanceReportController.cs │ │ │ ├── DealershipReportUsingMediatorController.cs │ │ │ ├── DenormalizedLoyaltyReportController.cs │ │ │ ├── HealthcareEventProjectionReportController.cs │ │ │ └── LoyaltyReportQueryingDatastoreController.cs │ │ ├── Global.asax │ │ ├── Global.asax.cs │ │ ├── PPPDDD.Reporting.csproj │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Views/ │ │ │ └── web.config │ │ ├── Web.Debug.config │ │ ├── Web.Release.config │ │ ├── Web.config │ │ └── packages.config │ ├── PPPDDD.Reporting.sln │ ├── README.md │ └── SportsStoreDatabase/ │ ├── LoyaltyAccounts.sql │ ├── LoyaltySettings.sql │ ├── Orders.sql │ ├── TestData.sql │ ├── Users.sql │ └── sportsstoredatabase.sqlproj ├── README.md └── eBidder Case Study/ └── README.md