Skip to content

Instantly share code, notes, and snippets.

@vkhorikov
vkhorikov / 1.cs
Last active October 3, 2017 02:00
Domain events
public class OrderSubmitted : IDomainEvent
{
public Order Order { get; }
}
@vkhorikov
vkhorikov / 1.cs
Last active August 5, 2017 13:55
Always valid vs not always valid domain model
public class Company
{
public void AssignDelivery(Delivery delivery)
{
if (!delivery.IsValid())
throw new Exception();
_deliveries.Add(delivery);
}
@vkhorikov
vkhorikov / 1.cs
Created July 13, 2017 12:15
Game Dev
export class Vector {
private _x: number;
private _y: number;
public getX(): number {
return this._x;
}
public getY(): number {
return this._y;
@vkhorikov
vkhorikov / 1.cs
Last active June 15, 2017 12:57
Value Objects: when to create one?
public struct DecimalGreaterThanZero : IEquatable<DecimalGreaterThanZero>
{
private readonly decimal _value;
public DecimalGreaterThanZero(decimal value)
{
if (CanCreate(value) == false)
throw new ArgumentException("Value must be greater than zero.", nameof(value));
_value = value;
@vkhorikov
vkhorikov / 1.cs
Last active June 6, 2017 23:44
On naming
public class FurnitureEntity : Entity { /* ... */ }
@vkhorikov
vkhorikov / 1.cs
Last active June 1, 2017 11:08
Code review: Fabric class
public class Fabric : AggregateRootWithLinkedObjects
{
public bool PreOrder { get; protected set; }
private string _Due { get; set; }
public Maybe<string> Due
{
get => _Due;
protected set => _Due = value.Unwrap();
}
@vkhorikov
vkhorikov / Fabric.cs
Created May 30, 2017 16:36
Source code for the 2nd code review
public class Fabric : AggregateRootWithLinkedObjects
{
public bool PreOrder { get; protected set; }
private string _Due { get; set; }
public Maybe<string> Due
{
get => _Due;
protected set => _Due = value.Unwrap();
}
@vkhorikov
vkhorikov / Promote.cs
Created September 6, 2016 00:37
Promote method with a possibility to fail while saving data to the DB
[HttpPost]
[Route("customers/{id}/promotion")]
public HttpResponseMessage Promote(long id)
{
return _customerRepository.GetById(id)
.ToResult("Customer with such Id is not found: " + id)
.Ensure(customer => customer.CanBePromoted(), "The customer has the highest status possible")
.OnSuccess(customer => customer.Promote())
.OnSuccess(customer => _unitOfWork.Flush().Map(() => customer))
.OnSuccess(customer => _emailGateway.SendPromotionNotification(customer.PrimaryEmail, customer.Status)
[Fact]
public void SnackMachineRepository_NewSnackMachine_IsSaved()
{
SessionFactory.Init(@"Server=VLADIMIR-PC\SQL2014;Database=DddInPractice;Trusted_Connection=true");
var repository = new SnackMachineRepository();
var snackMachine = new SnackMachine();
snackMachine.LoadSnacks(1, new SnackPile(Chocolate, 1, 1m));
snackMachine.LoadSnacks(2, new SnackPile(Chocolate, 1, 1m));
snackMachine.LoadSnacks(3, new SnackPile(Chocolate, 1, 1m));
public class UserBuilder
{
private readonly string _firstName;
private readonly string _lastName;
public UserBuilder()
: this(Guid.NewGuid().ToString(), Guid.NewGuid().ToString())
{
}