一个简单的util类,也要追求写的“美”


项目中引入了eu.bitwalker.UserAgentUtils包,用于获取登录客户端的访问设备类型,比如用户用手机iphone12登录的,则获取的访问设备类型为iphone12

点击查看代码

  eu.bitwalker
  UserAgentUtils
  1.21

于是我将这块获取访问设备类型相关代码写成了一个工具类,代码如下
package com.leadmap.common.utils;

import eu.bitwalker.useragentutils.Browser;
import eu.bitwalker.useragentutils.OperatingSystem;
import eu.bitwalker.useragentutils.UserAgent;

import javax.servlet.http.HttpServletRequest;

/**
 * Company: xxx
 *
 * @description: 返回请求上下文的浏览器及操作系统信息
 * @author: sjbm
 * @date: 2021/10/20 10:14
 */
public class OSUtils {

    /**
     * 返回操作系统信息
     * @param request 请求上下文
     * @return OperatingSystem
     */
    public static OperatingSystem getOperatingSystem(HttpServletRequest request) {
        return parseAgent(request).getOperatingSystem();
    }

    /**
     * 返回浏览器信息
     * @param request 请求上下文
     * @return Browser
     */
    public static Browser getBrowser(HttpServletRequest request) {
        return parseAgent(request).getBrowser();
    }

    private static UserAgent parseAgent(HttpServletRequest request ) {
        String agent=request.getHeader("User-Agent");
        //解析agent字符串
        return UserAgent.parseUserAgentString(agent);
    }
}

怎么“美”

这个Utils类做的事为从HttpServletRequest中取得浏览器对象与操作系统对象信息并返回
函数只做一件事,函数通过从HttpServletRequest获取信息解析并返回
命名,类名不符合驼峰命名法,函数的命名直接表达调用的意图
给类与函数加上必要的描述性注释
格式化代码,让类中代码对称工整,布局简明

整洁代码需要不停的去重构,去尝试,你目前所能认知的最优代码,过段时间你再看可能会有新的重构的思路。

点击查看代码
package com.leadmap.common.utils;

import eu.bitwalker.useragentutils.Browser;
import eu.bitwalker.useragentutils.Manufacturer;
import eu.bitwalker.useragentutils.OperatingSystem;
import eu.bitwalker.useragentutils.UserAgent;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * Company: XXXX
 *
 * @description: 返回请求上下文的浏览器及操作系统信息
 * @author: sjbm
 * @date: 2021/10/20 10:14
 */
public class UserAgentUtils {

    /**
     * 返回浏览器名称
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getBrowserName(HttpServletRequest request) {
        Browser browser = getBrowser(request);
        return browser.getName();
    }

    /**
     * 返回浏览器类型
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getBrowserType(HttpServletRequest request) {
        Browser browser = getBrowser(request);
        if (browser.getBrowserType() != null) {
            return browser.getBrowserType().getName();
        }
        return "";
    }

    /**
     * 返回浏览器家族
     *
     * @param request 请求上下文
     * @return String
     */
    public static Browser getBrowserGroup(HttpServletRequest request) {
        Browser browser = getBrowser(request);
        return browser.getGroup();
    }

    /**
     * 返回浏览器生产厂商id
     *
     * @param request 请求上下文
     * @return String
     */
    public static short getBrowserManufacturerId(HttpServletRequest request) {
        Browser browser = getBrowser(request);
        if (browser.getManufacturer() != null) {
            return browser.getManufacturer().getId();
        }
        return 0;
    }

    /**
     * 返回浏览器生产厂商名称
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getBrowserManufacturerName(HttpServletRequest request) {
        Browser browser = getBrowser(request);
        if (browser.getManufacturer() != null) {
            return browser.getManufacturer().getName();
        }
        return "";
    }

    /**
     * 返回浏览器使用的渲染引擎名称
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getBrowserRenderingEngine(HttpServletRequest request) {
        Browser browser = getBrowser(request);
        if (browser.getRenderingEngine() != null) {
            return browser.getRenderingEngine().getName();
        }
        return "";
    }

    /**
     * 返回浏览器版本
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getBrowserVersion(HttpServletRequest request) {
        UserAgent userAgent = parseAgent(request);
        if (userAgent.getBrowserVersion() != null) {
            return userAgent.getBrowserVersion().getVersion();
        }
        return "";
    }

    /**
     * 返回浏览器的主要版本
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getBrowserMajorVersion(HttpServletRequest request) {
        UserAgent userAgent = parseAgent(request);
        if (userAgent.getBrowserVersion() != null) {
            return userAgent.getBrowserVersion().getMajorVersion();
        }
        return "";
    }

    /**
     * 返回浏览器的次要版本
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getBrowserMinorVersion(HttpServletRequest request) {
        UserAgent userAgent = parseAgent(request);
        if (userAgent.getBrowserVersion() != null) {
            return userAgent.getBrowserVersion().getMinorVersion();
        }
        return "";
    }

    /**
     * 返回操作系统名称
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getOSName(HttpServletRequest request) {
        OperatingSystem operatingSystem = getOperatingSystem(request);
        return operatingSystem.getName();
    }

    /**
     * 返回访问的设备类型
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getDeviceType(HttpServletRequest request) {
        OperatingSystem operatingSystem = getOperatingSystem(request);
        if (operatingSystem.getDeviceType() != null) {
            return operatingSystem.getDeviceType().getName();
        }
        return "";
    }

    /**
     * 返回操作系统家族
     *
     * @param request 请求上下文
     * @return String
     */
    public static OperatingSystem getGroup(HttpServletRequest request) {
        OperatingSystem operatingSystem = getOperatingSystem(request);
        return operatingSystem.getGroup();
    }

    /**
     * 返回操作系统生产厂商id
     *
     * @param request 请求上下文
     * @return String
     */
    public static short getManufacturerId(HttpServletRequest request) {
        OperatingSystem operatingSystem = getOperatingSystem(request);
        if (operatingSystem.getDeviceType() != null) {
            return operatingSystem.getManufacturer().getId();
        }
        return 0;
    }

    /**
     * 返回操作系统生产厂商名称
     *
     * @param request 请求上下文
     * @return String
     */
    public static String getManufacturerName(HttpServletRequest request) {
        OperatingSystem operatingSystem = getOperatingSystem(request);
        if (operatingSystem.getDeviceType() != null) {
            return operatingSystem.getManufacturer().getName();
        }
        return "";
    }

    /**
     * 返回操作系统信息
     *
     * @param request 请求上下文
     * @return OperatingSystem
     */
    public static OperatingSystem getOperatingSystem(HttpServletRequest request) {
        return parseAgent(request).getOperatingSystem();
    }

    /**
     * 返回浏览器信息
     *
     * @param request 请求上下文
     * @return Browser
     */
    public static Browser getBrowser(HttpServletRequest request) {
        return parseAgent(request).getBrowser();
    }

    private static UserAgent parseAgent(HttpServletRequest request) {
        String agent = request.getHeader("User-Agent");
        //解析agent字符串
        return UserAgent.parseUserAgentString(agent);
    }
}

相关