Skip to content

Instantly share code, notes, and snippets.

@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();
@ahmetkucukoglu
ahmetkucukoglu / Shipment.cs
Created November 3, 2023 19:41
Context - Shipment
public class Shipment
{
public Guid OrderId { get; private set; }
public string FromCountry { get; private set; }
public string To { get; private set; }
public ShipmentState State { get; private set; }
public int DeliveryAttempts { get; internal set; }
public Shipment(Guid orderId, string fromCountry, string to)
{
@ahmetkucukoglu
ahmetkucukoglu / NotDeliveredState.cs
Last active November 3, 2023 20:45
ConcreteState - NotDeliveredState
public class NotDeliveredState : ShipmentState
{
public override string ToString() => nameof(NotDeliveredState);
}