Skip to content

Instantly share code, notes, and snippets.

@vkhorikov
vkhorikov / 1_Before.cs
Last active April 20, 2020 17:08
Representing data as code
public class Industry : Entity
{
public const string CarsIndustry = "Cars";
public const string PharmacyIndustry = "Pharmacy";
public const string MediaIndustry = "Media";
public string Name { get; private set; }
}
public class Customer : Entity
[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));
@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)
@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 / 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 / 1.cs
Last active June 6, 2017 23:44
On naming
public class FurnitureEntity : Entity { /* ... */ }
@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
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 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
Last active October 7, 2020 17:36
Value Object
public abstract class ValueObject<T>
where T : ValueObject<T>
{
public override bool Equals(object obj)
{
var valueObject = obj as T;
if (ReferenceEquals(valueObject, null))
return false;