2012-03-06 37 views
7

Tôi có một số kinh nghiệm về phát triển iOS (nhiều nền Java) và gần đây tôi đã bắt đầu đọc "Mã sạch".Các dự án mã nguồn mở iOS để tìm hiểu các phương pháp mã hóa tốt nhất

Tôi đã nhận thấy rằng trong các dự án iOS của mình, tôi có rất nhiều mẫu chống.

2 đề xuất phổ biến nhất Tôi không tuân theo đúng: Phương thức nhỏCác lớp nhỏ. Sau đó, tôi đã thực hiện nghiên cứu nhỏ trên GitHub và tôi không tìm thấy dự án mà tôi có thể sử dụng làm ví dụ/tham chiếu cho "Clean Code".

Trong hầu hết các trường hợp, ViewControllers có hàng chục phương thức VÀ chúng có các phương thức HUGE, như loadView nơi chúng tôi lập trình xây dựng hệ thống phân cấp các khung nhìn.

Ví dụ ứng dụng ví dụ từ Facebook wishlist-mobile-sample có 1431 dòng mã trong lớp HomeViewControllerloadView có 170 dòng mã.

Bạn có liên kết đến các dự án bạn muốn giới thiệu như một ví dụ mã hóa thực sự tốt không?

+0

hướng dẫn kiểm tra từ http: //www.raywenderl ich.com –

+2

Cảm ơn, nhưng tôi đã kiểm tra ví dụ quay bánh xe của họ và phương pháp 'drawWheel:' rất lớn. Tôi đang tìm kiếm nhiều hơn cho các phương pháp mã hóa tốt nhất nhưng sử dụng ngôn ngữ Objective-C. – OgreSwamp

Trả lời

1

của Apple mẫu mã là nguồn tốt nhất cho việc học mã sạch .. dự án mã nguồn mở không thể đánh bại mà ..

+0

Tôi tin rằng chúng ta đang nói về "Mã sạch" khác nhau. Nếu mã của Apple xây dựng một số phân cấp khung nhìn thì phương pháp của họ có thể là hơn 100 dòng mã. Ví dụ - dự án UICatalog, phương thức 'MainViewController'' - (void) viewDidLoad' là khoảng 130 dòng mã. – OgreSwamp

2

Tôi dám phủ nhận rằng có tất cả các lớp học < 100 dòng mã thực sự là một mã hóa tốt nhất thực hành ... Tất cả phụ thuộc vào những gì bạn sử dụng nó, và tầm quan trọng của việc có một lớp học thực sự sạch sẽ và chung chung. Tôi biết khá nhiều đoạn mã dễ đọc hơn với hàng trăm dòng trong một lớp so với mã lớp lộn xộn với các lớp siêu nhỏ, nhưng hàng trăm lớp thay vào đó ... Có lẽ một lý do rất nhiều dự án có các lớp lớn hơn. Và bạn có thực sự nghĩ rằng nếu câu lệnh là "một hàm phải có tối đa 100 dòng mã" có hàm 130 dòng đã đủ điều kiện để mã hóa không đúng không?!?

BTW: Các viewDidLoad chức năng trong lớp UICatalog từ Apple có 42 dòng mã - phần còn lại là khoảng trắng và nhận xét - Tôi không muốn rời khỏi những người bị mất mã của bạn để ở lại dưới 100 dòng: -)

+0

Chúng tôi đang nói nhiều hơn ở đây về tuyên bố "chức năng nên có tối đa 20 dòng mã" và có chức năng với hàng trăm dòng mã. Ví dụ của bạn là 0,3 lần khác biệt, trong trường hợp tôi mô tả sự khác biệt là khoảng 10-20 lần. – OgreSwamp

+0

Vâng, hãy xem phần bổ sung của tôi - mã thực sự là 42 dòng cho ví dụ của Apple.Mục tiêu C không phải là ngôn ngữ hiệu quả nhất về không gian, bạn phải giới thiệu rất nhiều khoảng trắng để giữ cho nó dễ đọc, đặc biệt là với các tham số có tên ... – TheEye

