Is refactor method to field in this case?

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跳点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值