برنامه نویسی

مبدل های سفارشی در DynamoDB: ساخت مدل های داده قوی با سهولت

ویژگی مبدل های سفارشی DynamoDB به شما امکان می دهد نگاشت های سفارشی را بین مدل داده برنامه خود و مدل داده ویژگی-مقدار DynamoDB تعریف کنید. این به ویژه هنگام کار با انواع داده های پیچیده یا سفارشی، مانند enums یا اشیاء ارزش، که ممکن است به طور بومی توسط DynamoDB پشتیبانی نشوند، مفید است.

با استفاده از مبدل های سفارشی، می توانید کد برنامه خود را ساده کرده و مقدار کد دیگ بخار مورد نیاز برای نقشه برداری بین برنامه خود و DynamoDB را کاهش دهید. مبدل‌های سفارشی همچنین می‌توانند با کاهش میزان داده‌ای که باید بین برنامه شما و DynamoDB منتقل شود و با اجازه دادن به شما برای بهینه‌سازی روش ذخیره‌سازی و بازیابی داده‌ها، عملکرد را بهبود بخشند.

هدف این مقاله نشان دادن نحوه استفاده از دو نوع خاص مبدل سفارشی در DynamoDB است: مبدل Enum و مبدل شی ارزش. این مبدل ها به طور خاص برای نگاشت enums و اشیاء ارزش به ترتیب به و از مقادیر ویژگی DynamoDB مفید هستند. ما نمونه‌هایی از کد ارائه می‌کنیم و در مورد برخی از موضوعات پیشرفته مرتبط با مبدل‌های سفارشی در DynamoDB بحث خواهیم کرد.

مبدل Enum DynamoDB به شما این امکان را می دهد که بین dotnet یا هر زبان پشتیبانی شده دیگر enums و مقادیر ویژگی DynamoDB نقشه برداری کنید. این مفید است زیرا DynamoDB به طور بومی فقط از مجموعه محدودی از انواع داده ها مانند رشته ها، اعداد و داده های باینری پشتیبانی می کند. با Enum Converter، می توانید enum های برنامه خود را به این نوع داده های بومی نقشه برداری کنید و آنها را به عنوان ویژگی در DynamoDB ذخیره کنید.

در اینجا مثالی از نحوه ایجاد و استفاده از Enum Converter در DynamoDB آورده شده است:

using Amazon.DynamoDBv2.DataModel;
using Amazon.DynamoDBv2.DocumentModel;

public enum PaymentMethod
{
    CreditCard,
    PayPal,
    Bitcoin
}

public class PaymentMethodConverter : IPropertyConverter
{
    public DynamoDBEntry ToEntry(object value)
    {
        return new Primitive((value as PaymentMethod).ToString());
    }

    public object FromEntry(DynamoDBEntry entry)
    {
        return Enum.Parse(typeof(PaymentMethod), entry.AsString());
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس می توانیم از این مبدل در مدل داده خود به صورت زیر استفاده کنیم:

[DynamoDBTable("Orders")]
public class Order
{
    [DynamoDBProperty("paymentMethod"), DynamoDBTypeConverter(typeof(PaymentMethodConverter))]
    public PaymentMethod PaymentMethod { get; set; }

    // ... other properties and methods
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ارزش اشیاء مفهومی در توسعه نرم افزار است که نشان دهنده یک مقدار تغییرناپذیر یا مجموعه ای از مقادیر با یک رفتار خاص است. آنها را می توان برای کپسوله کردن انواع داده های پیچیده یا سفارشی که در انواع داده های ساده پشتیبانی شده توسط پایگاه داده هایی مانند DynamoDB قرار نمی گیرند، استفاده کرد. اشیاء ارزش معمولاً به‌عنوان کلاس‌های تغییرناپذیر پیاده‌سازی می‌شوند که داده‌های خود را از طریق گیرنده‌ها در معرض نمایش می‌گذارند و هیچ تنظیم‌کننده یا جهش‌دهنده دیگری ندارند.

مزایای استفاده از اشیاء ارزشی نسبت به نمونه های اولیه یا ساده شامل افزایش ایمنی نوع، کپسوله سازی بهتر و کد گویاتر است. با استفاده از اشیاء ارزش، می توانید احتمال خطاهای ناشی از انواع یا مقادیر نادرست را کاهش دهید و کد خود را خواناتر و قابل نگهداری تر کنید.

مبدل Object Value DynamoDB به شما امکان می دهد بین اشیاء ارزش و مقادیر ویژگی DynamoDB نقشه برداری کنید.

در اینجا مثالی از نحوه ایجاد و استفاده از یک مبدل شی ارزش در DynamoDB آورده شده است:

using Amazon.DynamoDBv2.DataModel;
using Newtonsoft.Json;

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
}

public class AddressConverter : IPropertyConverter
{
    public DynamoDBEntry ToEntry(object value)
    {
        return new Primitive(JsonConvert.SerializeObject(value));
    }

