您的位置:首页 > 编程语言

代码整洁之道 上

2016-06-16 16:53 260 查看
我们都知道人,猫狗都是有寿命的,但是有多少程序猿们想过一段程序的寿命是多少呢,

其实从编程起源发展到今天整个历程的也没有多久,所以程序的寿命与人类相比较,其实是很短的。

尤其是当我们不注重 "保养" 维护的时候,程序的寿命有可能只有几岁就会寿终正寝了

所以我们要想对待自己的孩子一样,对待自己的程序,希望他健康成长,所以就有了我今天的主题:

代码整洁:

今天的主题是有两个

1.java代理:

public interface Bank {
Collection<Account> getAccounts();
void setAccounts(Collection<Account> accounts);
}


public class BankImpl implements Bank{
List<Account> accounts;

@Override
public Collection<Account> getAccounts() {
return accounts;
}

@Override
public void setAccounts(Collection<Account> accounts) {
this.accounts = new ArrayList<Account>();
for(Account account : accounts){
this.accounts.add(account);
}
}
}


public class BankProxyHandler implements InvocationHandler{

private Bank bank;
public BankProxyHandler(Bank bank){
this.bank = bank;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

String methodName = method.getName();
if(methodName.equals("getAccounts")){
bank.setAccounts(getAccountFromDatabase());
return bank.getAccounts();
} else if(methodName.equals("setAccounts")){
bank.setAccounts((Collection<Account> )args[0]);
setAccountToDatabase();
}
return null;
}

protected Collection<Account> getAccountFromDatabase(){
//.....
return null;
}

protected void setAccountToDatabase(){
//....
}
}


在调用方面:

public class main {

public void main(){
Bank bank = (Bank) Proxy.newProxyInstance(Bank.class.getClassLoader(),new Class[]{Bank.class},new BankProxyHandler(new BankImpl()));

//....
bank.setAccounts(null);

//....
bank.getAccounts();
}
}

其实从这里来看,整个逻辑貌似清晰了一些,但是代码量过大,而且也可以通过其他方式达到这个功能,

所以具体的应用场景还是要再推敲使用的。

2. 面向方面编程

也许刚刚提到 面向方便编程大家还不了解是什么东西,如果你深入研究过Aspect,那你就可以跳过本文了。

有一个简单的场景:

我需要在所有的onClick方法中加入一段log,记录下对应的操作。

怎么办?一个一个加,那如果有一千的 click事件呢。岂不是要 累死吗?

所以这里就可以使用Aspect 了,

原理:在编译的时候,在每个onClick中插入我们想要插入的代码。

具体做法:

1.这个需要在编译的时候,单独进行配置,

2.在代码中加入响应代码,

这些东西在网上很多,就不再细说了,

主要说一下优势吧

极大的简化了我们看到的代码量,可以批量处理统一的操作,尤其是统计,日志这些没有技术含量但比较耗时的东西,非常实用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: