2015-06-18 16 views
6

Tôi khá mới để phát triển Android, vì vậy tôi có một số câu hỏi về Android thiết kế dự án/mã.tổ chức gói Android

  1. Có phải mọi người thường chia ra API gọi vào một lớp học/lớp học riêng biệt? Hay bạn gọi chúng trong chính đối tượng?
  2. Các gói chỉ là các thư mục con? Từ những gì tôi hiểu, chúng chỉ được sử dụng vì lợi ích của lập trình viên như một công cụ tổ chức.

Tôi biết rằng những câu hỏi này hơi chủ quan, nhưng tôi quan tâm đến cách các nhà phát triển khác tổ chức mã của họ. Cảm ơn!

Trả lời

5

Tổ chức gói quảng cáo - Tôi phát triển các ứng dụng cho Android khoảng hai năm và tôi đã tổ chức nguồn tương tự như Andrea Cinesi đã viết. Nhưng tuần này, tôi bắt đầu suy nghĩ nếu nó sẽ thích hợp hơn để gói là như module ứng dụng, ví dụ:

com.example.android 
.car 
    CarActivity 
    CarListFragment 
    CarDetailFragment 
    CarListAdapter 
    ... 
.route 
    RouteActivity 
    RouteListFragment 
    RouteDetailFragment 
    RouteListAdapter 
    ... 
.utils 
.services 
etc. 

Tôi chưa Thinkin gấp đôi những gì tất cả shoul được "mô-đun" (ví dụ thực thể dữ liệu). Nhưng tại sao tôi lại nghĩ về sự thay đổi này? Bởi vì trong các dự án trung bình hoặc lớn là rất nhiều hoạt động/mảnh/vv trong một gói - và điều này gây nhầm lẫn cho tôi - tôi thấy nó đặc biệt cho các dự án lớn hơn thu được từ các nhà phát triển khác.

Và một lợi thế nữa có thể được chia thành các gói mô-đun - khả năng hiển thị gói riêng tư của phương thức java.

Tôi chưa quyết định có sử dụng biến thể này hay biến thể đó không, nhưng tôi nghĩ cho các dự án nhỏ hơn không quan tâm và cho dự án trung bình hoặc lớn, nó có thể là các gói tùy chọn thích hợp hơn.

1

Tôi muốn có tập tin riêng biệt cho mỗi lớp học trong các dự án Android của tôi, ngoại lệ duy nhất là AsyncTasks. Có nhiều tệp java này có nghĩa là bạn phải có nhiều gói hơn gói cơ sở. Tôi đã kết thúc với một gói cho mỗi loại lớp chính. Mỗi lớp được đặt tên kết thúc bằng kiểu của nó.

com.example

hoạt động

Chứa tất cả các hoạt động. Các lớp học được đặt tên với Hoạt động ở cuối. Bằng cách đó, bạn có thể ngay lập tức biết nó là gì khi đọc mã Java không có tên gói đầy đủ của nó.

bộ điều hợp

Chứa tất cả các bộ điều hợp.

Authenticator

Chứa bất kỳ lớp nào liên quan đến việc ký người dùng. Tôi tạo tài khoản cục bộ và có tất cả các lớp liên quan với nhau rất tiện dụng.

dữ liệu

Chứa tất cả các lớp liên quan đến quản lý dữ liệu như ContentProvider và SQLiteHelper.

data.migrations

Chứa tất cả các cuộc di cư SQLite tôi. Tôi đã tạo một lớp để di chuyển, đọc về nó ở đây và đặt tất cả chúng trong gói này.

mảnh

Chứa tất cả các mảnh vỡ.

người giúp đỡ

Chứa các lớp trợ giúp. Lớp trợ giúp là nơi đặt mã được sử dụng ở nhiều nơi. Ví dụ, tôi có một DateHelper. Hầu hết các phương thức đều tĩnh.

giao diện

Chứa tất cả giao diện.

mô hình

Chứa tất cả các kiểu địa phương. Khi đồng bộ hóa từ một API HTTP, tôi phân tích cú pháp JSON thành các đối tượng Java này bằng cách sử dụng Jackson. Tôi cũng kéo các hàng con trỏ vào các mô hình này.

tùy chọn

Chứa tất cả các lớp cho tùy chọn tùy chỉnh. Khi tạo các tùy chọn, tôi yêu cầu một PreferenceDialog tùy chỉnh cũng như một PreferenceCategory tùy chỉnh. Họ sống ở đây.

đồng bộ

Chứa tất cả các lớp liên quan đến đồng bộ hóa. Tôi sử dụng một SyncAdapter để lấy dữ liệu từ một API HTTP. Ngoài SyncAdapter, SyncService là bắt buộc, vì vậy tôi đã tạo một gói.