.net 如何基于CustomerMap两个类属性

hjzp0vay  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(124)

我有一个应用程序,我通过Shopify webhooks获得Shopify订单。现在我有一个问题是,当我只有一个客户端时,我MapShopify通过传统的方式接收订单,并将其保存到数据库中。
现在我又有了两个客户端,所有客户端都希望根据它们Map类字段。
假设我有一个Shopify订单对象,包含以下详细信息:

{
        "id": 4655316533326,
        "checkout_id": 29212941516878,
        "user_id": 71894499406,
        "note": "hello world",
        "subtotal_price_set": {
            "shop_money": {
                "amount": "109.00",
                "currency_code": "USD"
            }
        "total_tax": "0.00",
        "total_tax_set": {
            "shop_money": {
                "amount": "0.00",
                "currency_code": "USD"
            },
            "presentment_money": {
                "amount": "0.00",
                "currency_code": "USD"
            }
        }

}

我的应用程序中也有一个名为Order的类,它包含以下一些属性:

public class Order {

    public string OrderNo { get; set; }
    public string DebtorID { get; set; }
    public virtual string DeliveryAddress1 { get; set; }
    public virtual string DeliveryAddress2 { get; set; }
    public virtual string RIRTNo { get; set; }
    public List<OrderLine> Lines { get; set; }
    public string OrderNote { get; set; }
    Public Customer Customer { get; set; }

}

现在,一些客户希望我将shopify order Note属性Map到我的Order.Customer.Note
且想要将Note属性Map为Order.Note
OrderNo相同。一个人想直接用Order.OrderNoMap它,另一个人想用'RIRTNo''Map它
如何处理这种情况?
我在数据库上创建了一个表来保存这些Map信息。
我可以从Shopify订单中获取客户详细信息,然后进行数据库查询以获取Map信息,但问题是数据库中的详细信息是字典式结构。
考虑以下x客户的Map信息:关键字是Shopify对象属性

"Order": {
"note": "Customer.Note"
"Id": "OrderId"
}

key是Shopify属性名,value是我的应用程序对象名,但我不知道如何根据这些信息创建它们。

iqih9akk

iqih9akk1#

基本上,这取决于客户的想法。
所以如果你还没有任何办法Map的话。
您可以将您的客户分成3或4个或更多的组。
则可以使用工厂设计模式
也可以根据新字段“CustomerGroupId”使用“if”语句,该字段应随实体一起添加到代码中
然后道:

if (Customer.CustomerGroupId == 1)
{
 // do mapping like Order.Note = shopify.Note
}
else if (Customer.CustomerGroupId == 1)
{
 // do mapping like Order.Customer.Note = shopify.Note
}
ct2axkht

ct2axkht2#

一个非常简单的选择是使用Order类中的“mapping info”,然后修改OrderNote属性以使用该Map来获取/设置注解。
例如,建立提供Map的方法:

private string _map = "note"; // default value when SetMap is not used

public void SetMap(string map)
    => _map = map;

然后OrderNote变为:

private string _note;

public string OrderNote { 
    get => GetNote();
    set => SetNote(value);
}

private string GetNote()
{
    if(_map == "note") return _note;
        
    if(_map == "Customer.Note") return Customer.Note;
    
    throw new ArgumentOutOfRangeException("Invalid _map");
}

private void SetNote(string value)
{
    if(_map == "note") { _note = value; return; }
        
    if(_map == "Customer.Note") { Customer.Note = value; return; }
    
    throw new ArgumentOutOfRangeException("Invalid _map");
}

对每种类型的Map使用相同的模式。

相关问题