如何做一个中间层业务对象的延迟加载部分?

时间:2011-02-14 16:02:55

标签: c# asp.net lazy-loading business-objects

我想构建一个业务对象,例如员工类,但我知道80%的属性几乎不会被使用。所以我想知道如何使用构造函数中的重要属性创建对象,并且懒惰加载需要它们时使用的大麦(如果有的话)。

我正在使用带有c#的asp.net。

3 个答案:

答案 0 :(得分:2)

最明显的做法是,

public Constructor(Object importantPropertyValue)
{
    this.ImportantProperty = importantPropertyValue;
}

public Object ImportantProperty{get; private set;}


private Object _unimportantProperty;

public Object UnimportantProperty
{
    Get
    {
        if(_unimportantProperty == null)
        {
            _unimportantProperty = FetchUnimportantPropertyValue() // how ever you load it
        }

        return _unimportantProperty;
    }

答案 1 :(得分:2)

如果您使用的是纯商务课程,请使用System.Lazy class

此类(.net v4 minimum)允许您以线程安全的方式将容器的填充推迟到第一次调用:

public class TestLazy
{
    private Lazy<MyClass> m_lazyObj;


    public MyClass MyClassInstance
    {
        get { return m_lazyObj.Value; }
    }


    public TestLazy()
    {
        m_lazyObj = new Lazy<string>(() => DoTheHeavyJobToGetMyClassInstance);
    }
}

如果您正在使用ORM,正如其他人在帖子中所说,延迟加载可能会由ORM引擎提供。

[编辑]:添加了代码示例

答案 2 :(得分:0)

假设您在讨论从数据库延迟加载,那么您可以使用Entity Framework 4.0构建域对象,并免费获得延迟加载。