+0

Tôi hiểu rõ vấn đề của bạn. Dù sao, tôi đang tìm kiếm các ví dụ về mã gần lý tưởng :) Có chức năng nhỏ mà bạn có thể dễ dàng đọc. Tôi xin lỗi, nhưng tôi cần phải cuộn màn hình này vài lần để đọc toàn bộ phương thức. Và ví dụ này không có cấu trúc khung nhìn phức tạp. Sử dụng liên kết mẫu của facebook trong phần nội dung của câu hỏi và bạn sẽ thấy những gì tôi đang nói đến. – OgreSwamp

1

Đừng quên rằng mục đích của các ví dụ mà bài đăng của Apple không hiển thị thực tiễn tốt nhất theo cách thông qua mã, nhưng phải minh họa các mục cụ thể. Tại sao phải bẻ một phương thức init thành nhiều khối nhỏ hơn (sẽ mất nhiều thời gian để thực hiện) khi bạn đang cố gắng chứng minh cách thực hiện cuộc gọi mạng không đồng bộ.

Khi viết mã, không có gì sai khi viết các phương thức khổng lồ hoặc các lớp lớn nếu chúng phù hợp với những gì bạn đang làm, nhận xét đúng và không sao chép bất kỳ thứ gì. Nó có thể là đó chỉ là những gì bạn phải làm.

Theo quy tắc chung, khi viết mã của bạn, chỉ cần nghĩ về mọi thứ bạn đang cố gắng làm và suy nghĩ xem bạn có thể chia nhỏ thành các phần nhỏ hơn không. Hãy suy nghĩ về nếu bạn đã phải làm bất cứ điều gì bạn đang viết mã để làm và suy nghĩ về cách bạn sẽ tiếp cận nhiệm vụ đó.

Ví dụ: bạn có thể muốn viết phương thức khởi chạy màn hình. Vì vậy, bạn có thể viết một phương pháp rất lớn mà sẽ làm tất cả mọi thứ.Hoặc, bạn có thể phá vỡ nó xuống để

[self initButtons]; 
[self initTextEntry]; 
[self initLabels]; 

Tương tự như vậy, trong initButtons, bạn có thể thấy rằng bạn sau đó viết cùng mã hơn nữa để tạo ra và init các nút khi nó chỉ ra rằng điều duy nhất mà thay đổi là vị trí của nút và bộ chọn mà chúng gọi khi chạm vào. Vì vậy, bạn có thể cấu trúc lại điều đó ra

button1 = [self createButton:position callback:selector]; 
button2 = [self createButton:position2 callback:selector2]; 

Chỉ cần tiếp cận lặp lại những gì bạn đang viết. Viết mã. Một khi bạn có một tính năng làm việc, dừng lại và quay lại và xem mã của bạn và xem nơi bạn có thể đưa ra các mục, nơi bạn có mã phổ biến mà bạn đã đặt trong vài lần, v.v. Sử dụng các công cụ tái cấu trúc trong XCode.

Phát triển phong cách của riêng bạn. Nó sẽ đến cùng với thời gian và mã bạn viết và tái cấu trúc hơn, bạn càng dễ dàng thấy được mọi thứ có thể được chia ra như thế nào ngay từ đầu. Khi tôi nghĩ về một số mã tôi đã viết cách đây 20 năm, tôi hy vọng nó đã bị phá hủy không bao giờ được trình biên dịch nhìn thấy nữa. Tôi đã làm việc trên các dự án được viết bởi các nhà phát triển "chuyên nghiệp" và có những phương pháp rất lớn. Ví dụ, tôi đã nhìn thấy gần đây đã có 500 (!) Dòng mã dài. Và với rất ít ý kiến. Và hãy nhớ rằng có rất nhiều phương pháp nhỏ làm rất ít kết hợp với một số lượng lớn các lớp học (ngay cả khi chúng là các lớp học nhỏ) cũng có thể là một mô hình chống.

Các vấn đề liên quan