2013年4月29日 星期一

[Language][JAVA] MVC概念



MVC(Model-View-Controller)是軟體工程上面的一種軟體設計模式,目的即是將程式與設計做一個區隔,創造一個權責分明的開發架構,透過分層的切割,讓「視覺設計師專心做設計,程式設計師專心寫程式」,使開發上更能模組化及提高可維護性,其做法是將應用程式分割成以下三個邏輯元件:
  • Model-主要負責應用程式中的商業邏輯(Business Logic),商業邏輯是一個非技術用語,用來描述應用程式功能性的演算法以及資料庫與使用者介面之間的資料交換。Model封裝了應用程式中對資料的存取並提供可重複使用的函式庫,舉凡資料庫存取的抽象化,郵件的遞送,資料的驗證與稽核都會在此進行。
  • View-簡而言之,即是我們用來呈現Model取得的資料與蒐集使用者互動資料的網頁,HTML / CSS / JavaScript都是使用於此層的技術。
  • Controller
    • 蒐集使用者於View中所輸入的資料並決定由哪一支程式進行資料的處理。
    • 接收Model所回傳的資料並在解析後傳遞給View作呈現。
    • 所有程式的例外處理以及流程控制。


refs: https://ascc.sinica.edu.tw/iascc/articals.php?_section=2.4&_op=?articalID:4311

JAVA MVC example
refs: http://www.leepoint.net/notes-java/GUI/structure/40mvc.html

2013年4月23日 星期二

[Git] 開branch日常使用

1. 以某個tag為基礎建立新branch
$ git branch [branch_name] [tag]

2. 切換到新branch
$ git checkout [branch_name]

3. 建立檔案並打commit
$ git add
$ git commit

4. push到server (也順便在server建立此branch)
$ git push origin [local_branch_name]:[server_branch_name]
ex: git push origin v1:v1

2013年4月19日 星期五

[Linux][ShellScript] 輸出空行

輸出空行的方式有兩種
1. echo -e "\n"
2. echo ""

若是沒有-e的話,\n會當成字串輸出

2013年4月8日 星期一

[Android] 分析This Handler class should be static or leaks

好文章,留著筆記:http://www.beyondcompare.cn/this-handler-class-should-be-static-or-leaks.html

重點擷取以下:

Handler作为Activity的内部类有可能会导致内存泄露的问题。
Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的引用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。

package cn.beyondcompare.statichandlerdemo;

import java.lang.ref.WeakReference;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;

public class MainActivity extends Activity {

 MyHandler handler = new MyHandler(this);

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  test();
 }

 static class MyHandler extends Handler {

  WeakReference mActivity;

  MyHandler(MainActivity activity) {
   mActivity = new WeakReference(activity);
  }

  @Override
  public void handleMessage(Message msg) {
   MainActivity theActivity = (MainActivity) mActivity.get();
   switch (msg.what) {
   case 0:
    theActivity.test1();
    break;
   }
  }
 };

 private void test() {
  handler.sendEmptyMessage(0);
 }

 private void test1() {
 }
}