移动/反射/引用类到/在另一个方法中

时间:2017-09-06 14:45:09

标签: c# class e-commerce checkout

public class OrderCard
{

    public string cardnumber { get; set; }
    public string cardname { get; set; }
    public string cardexpire { get; set; }
..
..
}

public class Order
{
    public static Order GetOrder()
    {
        if (HttpContext.Current.Session["Cart-Order"] != null)
            return (Order)HttpContext.Current.Session["Cart-Order"];
        else
            return new Order();
    }

    public int OrderId { get; set; }
    public string billingName { get; set; }
    public string billingAddress { get; set; }

    public OrderCard Card { get; set; }

    public bool IsNewCustomer { get; set; }
...
}

我为结帐流程创建了一些上面的类 我通过ajax和json发送/发布页面信息(用于填写订单类)

问题#1:是不是将cOrder发送到actionPayment()然后收回?

问题2:这是一种真正的方法(为用户的结算信息,购物卡信息,卡信息创建类)并将其转移到会话然后进行/修改电子商务网站的所有页面会话中的此类信息?

*****对不起我的英语,希望我能解释一下*****

***** checkout.aspx *****

[WebMethod(EnableSession = true)]
public static string SaveBillingAndPay(Order cOrder)
{

    OrderCard cardContainer = cOrder.Card;
    ..
    ..
    cOrder = null;
    cOrder = Order.GetOrder();
    cOrder.Card = cardContainer;

    cOrder = actionPayment(cOrder);

    ..
    ..
    return "thanks.aspx";
}

private Order actionPayment(Order cOrder)
{
    // do things

    return cOrder;
}

1 个答案:

答案 0 :(得分:0)

问题#1:是不是将cOrder发送到actionPayment()然后收回?

答案1:是的,这是处理订单的完全有效方法。在电子商务应用程序中,整个订单详细信息将存储在一个单一实体中。请记住,它是您传递的类的对象,它将通过其内存引用位置的副本传递。除非您通过网络传递整个对象,否则不会始终将整个对象复制到参数中。您正在传入一个对象,它执行了一些操作,填充了更多的字段,然后您将对象返回更多详细信息。

问题2:这是一种真正的方法(为用户的结算信息,购物卡信息,卡信息创建类)并将其转移到Session然后在其所有页面中执行/修改此类信息电子商务网站的会话?

答案2:取决于。会话存储在哪里?主要在电子商务应用程序中,会话存储在SQL Server等数据库中。它可能看起来很糟糕但它有助于某些事情如果用户想要在中途离开他的会话并且明天返回以完成订单,他将返回他最后一次加载的会话。有了这个,他将把整个产品选择重新放回购物车。他将在订单屏幕上返回未提交的订单详细信息,基本上,他可以从他离开的地方继续。订单完成并付款后,这些详细信息必须转换为订单并从会话中删除。如果您的应用程序完全存储此会话详细信息并且仅存储在内存中,那么您执行的操作不正确此外,除非用户希望将其保存以供日后交易,否则请勿以纯文本或其他方式在数据库中存储用户的信用卡或付款或银行帐户详细信息。此外,在这些情况下,不应存储PIN或CVV号或有效期。仅支付由支付网关提供的商店交易ID,以便在发生问题时可以将交易映射回来,如果您的交易政策允许,则最多可以映射最后4位数。