浅谈 “ 站内信 ” 的实现

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

     之前看过,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
    }
原文地址:https://www.cnblogs.com/qinjian123/p/2533444.html