it-swarm-vi.com

Là nhà phát triển C #, bạn sẽ học Java để phát triển cho Android hoặc sử dụng MonoDroid thay thế?

Tôi cho rằng bản thân mình khá thành thạo C #. Đó là ngôn ngữ tôi chọn lúc này và về cơ bản là tất cả kinh nghiệm chuyên môn của tôi nằm ở đó.

Tuy nhiên, tôi vẫn bối rối trước sự tồn tại của dự án MonoDroid . Sự hiểu biết của tôi luôn luôn là C # và Java là rất gần . Giống như, nếu bạn biết một, bạn có thể tìm hiểu một cái khác thực sự nhanh chóng. Vì vậy, khi tôi cân nhắc phát triển ứng dụng Android đầu tiên của mình, tôi chỉ cho rằng tôi sẽ làm quen với Java đủ để bắt đầu và sau đó chỉ cần sắp xếp học khi tôi đi.

Điều này sẽ không có ý nghĩa hơn so với việc sử dụng MonoDroid, có khả năng ít tính năng hơn so với Java Android SDK và yêu cầu học API riêng của nó (mặc dù là API .NET)? Tôi chỉ cảm thấy sẽ tốt hơn nếu học một ngôn ngữ mới (và một ngôn ngữ cực kỳ phổ biến ở đó) và có được một số kinh nghiệm về nó khi nó rất gần với những gì bạn đã biết hơn là gắn bó với công nghệ mà bạn có kinh nghiệm, mà không đạt được bất kỳ kỹ năng có giá trị nào.

Có lẽ tôi đang đánh giá sai về người dùng MonoDroid tiềm năng trung bình. Có lẽ nó phù hợp hơn với những người có kinh nghiệm về Java và .NET và chỉ thích .NET. Hoặc có thể (thực tế là có khả năng) có những yếu tố khác mà tôi chưa xem xét. Tôi chỉ tự hỏi, tại sao bạn lại sử dụng MonoDroid thay vì chỉ phát triển cho Android bằng Java?

46
Dan Tao

Bất kỳ lập trình viên C # có thẩm quyền nào cũng có thể nhanh chóng nhận đủ Java để viết một chương trình Android, nhưng không phải là điểm . Đây là vấn đề tái sử dụng mã.

Hãy suy nghĩ về sáu tháng kể từ bây giờ, khi chương trình Android của bạn phổ biến và người dùng của bạn đang yêu cầu phiên bản cho iPhone và Windows Phone 7. Nếu bạn đã sử dụng MonoDroid, bạn có thể sử dụng lại hầu hết ứng dụng của mình logic với MonoTouch (Mono cho iOS) và SDK Windows Phone. Bây giờ họ muốn có phiên bản dựa trên web, vì vậy bạn bao gồm các thư viện cùng lớp trong một dự án ASP.Net. Không có vấn đề gì, thư viện cùng lớp đó hoạt động với. Net dưới Windows hoặc Mono trên Linux và OS X.

Khác với C hoặc C++, tôi không thể nghĩ ra bất kỳ ngôn ngữ nào khác cho phép bạn sử dụng lại cùng một mã trên tất cả các mục tiêu đó.

Chỉnh sửa để giải quyết một số mối quan tâm trong các nhận xét : .Net và Mono sẽ không cho phép bạn viết một chương trình hoàn chỉnh và sử dụng tương tự chương trình ở khắp mọi nơi. Họ sẽ cho phép bạn chia sẻ một số mã và giống như tất cả các chương trình đa nền tảng, số lượng mã được chia sẻ tùy thuộc vào loại chương trình bạn đang viết và cách thức tốt, bạn tách giao diện người dùng và mã phần cứng khỏi logic ứng dụng.

Tuy nhiên, nếu bạn viết Android bằng Java, thì có bao nhiêu trong số đó có thể tái sử dụng trên iOS hoặc Windows Phone? Đó là điểm tôi đang cố gắng thực hiện. Tôi đã có các thư viện C # hiện đang hoạt động Mono for Android trong thời gian ngắn hơn nhiều so với thời gian thực hiện chúng, ngay cả khi tôi đã biết Java . Tôi có một số mã được chia sẻ - chưa được sửa đổi - giữa một trang web, chương trình máy tính để bàn và ứng dụng di động trên hai nền tảng di động khác nhau, nhờ Mono.

Tôi không có ý ám chỉ, thậm chí gián tiếp, rằng Mono là công cụ hoàn hảo cho mọi tình huống phát triển di động. Đó là một sự đánh đổi, nhưng tôi tin chắc rằng có những tình huống khi Mono là lựa chọn tốt hơn nhiều.

Xin vui lòng xem (và upvote!) Câu trả lời của Jason S cho một góc nhìn khác.

55
Kevin

