12/08/2018, 14:57

THE EVOLUTION OF ANDROID ARCHITECTURE

Hiện tại, Android có lẽ là nền tảng phổ biến thứ 2 chỉ sau web. Phát triển web thay đổi theo tháng nếu không phải theo tuần. Cho đến khi tool hoặc thư viện trở nên ổn định và trưởng thành thì họ gọi là không dùng nữa (deprecated) và tìm kiếm sự thay thế mới. Hãy xem quá trình phát triển tools và mô ...

Hiện tại, Android có lẽ là nền tảng phổ biến thứ 2 chỉ sau web. Phát triển web thay đổi theo tháng nếu không phải theo tuần. Cho đến khi tool hoặc thư viện trở nên ổn định và trưởng thành thì họ gọi là không dùng nữa (deprecated) và tìm kiếm sự thay thế mới. Hãy xem quá trình phát triển tools và mô hình phát triển (paradigms) của Android trong những năm qua và làm so sánh nhẹ với web.

Trong năm 2010 chúng ta vẫn đang học Android và viết UI layout bằng XMLs, có những đoạn code như thế này ở từng activity

TextView mCounterText;
Button mCounterIncrementButton;

int mClicks = 0;

public void onCreate(Bundle b) {
  super.onCreate(b);

  mCounterText = (TextView) findViewById(R.id.tv_clicks);
  mCounterIncrementButton = (Button) findViewById(R.id.btn_increment);

  mCounterIncrementButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
      mClicks++;
      mCounterText.setText(""+mClicks);
    }
  });
}

Việc này khá giống với jQuery ở trong web, đoạn code sau đây tương ứng với đoan trên của Android

var clicks = 0;
$('.incr-button').on('click', function() {
  clicks++;
  $('.counter').text(clicks);
});

Lưu ý, năm 2010, web development đã sử dụng HTML5 tăng truy vấn media và hỗ trợ trên nhiều màn hình (multi screens). Nó cũng dùng CSS3 để hỗ trợ animation nhanh hơn. JQuery và Sencha ExtJS dẫn đầu thư viện dùng để viết code nhanh mà mọi người ai cũng ghét.

3 năm, chúng ta mệt mỏi với Eclipse cùi bắp và hàng đống mã thừa thãi trong mỗi ứng dụng. Năm 2013 mang đến 2 thư viện nổi tiếng để giải quyết vấn đề rõ ràng nhất

  1. Retrlolambda. Cảm ơn @orfjackal. Nó giúp gọn mã code rất nhiều, thay thế mọi listener thành đoạn mã lambda nhẹ gọn, dễ hiểu
  2. ButterKnife. Cảm ơn @jakewharton. Chúng ta cuối cùng cũng bỏ được đống thừa thãi setOnXXXListener và findViewByIds. Code trở nên clear hơn
@Bind(R.id.tv_clicks) mCounterText;
@OnClick(R.id.btn_increment)
public void onSubmitClicked(View v) {
	mClicks++;
	mCounterText.setText(""+mClicks);
}

Cũng trong thời gian này chúng ta có Ice Cream Sandwich và Jelly Bean được released. Cuối năm 2013 này, Google released KitKat, một OS version rất phổ biến cho đến nay. So sánh với phát triển web một chút, trong năm 2013, phát triển web chuyển từ jQuery sang MVC frameworks. Họ dùng Backbone.js, Angular.js và Ember.js. Angular có lẽ nổi bật nhất trong số này, nó chuyển từ phát triển từng node Dom (views) trực tiếp và cho phép data binding vào. Từ đó, views được updated rất active khi data thay đổi.

Sự kiện quan trọng nhất năm 2014 là bài viết "Advocating against fragments". Được viết bởi một kĩ sư của Square, nó giải thích tại sao lại là Android Fragments, concept này được quảng cáo bởi Google và các kĩ sư khác mù quáng tin cậy, thực ra nó lại là một rắc rối. Họ cũng đưa ra 3 lợi điểm của fragments so với viết custom viewgroups. Nó có vẻ lần đầu tiên một công nghệ mạnh của Google bị chỉ trích rộng rãi. Cũng trong năm này chúng ta đã bỏ được hỗ trợ trên Gingerbread với 90% các thiết bị mới hơn. Cuối cùng năm 2014 bắt đầu vinh danh mô hình MVP (Mode-View-Presenter). Hầu hết các thư viện viết bởi Square đều theo kiến trúc này nên mọi người rất vui vẻ đi theo nó. Chúng ta học cách chia thành view presentation từ tầng data. Xu hướng phát triển Web trong năm này là React.js. chuyển đổi mô hình mang lại hiệu năng cao cho các module UI. Tính đơn giản, hiệu quả của React đã được nhiều người theo dõi, một số họ tạo nên thư viện như: Mithril, Riot, Bloop... Tính đơn giản và linh hoạt của React khiến nó phổ biến rất nhanh và trở thành một sự thay thế tốt cho Angular

Giữa năm 2015, Google ra mắt Data Binding. Đây là một nỗ lực để sử dụng kiến trúc MVVM trong Android. Google tạo ra databinding theo tinh thần của Angular-XML, giống như custom template với tùy chỉnh đặc biệt.

<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="counter" type="com.example.Counter"/>
       <variable name="counter" type="com.example.ClickHandler"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_awidth="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_awidth="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{counter.value}"/>
       <Buttonandroid:layout_awidth="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{handlers.clickHandle}"/>
   </LinearLayout>
</layout>

Tại thời điểm này nhiều người chuyển từ MVP sang MVVM. Cộng đồng Lập trình viên Android có vẻ chia thành từng nhóm , một số chỉ dùng các công nghệ được hỗ trợ của Google. Đây là nhóm bảo thủ nhất.

Những người khác cũng tin tưởng một số nhà phát triển hay công ty nổi tiếng, như Google. Tất nhiên có một nhóm người luôn cố gắng một cái gì đó mới - Groovy, Scala, Clojure, Mirah, các thư viện và framework mới. Đó là rủi ro và thường gây ra nhiều rắc rối, nhưng đây là những gì thực sự thúc đẩy sự tiến hóa. Cùng về Kotlin. Tôi đã tìm kiếm một sự thay thế Java trong nhiều năm và khi Kotlin đã trở ổn định hơn - tôi đã thử. Cho đến năm 2015, tôi e rằng Google có thể tạm dừng hỗ trợ Kotlin. Nhưng cho đến nay nó được phát triển khá tốt tốt. Bây giờ tôi sử dụng Kotlin trong một số dự án của tôi và tôi thích nó.

Buck cũng là một ví dụ đáng chú ý. Google Gradle dẫn đầu về build system trong Android, tuy nhiên so với Buck thì Gradle build chậm hơn nhiều.

Như vậy trước đây, phát triển Android từng bước đi đằng theo xu hướng phát triển web. Nó không xấu, chúng ta đã dành thời gian để xem và thử nghiệm giải pháp nào tốt nhất. Nhưng sự tiến hóa luôn thắng. Chúng ta có các công cụ tốt hơn bất kể Google bỏ qua các yêu cầu của nhà phát triển.

Bài viết này của tác giả Serge, khá hay, tổng quan, và viết dễ đọc. Nguồn của bài viết ở link sau Link reference http://zserge.com/blog/android-mvp-mvvm-redux-history.html

0