Is refactor method to field in this case?

原创 2016年12月22日 11:13:00
public class WebContext(){

    private HttpServletRequest request;

    private WebContext(){};
    public static WebContext newPrototype(HttpServletRequest request){
        WebContext wc = new WebContext();
        wc.request = request;
    }

    public boolean isLogin(){
        return request.getSession().getAttribute(CONSTANT.SESSION_TOKEN)==null;
    }

    private RemoteUser getRemoteUser(){
        RemoteUser ru = new RemoteUser();
        if(isLogin()){
            ru = ...;    //...get remote user info from remote server
        }
        return ru;
    }

    public User getUser(){
        User user = new User();
        if(isLogin()){
            RemoteUser ru = getRemoteUser();
            long userid = ru.getUserid();
            user = ...;  //... get user info from db by userid;
        }
        return user;
    }

    public Trader getTrader(){
        Trader trader = new Trader();
        if(isLogin()){
            RemoteUser ru = getRemoteUser();
            long traderid = ru.getTraderid();
            trader = ...;  //... get trader info from db by traderid;
        }
        return trader;
    }
}

this make me uncomfortable, getUser() and getTrader() all must invoke getRemoteUser() firstly. so i refactor this class to

public class WebContext(){

    private HttpServletRequest request;
    private boolean isLogin;
    private RemoteUser ru;

    private WebContext(){};
    public static WebContext newPrototype(HttpServletRequest request){
        WebContext wc = new WebContext();
        wc.request = request;
        wc.islogin = request.getSession().getAttribute(CONSTANT.SESSION_TOKEN)==null;
        wc.ru = getRemoteUser();
    }

    public boolean isLogin(){
        return isLogin;
    }

    private RemoteUser getRemoteUser(){
        RemoteUser ru = new RemoteUser();
        if(isLogin){
            ru = ...;    //...get remote user info from remote server
        }
        return ru;
    }

    public User getUser(){
        User user = new User();
        if(isLogin){
            long userid = ru.getUserid();
            user = ...;  //... get user info from db by userid;
        }
        return user;
    }

    public Trader getTrader(){
        Trader trader = new Trader();
        if(isLogin){
            long traderid = ru.getTraderid();
            trader = ...;  //... get trader info from db by traderid;
        }
        return trader;
    }
}

refactored construct method init RemoteUser once. but i am confident about refactored construct method is not good for reused.i am confused how should i do for good code design;

参考资料

stack overflow跳点

AS技巧合集「编码技巧篇」

29. 列选择/块选择(Column Selection) 描述:正常选择时,当你向下选择时,会直接将当前行到行尾都选中,而块选择模式下,则是根据鼠标选中的矩形区域来选择。 ...
  • hxqneuq2012
  • hxqneuq2012
  • 2016年12月26日 13:53
  • 141

手把手教你重构!-Refactor

 使用 Eclipse 自动重构特性的方法与原因文档选项打印本页将此页作为电子邮件发送级别: 初级David Gallardo (d...
  • jackyren007
  • jackyren007
  • 2009年11月23日 20:27
  • 3314

Eclipse重构——Move Method(I)

Motivation 出现依恋情节或者职责不清,应将行为移动到正确的类中。 Mechanics 1  检查源函数中所使用一切特性(包括field和函数) 2  检查子类和父类是否也定义...
  • crylearner
  • crylearner
  • 2013年04月11日 22:38
  • 1869

java中级-14-反射-反射概念及Field、Method、Constructor的应用

------- android培训、java培训、期待与您交流! ---------- 反射          反射是Java的一项重要功能。对在Java运行环境中的一个任意类,反射提供了...
  • Tanzwind
  • Tanzwind
  • 2015年06月01日 22:28
  • 1463

重构技术在Android Studio中的应用

内容总结自《重构—改善既有代码的设计》读书笔记 主要说明下Android Studio快捷操作支持的在这本书重构列表里的部分重构技术...
  • xingjiyuan26
  • xingjiyuan26
  • 2017年04月07日 17:01
  • 369

黑马程序员——反射——Class、Constructor、Field、Method及简单框架原理

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------反射的基石:Class java程序中的各个java类属于同一类事务,描述这类事务的java类名...
  • u013221229
  • u013221229
  • 2015年11月10日 15:16
  • 476

No appropriate method, property, or field bags for class dataset

今天碰见一个matlab很奇怪的问题: 我把第24行命令拷贝到Command Window中运行是正确的: 但我如果直接运行第24行命令就会出错: %------...
  • lsxpu
  • lsxpu
  • 2012年08月22日 11:17
  • 1498

JAVA菜鸟入门(15) static method/ field与normal method/field的相互调用关系

1.   normal method uses static field => fine public class StaticFieldDemo { public static int stat...
  • feliciafay
  • feliciafay
  • 2015年05月18日 14:44
  • 958

Android Studio 技巧之【Extract Parameter】

快捷键:Ctrl + Alt + P (Windows/Linux上), Cmd + Alt + P (OS X). Android Studio 里抽取参数(Extract Parameter)的快...
  • markhulu
  • markhulu
  • 2017年03月08日 12:43
  • 377

java.lang.ClassFormatError Duplicate field name&signature in class file XXXXXX

2012-7-5 15:06:25org.apache.catalina.core.StandardWrapperValve invoke 严重:Servlet.service() for serv...
  • ylchou
  • ylchou
  • 2012年07月12日 12:06
  • 7122
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Is refactor method to field in this case?
举报原因:
原因补充:

(最多只允许输入30个字)