Skip to content

Instantly share code, notes, and snippets.

@ahmetkucukoglu
ahmetkucukoglu / VotingRepository.cs
Created December 17, 2024 12:15
Persistence Ignorance - Voting Repository
using Microsoft.EntityFrameworkCore;
using PersistenceIgnorance.Domain.Voting;
using PersistenceIgnorance.Domain.Voting.Events;
using PersistenceIgnorance.Infrastructure.Persistence.Entities;
namespace PersistenceIgnorance.Infrastructure.Persistence.Repositories;
public class VotingRepository(VotingDbContext dbContext)
{
public async Task<VotingEntity> GetAsync(int id)
@ahmetkucukoglu
ahmetkucukoglu / Voting.cs
Created December 17, 2024 12:12
Persistence Ignorance - Voting Domain Model
using PersistenceIgnorance.Domain.Voting.Events;
namespace PersistenceIgnorance.Domain.Voting;
public class Voting(List<Voter> voters)
{
private readonly List<Voter> _voters = voters;
private readonly List<IEvent> _events = [];
private bool IsStarted { get; set; }
@ahmetkucukoglu
ahmetkucukoglu / Demo.cs
Created November 8, 2023 20:01
Demo - CsvProductsExporterAdapter
var products = new List<Product>
{
new()
{
Title = "MacBook Pro 14 inch",
Description = "It's now even more capable, thanks to the new M3 chip."
},
new()
{
Title = "MacBook Pro 16 inch",
@ahmetkucukoglu
ahmetkucukoglu / CsvProductsExporterAdapter.cs
Created November 8, 2023 19:59
Adapter - CsvProductsExporterAdapter
public class CsvProductsExporterAdapter : IProductsExporter
{
private CsvHelper CsvHelper { get; set; }
public CsvProductsExporterAdapter(CsvHelper csvHelper)
{
CsvHelper = csvHelper;
}
public string Export(List<Product> data)
@ahmetkucukoglu
ahmetkucukoglu / CsvHelper.cs
Created November 8, 2023 19:58
Adaptee - CsvHelper
public class CsvHelper
{
private char Delimiter { get; set; }
public CsvHelper(char delimiter)
{
Delimiter = delimiter;
}
public string GenerateCsv(List<object> rows)
@ahmetkucukoglu
ahmetkucukoglu / JsonProductsExporter.cs
Created November 8, 2023 19:57
JsonProductsExporter
public class JsonProductsExporter : IProductsExporter
{
public string Export(List<Product> products)
{
return JsonSerializer.Serialize(products);
}
}
@ahmetkucukoglu
ahmetkucukoglu / XmlProductsExporter.cs
Created November 8, 2023 19:57
XmlProductsExporter
public class XmlProductsExporter : IProductsExporter
{
public string Export(List<Product> products)
{
var xmlSerializer = new XmlSerializer(products.GetType());
using var stringWriter = new StringWriter();
using var xmlWriter = new XmlTextWriter(stringWriter) { Formatting = Formatting.Indented };
xmlSerializer.Serialize(xmlWriter, products);
@ahmetkucukoglu
ahmetkucukoglu / IProductsExporter.cs
Created November 8, 2023 19:55
Target - IProductsExporter
public interface IProductsExporter
{
string Export(List<Product> products);
}
@ahmetkucukoglu
ahmetkucukoglu / DbContext.cs
Last active November 3, 2023 20:42
DbContext
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Shipment>()
.Property(e => e.State)
.HasConversion(
s => s.ToString(),
s => s switch {
nameof(OrderPlacedState) => new OrderPlacedState(),
nameof(InTransitState) => new InTransitState(),
@ahmetkucukoglu
ahmetkucukoglu / Demo.cs
Created November 3, 2023 19:45
Demo - Shipment
var shipment = new Shipment(Guid.NewGuid(), "RU", "Istanbul")
shipment.ToInTransit();
shipment.ToInCustoms();
shipment.ToInCustomsCleared();
shipment.ToOutForDelivery();
shipment.ToNotDelivered();
shipment.ToDelivered();