Skip to content

Instantly share code, notes, and snippets.

public class Order
{
private readonly List<OrderLine> _lines;
public Order()
{
_lines = new List<OrderLine>();
}
public decimal Amount
[Fact]
public void Amount_shows_order_amount()
{
// Arrange
var order = new Order();
order.AddLine(10, new Product());
order.AddLine(20, new Product());
// Act
decimal amount = order.Amount;
@vkhorikov
vkhorikov / UserTests.cs
Created January 21, 2016 02:35
Arrange Section reuse example
public class UserTests
{
[Fact]
public void Should_fire_event_after_provisioning()
{
// Arrange
Organization organization = CreateOrganization();
User user = CreateUser(organization);
Subscription subscription = CreateSubscription(Package.Streamer, organization);
public class UserBuilder
{
private readonly string _firstName;
private readonly string _lastName;
public UserBuilder()
: this(Guid.NewGuid().ToString(), Guid.NewGuid().ToString())
{
}
[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;