CSharp: Lazy Load Pattern in donet core 6
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuLazyLoad.DuGhosts
{
    /// <summary>
    /// Lazy Load Pattern
    /// </summary>
    public enum LoadStatus
    {
        /// <summary>
        /// 无加载
        /// </summary>
        Unloaded,
        /// <summary>
        /// 正加哉
        /// </summary>
        Loading,
        /// <summary>
        /// 已加载
        /// </summary>
        Loaded,
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuLazyLoad.DuGhosts
{
    /// <summary>
    /// Lazy Load Pattern
    /// </summary>
    public class GhostCollege : DomainObject
    {
        private string? _missionStatement;
        private int? _numberOfStudents;
        private Library? _library;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        public GhostCollege(int id)
            : base(id)
        {
            Id = id;
            Console.WriteLine("学院初始化完成.");
        }
        /// <summary>
        /// 
        /// </summary>
        public string MissionStatement
        {
            get
            {
                LoadIfNecessary();
                return _missionStatement!;
            }
            set => _missionStatement = value;
        }
        /// <summary>
        /// 
        /// </summary>
        public int NumberOfStudents
        {
            get
            {
                LoadIfNecessary();
                return _numberOfStudents!.Value;
            }
            set => _numberOfStudents = value;
        }
        /// <summary>
        /// 
        /// </summary>
        public Library Library
        {
            get
            {
                LoadIfNecessary();
                return _library!;
            }
            set => _library = value;
        }
        /// <summary>
        /// 
        /// </summary>
        public void ShowDetails() =>
            Console.WriteLine(
                $"大学的使命是: '{MissionStatement}'.\n" +
                $"这所学院图书馆拥有藏书 {Library.NumberOfBooks} 册, " +
                $"成立于 {Library.EstablishmentDate.ToShortDateString()}.");
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        protected override object[] FetchData() =>
            new object[3]
            {
            "学习、发现、治愈、创造,让世界变得更美好",
            850,
            new Library(),
            };
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dataRow"></param>
        protected override void ApplyLoadedData(object[] dataRow)
        {
            Console.WriteLine("数据加载中...");
            _missionStatement = (string)dataRow[0];
            _numberOfStudents = (int)dataRow[1];
            _library = (Library)dataRow[2];
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuLazyLoad.DuGhosts
{
    /// <summary>
    /// Lazy Load Pattern
    /// </summary>
    public abstract class DomainObject
    {
        private LoadStatus _status;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        protected DomainObject(int id)
        {
            Id = id;
        }
        public int Id { get; init; }
        public bool IsGhost => _status == LoadStatus.Unloaded;
        public bool IsLoaded => _status == LoadStatus.Loaded;
        /// <summary>
        /// Note template method pattern.
        /// </summary>
        public virtual void LoadIfNecessary()
        {
            if (!IsGhost)
            {
                return;
            }
            var dataRow = FetchData();
            MarkAsLoading();
            ApplyLoadedData(dataRow);
            MarkAsLoaded();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        protected abstract object[] FetchData();
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dataRow"></param>
        protected abstract void ApplyLoadedData(object[] dataRow);
        /// <summary>
        /// 
        /// </summary>
        private void MarkAsLoading() => _status = LoadStatus.Loading;
        /// <summary>
        /// 
        /// </summary>
        private void MarkAsLoaded() => _status = LoadStatus.Loaded;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Geovin.Du.DuLazyLoad.DuGhosts
{
    /// <summary>
    /// Lazy Load Pattern
    /// </summary>
    public class CollegeFactory
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public GhostCollege CreateFromId(int id) => new(id);
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Geovin.Du.BuildingBlocks;
namespace Geovin.Du.DuLazyLoad.DuGhosts
{
    /// <summary>
    /// Lazy Load Pattern
    /// </summary>
    public static class GhostsExecutor
    {
        /// <summary>
        /// 
        /// </summary>
        public static void Execute()
        {
            ConsoleExtension.WriteSeparator("Lazy Load Pattern:Ghosts demo");
            var collegeFactory = new CollegeFactory();
            var college = collegeFactory.CreateFromId(1);
            // College library shouldn't have been constructed before calling ShowDetails method.
            Console.WriteLine("给我更多关于这所大学的细节!");
            college.ShowDetails();
            Console.WriteLine("\n给我更多关于这所大学的细节!");
            college.ShowDetails();
        }
    }
}
调用:
Geovin.Du.DuLazyLoad.DuGhosts.GhostsExecutor.Execute();
输出:
Lazy Load Pattern:Ghosts demo -------------------------------------------------- 学院初始化完成. 给我更多关于这所大学的细节! 加载库... 数据加载中... 大学的使命是: '学习、发现、治愈、创造,让世界变得更美好'. 这所学院图书馆拥有藏210000册 ,成立于 2008/5/28. 给我更多关于这所大学的细节! 大学的使命是: '学习、发现、治愈、创造,让世界变得更美好'. 这所学院拥有图书馆210000 书 和 成立于 2008/5/28.
    哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号