• 浅谈 “ 站内信 ” 的实现


         最近一直在写站内信模块,现在想好好总结一下。和大家一起学习交流。

         之前看过,AlphaThink 写的 “两年后 再议站内信”。个人感觉写的很不错的。但是我们的网站没有那么多的访问量,所以,群发采用的是全部持久化到数据库。站内信发送类型包括  分为 ①点到点 ②点到局部 ③点到全部。

       我们的网站采用的是领域驱动设计,下面我主要介绍应用层DTO 和提供的Service 设计

    LetterDTO

     /// <summary>
            /// 站内信标识。
            /// </summary>
            public Guid Id { get; set; }
    
            /// <summary>
            /// 站内信标题。
            /// </summary>
            public string Title { get; set; }
    
            /// <summary>
            /// 站内信内容。
            /// </summary>
            public string Content { get; set; }
    
            /// <summary>
            /// 发信人。
            /// </summary>
            public Guid SenderId { get; set; }
    
            /// <summary>
            /// 发件人关联用户实体。
            /// </summary>
            public UserDTO Sender { get; set; }
    
            /// <summary>
            /// 站内信类别。
            /// </summary>
            public LetterAppTypes LetterAppType { get; set; }
    
            /// <summary>
            /// 发件人是否删除。
            /// </summary>
            public bool IsDelete { get; set; }
    
            /// <summary>
            /// 站内信是否置顶。
            /// </summary>
            public bool IsTop { get; set; }
    
            /// <summary>
            /// 收件人集合。
            /// </summary>
            public List<LetterReceiverDTO> Receivers{ get; set; }
    
    
            /// <summary>
            /// 发送时间。
            /// </summary>
            public DateTime SendTime { get; set; }

    LetterReceiverDTO

    /// <summary>
            /// 收件人标识。
            /// </summary>
            public Guid Id { get; set; }
    
            /// <summary>
            /// 收件人关联站内信标识。
            /// </summary>
            public Guid LetterId { get; set; }
    
            /// <summary>
            /// 收件人Id。
            /// </summary>
            public Guid ReceiverId { get; set; }
    
            /// <summary>
            /// 收件人关联用户实体。
            /// </summary>
            public UserDTO Receiver { get; set; }
    
            /// <summary>
            /// 收件人是否读取。
            /// </summary>
            public bool IsRead { get; set; }
    
            /// <summary>
            /// 收件人是否删除。
            /// </summary>
            public bool IsDelete { get; set; }

    LetterAppTypes  (User 是用户间的站内信,System 是管理员发的站内性能(局部) Top 是管理员发给所有用户的站内信 (业务需要 全部置顶))

     /// <summary>
        /// 站内信类型枚举
        /// </summary>
        [Flags]
        public enum LetterAppTypes
        {
            /// <summary>
            /// 用户站内信
            /// </summary>
            User = 1,
    
            /// <summary>
            /// 系统站内信
            /// </summary>
            System = 2,
    
            /// <summary>
            /// 置顶站内信
            /// </summary>
            Top = 4
        }
  • 相关阅读:
    深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)
    ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline Part I
    IIS Server Variables(IIS 服务器变量)
    .Net源码之Page类(二)
    博客改变生活
    目录、路径、虚拟路径
    Windows 7 Beta 1 7000
    《Visual Studio Hacks 》读书笔记 (十二)
    新建XML文件
    另一个分页函数
  • 原文地址:https://www.cnblogs.com/qinjian123/p/2533444.html
Copyright © 2020-2023  润新知