java服务器开发教程 再谈websocket论架构设计(4)

电脑杂谈  发布时间:2018-02-21 00:52:48  来源:网络整理

User对象中,保存了用户授权后的很多基础权限信息,和用户信息。

如下:

public interface UserDetails extends Serializable {
  Collection<? extends GrantedAuthority> getAuthorities();

  String getPassword();

  String getUsername();

  boolean isAccountNonExpired();

  boolean isAccountNonLocked();

  boolean isCredentialsNonExpired();

  boolean isEnabled();
}

方法 #isCustomer 和 #isCustomerService 用来判断用户当前是否是顾客或者是客服。

登录用户状态

public interface StatesManager {

    enum StatesManagerEnum{
        ON_LINE,
        OFF_LINE
    }

    void changeState(User user , StatesManagerEnum statesManagerEnum);

    StatesManagerEnum currentState(User user);

}

设计登录状态时,应存在登录状态管理相关的状态管理器,此管理器只负责更改用户状态和获取用户状态相关操作。

并不涉及其他关联逻辑,这样的代码划分,更有助于面向接口编程的扩展性

分配策略

public interface DistributionUsers {
  void distribution(User user);
}

分配角色接口设计,只关注传入的用户,并不关注此用户是客服或者用户,具体需要如何去做,由具体的分配策略来决定。

关系保存策略

public interface RelationHandler {

  void saveRelation(User customerService,User customer);

  List<User> listCustomers(User customerService);

  void deleteRelation(User customerService,User customer);

  void saveCustomerService(User customerService);

  List<User> listCustomerService();

  User getCustomerService(User customer);

  boolean exist(User user);

  User availableNextCustomerService();

}

关系保存策略,亦是只关注关系保存相关,并不在乎于保存到哪个存储介质中。

实现类由Inmemory还是redis还是mysql,它并不专注。

但是,此处需要注意,对于这种关系保存策略,开发测试时,并不涉及高可用,可将Inmemory先做出来用于测试。

开发功能同时,相关同事再来开发其他介质存储的策略,性能测试以及UAT相关测试时,应切换为此介质存储的策略再进行测试。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-86444-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 刘芃林
      刘芃林

      还在这充好人

    • 小鲸鱼
      小鲸鱼

      5555555555555

    • 真实之泪
      真实之泪

      我心情非常不好需要动真格的时候到了

    热点图片
    拼命载入中...