zoukankan      html  css  js  c++  java
  • 浅谈 “ 站内信 ” 的实现

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

         之前看过,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
        }
  • 相关阅读:
    Python集成开发环境Pycharm+Git+Gitee(码云)
    【AI图像识别二】JMeter轻松实现大数据量AI图像识别接口测试
    pycharm中django同步数据库问题
    绿盟-WEB应用漏洞扫描系统
    Python脚本轻松实现批量图片重命名
    Linxu下JMeter进行接口压力测试
    依赖Anaconda环境安装TensorFlow库,避免采坑
    【AI图像识别一】人脸识别测试探索
    Postgresql死锁的处理
    PostgreSQL 9.5,带来 UPSERT 等新特性
  • 原文地址:https://www.cnblogs.com/qinjian123/p/2533444.html
Copyright © 2011-2022 走看看