Skip to content

Instantly share code, notes, and snippets.

View ivanpaulovich's full-sized avatar
🔀
#CleanArchitecture Manga 🍄

Ivan Paulovich ivanpaulovich

🔀
#CleanArchitecture Manga 🍄
View GitHub Profile
@ivanpaulovich
ivanpaulovich / AccountsController.cs
Created July 22, 2018 09:39
AccountsController.cs
[Route("api/[controller]")]
public class AccountsController : Controller
{
private readonly IDepositUseCase _depositUseCase;
private readonly Presenter _presenter;
public AccountsController(
IDepositUseCase depositUseCase,
Presenter presenter)
{
@ivanpaulovich
ivanpaulovich / DepositUseCase.cs
Created July 22, 2018 07:41
DepositUseCase.cs
public sealed class DepositUseCase : IDepositUseCase
{
private readonly IAccountReadOnlyRepository _accountReadOnlyRepository;
private readonly IAccountWriteOnlyRepository _accountWriteOnlyRepository;
public DepositUseCase(
IAccountReadOnlyRepository accountReadOnlyRepository,
IAccountWriteOnlyRepository accountWriteOnlyRepository)
{
_accountReadOnlyRepository = accountReadOnlyRepository;
@ivanpaulovich
ivanpaulovich / SSN.cs
Last active June 24, 2018 16:00
A value object for the swedish Personnummer
public sealed class SSN
{
private string _text;
const string RegExForValidation = @"^\d{6,8}[-|(\s)]{0,1}\d{4}$";
public SSN(string text)
{
if (string.IsNullOrWhiteSpace(text))
throw new SSNShouldNotBeEmptyException("The 'SSN' field is required");
[Fact]
public void Customer_Should_Be_Loaded()
{
//
// Arrange
AccountCollection accounts = new AccountCollection();
accounts.Add(Guid.Empty);
Customer customer = Customer.Load(
Guid.Empty,
public sealed class Customer : IEntity, IAggregateRoot
{
public Guid Id { get; private set; }
public Name Name { get; private set; }
public SSN SSN { get; private set; }
public IReadOnlyCollection<Guid> Accounts
{
get
{
IReadOnlyCollection<Guid> readOnly = _accounts.GetAccountIds();
public sealed class AccountCollection
{
private readonly IList<Guid> _accountIds;
public AccountCollection()
{
_accountIds = new List<Guid>();
}
public IReadOnlyCollection<Guid> GetAccountIds()
@ivanpaulovich
ivanpaulovich / Account.cs
Last active June 23, 2018 20:57
DDD-TDD-Rich-Domain
public sealed class Account : IEntity, IAggregateRoot
{
public Guid Id { get; private set; }
public Guid CustomerId { get; private set; }
public IReadOnlyCollection<ITransaction> GetTransactions()
{
IReadOnlyCollection<ITransaction> readOnly = _transactions.GetTransactions();
return readOnly;
}