Đây là một loại câu trả lời bổ sung, vì một điều dường như đã bị bỏ qua trong các câu trả lời cho đến nay, liên quan đến những gì thực sự là đa nền tảng. Theo chính Xamarin, về cơ bản là logic kinh doanh của bạn, không phải UI của bạn hoặc bất kỳ điều khiển phần cứng nào như GPS, âm thanh, sổ địa chỉ, v.v. Những người sẽ phải được viết riêng cho từng nền tảng. Xem mục FAQ của họ Tôi có ứng dụng MonoTouch hoặc WindowsPhone 7, tôi có thể xây dựng lại nó bằng Mono cho Android và nhắm mục tiêu Android không? .

Sử dụng Mono, bạn có thể viết mã điều khiển giao diện người dùng và điện thoại của mình bằng C # nhưng nó sẽ không khả dụng cho bất kỳ nền tảng nào. Bạn sẽ phải viết UI và điều khiển điện thoại cho từng nền tảng, mặc dù bạn có thể viết nó bằng C #. Dù bằng cách nào, bạn vẫn sẽ phải tìm hiểu chi tiết cụ thể về các điều khiển UI trên Android và cách Android xử lý tài nguyên điện thoại.

Sử dụng Mono, bạn sẽ phải tìm hiểu API Mono, gọi vào API Android. Bạn cũng sẽ phải chờ Mono triển khai các tính năng Android mới và hy vọng họ triển khai tất cả các tính năng Android. Ngay cả khi C # mạnh hơn Java, bạn sẽ không thể làm được nhiều hơn nếu bạn sử dụng trực tiếp SDK Android (trong Java).

Nếu bạn đang đi thẳng từ C # sang Android, vì C # rất giống với Java, thì hầu hết người học của nhà phát triển C # cho Android sẽ học API Android.

Một số cân nhắc ...

C # cho Android

Cần học

  • API Android
  • API Java: Xử lý chuỗi, lịch và sự kiện, v.v.

Không cần học

  • Cú pháp Java: C # là cú pháp rất giống nhau.

Cân nhắc khác

  • Bạn sẽ không thể sử dụng lại mã trên các nền tảng.
  • Bạn sẽ không có bất kỳ sự phụ thuộc nào giữa bạn và Android SDK. Bạn sẽ nhận được các tính năng Android mới khi chúng được phát hành.
  • Bạn có thể sẽ có hỗ trợ và ví dụ lớn hơn cho mã Android so với Mono.

C # đến Mono

Cần học

  • Android: Bạn vẫn cần tìm hiểu các tính năng kiểm soát phần cứng và giao diện người dùng của Android.
  • API đơn sắc: Bạn phải học cách gọi API của Mono để làm mọi thứ với giao diện người dùng và phần cứng của Android.

Không cần học

  • API và cú pháp Java: Bạn có thể phát triển bằng C #

Cân nhắc khác

  • Mã tái sử dụng: Bạn có thể sử dụng lại mã C # không có bất kỳ mã kiểm soát giao diện người dùng hoặc phần cứng nào và đó là "logic nghiệp vụ" thuần túy. Mặc dù lý tưởng, có một sự tách biệt sạch sẽ như vậy không phải lúc nào cũng dễ dàng. Bạn sẽ phải đánh giá bao nhiêu mã của bạn sẽ không có bất kỳ kiểm soát UI hoặc phần cứng nào.
  • Phụ thuộc: Bạn phụ thuộc vào Mono triển khai API Android. Có thể có một số độ trễ từ Android bản phát hành API hoặc một số tính năng Android có thể không bao giờ được triển khai.
  • Bạn có thể có ít tài liệu và ví dụ để lựa chọn.
18
Jason S

Tôi nghĩ rằng rất nhiều trong số đó phải làm với các tài nguyên có sẵn.

cú pháp trong C # và Java có thể giống nhau, nhưng chúng cung cấp những thứ rất khác nhau. Ví dụ: làm việc với các ngày bằng cách sử dụng tiêu chuẩn Java = thư viện là một cơn ác mộng, trong khi ở C # thì khá dễ chịu.

13
Corey

Có vẻ như một cơ hội tuyệt vời để học một ngôn ngữ mới, mà tôi không nghĩ bạn nên bỏ qua.

Đi từ C # đến Java rất dễ dàng vì chúng dựa trên cùng các khái niệm. Java giống như một tập hợp con của C #, vì vậy bạn sẽ phải học một số nội dung (như thuộc tính và tập hợp) và làm quen với một số quy ước mới, nhưng chủ yếu nó phải là không có trí tuệ.

9
Martin Wickman

Bài học lịch sử nhanh - MonoDroid lớn lên từ MonoTouch. Làm rất nhiều ý nghĩa tại thời điểm đó. Thật không may, Novell đã bị bán và toàn bộ đội Mono đã bị sa thải. Tin tốt là Miguel de Icaza đã bảo đảm kinh phí và đã bắt đầu một bộ trang phục mới để xây dựng lại MonoTouch/MonoDroid. Vì vậy, bạn là loại trong limbo cho đến khi họ thực sự ra mắt.

Cập nhật tháng 7 năm 2011: Trang phục của Miguel đã lấy lại quyền đối với toàn bộ ngăn xếp Mono *. Nhận nó trong khi nó diều hâu.

3
Wyatt Barnett