Merge branch 'dev' of https://github.com/dotnet-architecture/eShopOnContainers into dev
This commit is contained in:
commit
493e12dc98
@ -4,17 +4,12 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.OrderAggregate
|
||||
{
|
||||
public class Address
|
||||
:ValueObject
|
||||
public class Address : ValueObject
|
||||
{
|
||||
public String Street { get; private set; }
|
||||
|
||||
public String City { get; private set; }
|
||||
|
||||
public String State { get; private set; }
|
||||
|
||||
public String Country { get; private set; }
|
||||
|
||||
public String ZipCode { get; private set; }
|
||||
|
||||
private Address() { }
|
||||
@ -30,6 +25,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O
|
||||
|
||||
protected override IEnumerable<object> GetAtomicValues()
|
||||
{
|
||||
// Using a yield return statement to return each element one at a time
|
||||
yield return Street;
|
||||
yield return City;
|
||||
yield return State;
|
||||
|
@ -15,6 +15,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O
|
||||
// aligned with DDD Aggregates and Domain Entities (Instead of properties and property collections)
|
||||
private DateTime _orderDate;
|
||||
|
||||
// Address is a Value Object pattern example persisted as EF Core 2.0 owned entity
|
||||
public Address Address { get; private set; }
|
||||
|
||||
private int? _buyerId;
|
||||
@ -177,16 +178,16 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O
|
||||
private void AddOrderStartedDomainEvent(string userId, int cardTypeId, string cardNumber,
|
||||
string cardSecurityNumber, string cardHolderName, DateTime cardExpiration)
|
||||
{
|
||||
var orderStartedDomainEvent = new OrderStartedDomainEvent(
|
||||
this, userId, cardTypeId, cardNumber, cardSecurityNumber,
|
||||
cardHolderName, cardExpiration);
|
||||
var orderStartedDomainEvent = new OrderStartedDomainEvent(this, userId, cardTypeId,
|
||||
cardNumber, cardSecurityNumber,
|
||||
cardHolderName, cardExpiration);
|
||||
|
||||
this.AddDomainEvent(orderStartedDomainEvent);
|
||||
}
|
||||
|
||||
private void StatusChangeException(OrderStatus orderStatusToChange)
|
||||
{
|
||||
throw new OrderingDomainException($"Not possible to change order status from {OrderStatus.Name} to {orderStatusToChange.Name}.");
|
||||
throw new OrderingDomainException($"Is not possible to change the order status from {OrderStatus.Name} to {orderStatusToChange.Name}.");
|
||||
}
|
||||
|
||||
public decimal GetTotal()
|
||||
|
@ -9,8 +9,7 @@ namespace Ordering.Domain.Events
|
||||
/// <summary>
|
||||
/// Event used when an order is created
|
||||
/// </summary>
|
||||
public class OrderStartedDomainEvent
|
||||
: INotification
|
||||
public class OrderStartedDomainEvent : INotification
|
||||
{
|
||||
public string UserId { get; private set; }
|
||||
public int CardTypeId { get; private set; }
|
||||
@ -21,9 +20,9 @@ namespace Ordering.Domain.Events
|
||||
public Order Order { get; private set; }
|
||||
|
||||
public OrderStartedDomainEvent(Order order, string userId,
|
||||
int cardTypeId, string cardNumber,
|
||||
string cardSecurityNumber, string cardHolderName,
|
||||
DateTime cardExpiration)
|
||||
int cardTypeId, string cardNumber,
|
||||
string cardSecurityNumber, string cardHolderName,
|
||||
DateTime cardExpiration)
|
||||
{
|
||||
Order = order;
|
||||
UserId = userId;
|
||||
|
@ -6,12 +6,8 @@
|
||||
|
||||
public abstract class Entity
|
||||
{
|
||||
|
||||
int? _requestedHashCode;
|
||||
int _Id;
|
||||
|
||||
private List<INotification> _domainEvents;
|
||||
|
||||
int _Id;
|
||||
public virtual int Id
|
||||
{
|
||||
get
|
||||
@ -24,13 +20,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
public List<INotification> DomainEvents => _domainEvents;
|
||||
private List<INotification> _domainEvents;
|
||||
public List<INotification> DomainEvents => _domainEvents;
|
||||
|
||||
public void AddDomainEvent(INotification eventItem)
|
||||
{
|
||||
_domainEvents = _domainEvents ?? new List<INotification>();
|
||||
_domainEvents.Add(eventItem);
|
||||
}
|
||||
|
||||
public void RemoveDomainEvent(INotification eventItem)
|
||||
{
|
||||
if (_domainEvents is null) return;
|
||||
@ -74,7 +71,6 @@
|
||||
return base.GetHashCode();
|
||||
|
||||
}
|
||||
|
||||
public static bool operator ==(Entity left, Entity right)
|
||||
{
|
||||
if (Object.Equals(left, null))
|
||||
|
@ -14,16 +14,13 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.SeedWork
|
||||
return ReferenceEquals(left, null) || left.Equals(right);
|
||||
}
|
||||
|
||||
|
||||
protected static bool NotEqualOperator(ValueObject left, ValueObject right)
|
||||
{
|
||||
return !(EqualOperator(left, right));
|
||||
}
|
||||
|
||||
|
||||
protected abstract IEnumerable<object> GetAtomicValues();
|
||||
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj == null || obj.GetType() != GetType())
|
||||
@ -47,7 +44,6 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.SeedWork
|
||||
return !thisValues.MoveNext() && !otherValues.MoveNext();
|
||||
}
|
||||
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return GetAtomicValues()
|
||||
|
@ -7,8 +7,7 @@ using System;
|
||||
|
||||
namespace Ordering.Infrastructure.EntityConfigurations
|
||||
{
|
||||
class OrderEntityTypeConfiguration
|
||||
: IEntityTypeConfiguration<Order>
|
||||
class OrderEntityTypeConfiguration : IEntityTypeConfiguration<Order>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<Order> orderConfiguration)
|
||||
{
|
||||
@ -21,6 +20,7 @@ namespace Ordering.Infrastructure.EntityConfigurations
|
||||
orderConfiguration.Property(o => o.Id)
|
||||
.ForSqlServerUseSequenceHiLo("orderseq", OrderingContext.DEFAULT_SCHEMA);
|
||||
|
||||
//Address value object persisted as owned entity type supported since EF Core 2.0
|
||||
orderConfiguration.OwnsOne(o => o.Address);
|
||||
|
||||
orderConfiguration.Property<DateTime>("OrderDate").IsRequired();
|
||||
@ -32,7 +32,7 @@ namespace Ordering.Infrastructure.EntityConfigurations
|
||||
var navigation = orderConfiguration.Metadata.FindNavigation(nameof(Order.OrderItems));
|
||||
|
||||
// DDD Patterns comment:
|
||||
//Set as Field (New since EF 1.1) to access the OrderItem collection property through its field
|
||||
//Set as field (New since EF 1.1) to access the OrderItem collection property through its field
|
||||
navigation.SetPropertyAccessMode(PropertyAccessMode.Field);
|
||||
|
||||
orderConfiguration.HasOne<PaymentMethod>()
|
||||
|
@ -12,22 +12,14 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.eShopOnContainers.Services.Ordering.Infrastructure
|
||||
{
|
||||
public class OrderingContext
|
||||
: DbContext,IUnitOfWork
|
||||
|
||||
public class OrderingContext : DbContext, IUnitOfWork
|
||||
{
|
||||
public const string DEFAULT_SCHEMA = "ordering";
|
||||
|
||||
public DbSet<Order> Orders { get; set; }
|
||||
|
||||
public DbSet<OrderItem> OrderItems { get; set; }
|
||||
|
||||
public DbSet<PaymentMethod> Payments { get; set; }
|
||||
|
||||
public DbSet<Buyer> Buyers { get; set; }
|
||||
|
||||
public DbSet<CardType> CardTypes { get; set; }
|
||||
|
||||
public DbSet<OrderStatus> OrderStatus { get; set; }
|
||||
|
||||
private readonly IMediator _mediator;
|
||||
@ -63,7 +55,6 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Infrastructure
|
||||
// You will need to handle eventual consistency and compensatory actions in case of failures in any of the Handlers.
|
||||
await _mediator.DispatchDomainEventsAsync(this);
|
||||
|
||||
|
||||
// After executing this line all the changes (from the Command Handler and Domain Event Handlers)
|
||||
// performed throught the DbContext will be commited
|
||||
var result = await base.SaveChangesAsync();
|
||||
|
Loading…
x
Reference in New Issue
Block a user