    public object FromEntry(DynamoDBEntry entry)
    {
        return JsonConvert.DeserializeObject(entry.AsString(), typeof(Address));
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما از Newtonsoft.Json / System.Text برای تبدیل شی مقدار به/از رشته JSON استفاده می کنیم. سپس می توانیم از این مبدل در مدل داده خود به صورت زیر استفاده کنیم:

[DynamoDBTable("Customers")]
public class Customer
{
    [DynamoDBProperty("address"), DynamoDBTypeConverter(typeof(AddressConverter))]
    public Address Address { get; set; }

    // ... other properties and methods
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دست زدن به اشیاء تو در تو
گاهی اوقات، مدل داده شما ممکن است شامل اشیاء تودرتو باشد، جایی که یک شی شامل شی دیگری به عنوان ویژگی است. در این موارد، می توانید از ترکیبی از مبدل های سفارشی برای مدیریت اشیاء تودرتو استفاده کنید.

برای مثال، فرض کنید مدل داده زیر را داریم:

using Amazon.DynamoDBv2.DataModel;
using Newtonsoft.Json;
using System.Collections.Generic;

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
}

public class Customer
{
    public string CustomerId { get; set; }
    public Address Address { get; set; }
}

public class Order
{
    public string OrderId { get; set; }
    public Customer Customer { get; set; }
}

public class AddressConverter : IPropertyConverter
{
    public DynamoDBEntry ToEntry(object value)
    {
        return new Primitive(JsonConvert.SerializeObject(value));
    }

    public object FromEntry(DynamoDBEntry entry)
    {
        return JsonConvert.DeserializeObject(entry.AsString(), typeof(Address));
    }
}

public class CustomerConverter : IPropertyConverter
{
    public DynamoDBEntry ToEntry(object value)
    {
        var customer = (Customer)value;
        var address = new AttributeValue(new AddressConverter().ToEntry(customer.Address));

        var map = new Dictionary<string, AttributeValue>
        {
            {"CustomerId", new AttributeValue(customer.CustomerId)},
            {"Address", address}
        };

        return new AttributeValue(map);
    }

    public object FromEntry(DynamoDBEntry entry)
    {
        var map = entry.M;

        return new Customer
        {
            CustomerId = map["CustomerId"].S,
            Address = (Address)new AddressConverter().FromEntry(map["Address"].S)
        };
    }
}

public class OrderConverter : IPropertyConverter
{
    public DynamoDBEntry ToEntry(object value)
    {
        var order = (Order)value;
        var customer = new AttributeValue(new CustomerConverter().ToEntry(order.Customer));

        var map = new Dictionary<string, AttributeValue>
        {
            {"OrderId", new AttributeValue(order.OrderId)},
            {"Customer", customer}
        };

        return new AttributeValue(map);
    }

    public object FromEntry(DynamoDBEntry entry)
    {
        var map = entry.M;

        return new Order
        {
            OrderId = map["OrderId"].S,
            Customer = (Customer)new CustomerConverter().FromEntry(map["Customer"].M)
        };
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به طور خلاصه، نحوه استفاده از مبدل های سفارشی در DynamoDB برای نقشه برداری بین مدل داده برنامه شما و مقادیر ویژگی DynamoDB را بررسی کرده ایم. به طور خاص، ما به Enum Converter و Value Object Converter به‌عنوان روش‌هایی برای نگاشت enums C# و اشیاء ارزش، به ترتیب، به مقادیر ویژگی DynamoDB نگاه کرده‌ایم. ما همچنین برخی از موضوعات پیشرفته را پوشش داده ایم، مانند مدیریت اشیاء تودرتو و استفاده از کتابخانه های سریال سازی/آشینه سازی سفارشی.

ممنون که خواندید ❤️ .

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا