我有一个.java文件,其中存在许多方法,例如以下代码,如何重构以使其更清晰?
public static void e(Throwable tr) {
if (!debug) {
return;
}
if (!allowE) return;
if (tr == null) {
return;
}
String content = wrapContent(tr.getMessage());
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
customLogger.e(tag, content, tr);
}
public static void i(String content) {
if (!debug) {
return;
}
if (!allowI) return;
content = wrapContent(content);
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
customLogger.i(tag, content);
}
======更新==
这个类是android.util.Log的包装器,对于那些建议遵循命名约定的人来说:)。
答案 0 :(得分:0)
您可以将大部分代码删除为共享方法,然后从两个地方调用它。
public static voidcombined(String content, Throwable tr, bool allow)
{
if (!debug) return;
if (!allow) return;
content = wrapContent(content);
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
if (tr != null) {
customLogger.e(tag, content, tr);
} else {
customLogger.i(tag, content);
}
}
public static void e(Throwable tr) {
if (tr == null) {
return;
}
combined(tr.getMessage(), tr, allowE);
}
public static void i(String content) {
combined(content, null, allowI);
}
答案 1 :(得分:0)
if (!debug) {
return;
}
if (!allowE) return;
出现两次,我们可以将其放入方法isAllow()
String content = wrapContent(tr.getMessage());
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
也出现两次,customLogger.e和customLogger.i非常相似。让我们把它放进方法logInLevel
()。
所以,就像这样:
public static void e(Throwable tr) {
if (!isAllow()||tr==null) return ;
logInLevel(ERROR,tr.getMessage())
}
public static void i(String content) {
if (!isAllow()) return ;
logInLevel(INFO,content);
}
private static boolean isAllow(){
return debug&&allowE;
}
private static logInLevel(int level, String content){
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
if(level==INFO){
customLogger.i(tag, content);
}
else{//ERROR , you may add more log level here
customLogger.e(tag, content);
}
}
答案 2 :(得分:0)
我们的想法是应用关注点分离设计原则,以确保代码的不同部分能够解决特定问题。
/**
* Logs error message
* @param tr a {@link Throwable} object containing the message to log
*/
public static void logErrorMessage(Throwable tr) {
if (tr == null) {
return;
}
logContent(tr.getMessage(), allowE, debug, LogLevel.ERROR);
}
/**
* Logs message
* @param content the message to log
* @param allow some variable
* @param debug check the debug status
* @param ll message log level
*/
public static void logContent(String content, boolean allow, boolean debug , LogLevel ll) {
if (!debug) || !allow) return;
switch(ll) {
case ERROR:
customLogger.e(getTag(content), content);
break;
case INFO:
customLogger.i(getTag(content), content);
break;
default:
}
}
/**
* Generates tag
* @param content the message to log
* @return a tagged string
*/
public static String getTag(String content) {
content = wrapContent(content);
return generateTag(getCallerStackTraceElement());
}