我的业务中要用到获取产品"实时"库存的逻辑,我在实体层Model建了一个类为Product,并为类建了个字段Stock用来存储此Product的库存;
以下是代码片断:public abstract class ProductBase
    {
        ......        private int stock = 0;
        [Description("库存量")]
        public int Stock
        {
            get
            {
                return stock;
            }
            set
            {
                stock = value;
            }
        }        ......
    }代码这样写我觉得有个问题,那就是库存的实时性非常强,而属性Stock的get选择器并没有明确指出如何获取库存,我认为的理想情况是将它改为下面的样子:        private int stock = 0;
        [Description("库存量")]
        public string Stock
        {
            get
            {
                return BLL.GetProductStock(productID);  //调用BLL层的方法获得库存量
            }
            //set
            //{
            //    stock = value;
            //}
        }但现在的问题是:业务逻辑层BLL已层引用了实体层Model,Model层再引用BLL层就会出现交叉引用而出错,请问如何解决这个问题?

解决方案 »

  1.   

    不好意思粗心了,代码片断2这行:public string Stock 应该为 public int Stock
      

  2.   

    去掉Stock属性...增加一个GetStock方法...
      

  3.   

    回楼上二位:
    GetStock方法 与 virtual 方法有没有摆脱 业务逻辑层的实现?
    也就是说,GetStock() 方法是要不要调用业务逻辑层的代码呢?
      

  4.   

    virtual 能够重载,即在子类中既可以使用基类的方法,也可以使用子类中定义的方法
      

  5.   

    virtual我了解,我的问题是如何解决 Model层与 BLL 层的交叉引用?
    或者说,如何让GetStock方法直接在Model能实现而有调用BLL层代码?
      

  6.   

    Model层直接写
    public int Stock
    {
        get
        {
            return stock;
        }
    }
    你怎么会想到Model层引用BLL层?
      

  7.   

    用接口或抽象类...上面说的 virtual 方法也是让你在BLL层继承...不是让你调用BLL层...