Java開発でnullを処理する際の問題

ビジネスコードが多くのヌルチェックでいっぱいになると、私は本当に非常に壊れていると感じます。私のビジネスロジックは実際には数行しかありません。以下の呼び出し元メソッドには、主要なビジネスロジックが含まれています。

private String getDevId(String id){
    String ret = queryDevIdFromDB(id);
    if (Objects.isNull(ret)) {
        return null;
    }
    return ret;
} 

private String queryDevIp(String devId){
    String ret = queryDevIpFromDB(id);
    if (Objects.isNull(ret)) {
        return null;
    }
    return ret;
} 

public long caller(String id) {
    //input check
    String devId = getDevId(id);
    if (Objects.isNull(devInfo)){
        Log.error("cannot find this dev: {}", id);
        return null;
    }

    String ip = queryDevIp(devId);
    if (Objects.isNull(ip)) {
        Log.error("cannot find ip by devId: {}", devId);
    }
    //do something using this ip
    return convertIpToLong(ip);
}

上記のサンプルコードの主な目的は、IDに従ってデバイスのIPをクエリすることですが、多数のnullチェックでいっぱいです。これは、読み取りとメンテナンスに影響を与えるCなどのほぼプロセス指向のコードです。 。

Javaは、オブジェクト指向の高級言語として例外メカニズムを提供するため、これらのメソッドをこのように設計できます。

private String getDevId(String id){
    String ret = queryDevIdFromDB(id);
    if (Objects.isNull(ret)) {
        //运行时异常
        throw MyRTException("cannot find devId by id: " + id);
    }
    return ret;
}

private String queryDevIp(String devId){
    String ret = queryDevIpFromDB(id);
    if (Objects.isNull(ret)) {
        throw MyRTException("cannot find ip by devId: " + devId);
    }
    return ret;
} 

public long caller(String id) throw MyException {
    //ignore input check
    try {
        String devId = getDevId(id);
        String ip = queryDevIp(devId);
        //do something using this ip
        return convertIpToLong(ip);
    } catch (MyRTException mrte) {
        LOG.error("get ip failed: ", mrte);
        throws new MyException("get ip failed");
    }
}

このようにして、ビジネスコードに集中し、例外ロジックを集中させることができます。もちろん、実際の開発には多くの例外があり、さまざまな例外を注意深く設計する必要があります。

おすすめ

転載: blog.csdn.net/lx1848/article/details/81256430