Kotlin Multiplatform không thể làm được hết tất cả. Lí do chính xác để bạn nên thử nó.
Tags: android, kotlin, kmm
Published: 2024-03-11 10:58:18

Nguồn: https://dev.to/piannaf/kotlin-multiplatform-can-t-do-it-all-which-is-exactly-why-you-should-try-it-1p85

> Bản dịch sẽ có sai sót về lỗi chính tả hoặc ngôn phong của người dịch, các bạn nên đọc kỹ bài gốc để có thể nắm rõ hơn về kiến thức được chia sẽ trong bài.

Trước khi đi vào vấn đề, mình muốn nhấn mạnh rằng mỗi công cụ đều được thiết kế để giải quyết những bài toán nhất định, nhưng không có công cụ nào là toàn năng, có thể giải quyết hết mọi vấn đề. Nếu team của bạn đang trong giai đoạn gấp rút, hoặc nếu việc tạo ra giao diện người dùng chất lượng cao không phải là mục tiêu hàng đầu, thì các bạn có thể cân nhắc lựa chọn một nền tảng phát triển đa nền tảng từ đầu đến cuối như Xamarin, Flutter hay React Native. Sử dụng những nền tảng này, bạn có thể dễ dàng viết ứng dụng chạy trên cả Android và IOS, và hoàn thành công việc một cách nhanh chóng. 🎉!

Giờ đây, nếu bạn đã có giao diện sẵn cho ứng dụng, hoặc muốn tinh chỉnh giao diện cho phù hợp với từng nền tảng riêng biệt, bạn nên xem xét đến việc sử dụng Kotlin Multiplatform (KMP).Vì sao ư? Đơn giản là vì KMP không có UI – ít nhất là trong thời điểm hiện tại. Tuy nhiên, những gì mà nó làm được - và thực sự làm rất tốt, đó là [business logic cho các ứng dụng Android và IOS](https://touchlab.co/future-shared-code-kotlin-multiplatform/).

## Mặc dù tất cả các giải pháp đa nền tảng khác đều mong muốn hỗ trợ tất cả các layer của ứng dụng, nhưng chúng không thể đáp ứng đầy đủ được chúng.

Và thực tế, việc chia sẻ mã nguồn UI qua các nền tảng khác nhau không phải lúc nào cũng là điều được ưa chuộng.Thường thì sau khi hoàn thành, chúng ta sẽ phải mất nhiều lần chỉnh sửa để UI trở nên gần gũi và phù hợp với từng nền tảng, điều này sẽ tiêu tốn khá nhiều thời gian phát triển cũng như gây áp lực không nhỏ lên đội ngũ phát triển để hoàn thành dự án đúng hạn.Hơn nữa, về phía business thường ưu tiên phát triển thêm tính năng mới hơn là chú trọng đến chất lượng của UI. Việc chia sẻ UI không chỉ mang rủi ro mà còn ít khi đem lại lợi ích cho tinh thần làm việc hay cho mục tiêu kinh doanh.

## Khác với Xamarin, Flutter hay React Native, Kotlin Multiplatform không tồn tại trong một hệ sinh thái độc lập. Nó giống như cuốn sách “chọn lựa cuộc phiêu lưu của riêng bạn”, điều này làm cho nó trở nên vô cùng mạnh mẽ.

Mặc dù hiện tại Kotlin Multiplatform (KMP) chỉ có một số lượng hạn chế các thư viện (dù số lượng này đang dần tăng lên), nó vẫn cho phép bạn sử dụng toàn bộ các thư viện và công cụ hiện có trên cả iOS và Android. Nhờ vậy, bạn không cần phải chờ đợi sự phát triển của các thư viện mới, hoặc tìm kiếm giải pháp thay thế. Điều này là một hạn chế lớn khi sử dụng Flutter hay React Native, nơi bạn thường xuyên gặp phải các trở ngại đáng kể.

Kết quả từ việc sử dụng Kotlin Multiplatform chỉ đơn giản là tạo ra các package khác nhau trên Android và framework trên iOS. Điều này có thể giúp tiết kiệm một lượng lớn thời gian và giảm bớt những khó khăn, bởi bạn sẽ mất ít thời gian hơn cho việc viết mã cầu nối hoặc phải viết lại hoàn toàn những phần còn thiếu so với các giải pháp khác.

Khi lập trình business logic trên Flutter, team của bạn phải bắt đầu với việc viết logic bằng Dart - một ngôn ngữ không được sử dụng rộng rãi, trong một hệ sinh thái mới, cùng với một cộng đồng nhỏ và gặp khó khăn trong việc kết nối nó với mã nguồn đã có sẵn. Trên React Native, đội ngũ lập trình di động của bạn cần phải làm quen với hệ sinh thái web của JavaScript, bao gồm các IDE mới và công cụ khác. Còn với Xamarin, họ phải lập trình bằng C#, sử dụng Visual Studio, trong một cộng đồng nhỏ và ít hoạt động hơn. Thêm vào đó, dù sử dụng nền tảng nào đi nữa, đội của bạn cần phải thiết lập một cầu nối để giao tiếp giữa mã nguồn "native" và "non-native".

## Với KMP, team của bạn lại có thể viết business logic dành riêng cho từng nền tảng, kết nối trực tiếp với nền tảng native mà không cần phải chờ đợi các thư viện hoặc tìm kiếm các giải pháp tạm thời hay phương án thay thế..

(Bạn có thể làm điều đó nếu bạn muốn, đó chính là một phần của cuộc phiêu lưu mà bạn chọn lựa). Và ngay cả khi có phát sinh vấn đề, khả năng chia sẻ linh hoạt với Kotlin Multiplatform có nghĩa là bạn chỉ cần khôi phục những phần code trực tiếp liên quan đến sự cố - không cần phải tháo dỡ toàn bộ hệ thống chỉ vì một lỗi nhỏ. Do đó, bạn luôn có nhiều lựa chọn.

Tất nhiên điều này rất quan trọng, bởi vì business logic sẽ xác định cách thức hoạt động của tất cả tính năng có trong ứng dụng. Bởi vì bạn đang viết code native một lần cho layer này nên bạn có thể tăng tốc thời gian phát triển và giúp chắc chắn rằng bạn có một code base thật sự vững chắc. Thêm nữa, viết bằng một trong những native code là một cách hiệu quả cao cho việc kiểm thử các bản phát hành sau này.

##Kotlin Multiplatform, nói một cách khác, nó cung cấp cho team của bạn sự linh hoạt cao hơn.

Những phương án đa nền tảng khác cơ bản là độc quyền, dẫn đến việc bị ràng buộc bởi nhà cung cấp.Trên thực tế, nó cũng dẫn đến nhu cầu quản lý nền tảng thứ ba vì hệ sinh thái quá khác so với nền tảng native và vì chúng cố gắng giải quyết mọi thứ nhưng không thể giải quyết mọi thứ, bạn sẽ cần phải viết thêm code dành riêng cho nền tảng hơn là được quảng bá.

Không giống như Xamarin hay React Native, KMP không yêu cầu một Virtual Machine(VM). Flutter cũng không yêu cần một VM trên sản phẩm thương mại, nhưng nó mang đến cho bạn một hệ sinh thái non-native đang được viết trên ngôn ngữ non-native, không giống như KMP tôn trọng ngôn ngữ native và hệ sinh thái cho riêng từng nền tảng. KMP là một giải pháp đa nền tảng tốt nhất cho team của bạn có thể sử dụng hôm nay. 

##KMP không che giấu sự thật rằng bạn đang làm việc với nhiều nền tảng vì nó đã biên dịch thành thư viện gốc cho iOS hoặc Android.

Không có lớp xử lý trung gian nào cả, giúp loại bỏ hầu hết các rào cản trong quá trình tương tác. Vì Kotlin Multiplatform làm việc cùng với hệ sinh thái nền tảng native thay vì tạo ra một hệ sinh thái riêng biệt, các nhà phát triển có thể sử dụng những công cụ và thư viện mà họ vẫn thường dùng, kể cả những đổi mới mới như SwiftUI và Jetpack Compose. Những hạn chế bạn gặp phải không phải là bế tắc bởi vì bạn luôn có thể tìm cách giải quyết chúng bằng Kotlin, Swift, hoặc bất kỳ ngôn ngữ nào khác phù hợp và an toàn nhất.

--

Tổng kết, đây là do lường của tôi về thế giới đa nền tảng. Tuần tới tôi sẽ chia sẻ thêm chi tiết về các quan điểm này về KMP.Nếu bạn thấy KMP thú vị, hãy chia sẻ với tôi qua bình luận.


![Multiplatfrom score](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ioglgha2pyvrlkltmasf.png)