14 Điều mà một lập trình viên iOS cần biết (phần 1)

1 — Quản lý mã nguồn (Source control) 

Mọi project đều cần phải có source control, kể cả dự án có một mình bạn là dev. Hai cái tên nổi bật nhất là Git và SVN

SVN dựa trên một hệ thống trung tâm để quản lý version gọi là central repository, nơi mà những phiên bản copy để làm việc được tạo ra và cần phải có kết nối mạng.Svn là lệnh dùng để thực hiện các chức năng Subversion trong môi trường thi hành lệnh trên các máy vi tính. SVN theo dõi các thay đổi bằng đăng ký files và lịch sử sửa đổi đều được nhìn thấy trên repository.  

Git làm việc dựa trên hệ thống phân phối các phiên bản để quản lý. Bạn sẽ có một local repository trong máy , và kết nối mạng chỉ được yêu cầu khi thực hiện tác vụ đồng bộ code vào với nhau. Quyền truy cập của nó là cho toàn bộ thư mục, theo dõi các thay đổi bằng cách đăng ký nội dung và cả repository lẫn working copy có thay đổi.

2 — Architecture patterns

Trước khi bắt đầu code, bạn cần phải chọn một kiểu kiến trúc (Design pattern) cho project của mình, hay nói cách khác là bạn sẽ code theo hướng nào. Có rất nhiều các kiến trúc để cho bạn chọn khi lập trình ứng dụng di động, MVC, MVP, MVVM, VIPER, etc. Ở đây tôi sẽ nói qua 2 kiến trúc phổ biến nhất đó là MVC và MVVM.

  • MVC — Viết tắt của Model, View, Controller. Controller

    M là Model: cấu trúc dữ liệu theo cách tin cậy và chuẩn bị dữ liệu theo lệnh của controller

    V là View: Hiển thị dữ liệu cho người dùng theo cách dễ hiểu dựa trên hành động của người dùng.

    C là Controller: Nhận lệnh từ người dùng, gửi lệnh đến cho Model để cập nhập dữ liệu, truyền lệnh đến View để cập nhập giao diện hiển thị.

  • MVVM — Viết tắt của Model, View, ViewModel. Cơ chế Bindings được thiết lập giữa View và ViewModel, cho phép ViewModel thay đổi trên Model, sau đó tự động update View dựa theo những dữ liệu đã được gán vào trước đó, ViewModel không biết gì về View, do vậy sẽ giảm thiểu được rất nhiều code.
Tham khảo các khóa học lập trình online, onlab, và thực tập lập trình tại TechMaster

3 — Objective-C hay Swift?

Trước khi quyết định sử dụng ngôn ngữ nào, bạn cần phải biết mỗi ngôn ngữ sẽ mang lại cho ta cái gì. Ở đây, theo ý kiến cá nhân thì tôi khuyến khích sử dụng Swift, vì sao?. Thực tế thì Objective-C là ngôn ngữ đã cú và có ít điểm nổi bật hơn so với Swift. Swift dễ đọc, cú pháp gần gũi và tự nhiên và do không phải là build từ nền ngôn ngữ C, nên không phải tuân thủ theo những convention cũ, điển hình là loại bỏ dấu chấm phẩy, không cần phải thêm ngoặc vuông khi gọi method và không còn file .h hay .m nữa. Swift chỉ cần một file .swift. Do đó bạn hoàn toàn không phải lo lắng về việc project có quá nhiều file nữa, đồng thời số lượng dòng code cũng sẽ chỉ bằng 1/3 so với Objective-C

Nếu điều đó chưa đủ thuyết phục thì Swift an toàn hơn, nhanh hơn và chú trọng đến quản lý bộ nhớ hơn. Điều gì sẽ xảy ra trong Objective-C khi bạn gọi một method với một variable chưa được khởi tạo? Không có gì, đoạn code trên sẽ được bỏ qua và app sẽ không bị crash, tuy nhiên, nó sẽ dẫn đến hàng loạt bug phat sinh phía sau mà bạn sẽ không ngờ tới. Swift với cơ chế optional sẽ không cho phép điều này xảy ra.Swift sẽ dừng lại và app sẽ crash, do vậy bạn sẽ kiểm soát được lỗi của mình một cách chặt chẽ hơn, đồng thời đặc sản ARC của iOS hoạt động tốt hơn trên Swift. Ở Objective-C, ARC không làm việc với ngôn ngữ lập trình hướng thủ tục như C và API Core Graphic.

4 — React hay không React?

Functional Reactive Programming (FRP) là một khái niệm rất mới. Mục đích của nó là  là mô hình lập trình hướng tới luồng dữ liệu và sự lan truyền thay đổi. 

Để dễ hình dung thì chúng ta hãy bắt đầu với ví dụ sau. Timmy và chị gái, Jenny muốn mua một máy chơi game mới. Timmy và Jenny mỗi người được bố mẹ cho 5$ mỗi tuần. Tuy nhiên Jenny kiếm được thêm 5$ nữa nhờ đưa báo vào mỗi cuối tuần. Nếu cả cùng để dành thì chúng ta có thể kiểm tra hàng tuần cho đến khi đủ tiền mua máy chơi game. Mỗi lần một trong những khoản tiết kiệm của hai người thay đổi, thì giá trị tổng của họ đều được tính toán. Nếu đủ, một tin nhắn sẽ được lưu vào trong variable isConsoleAttainable. Và chúng ta có thể kiểm tra ở mọi lúc mọi nơi bằng cách subcribe tới nó.

// Savings
let timmySavings = Variable(5)
let jennySavings = Variable(10)
var isConsoleAttainable =
Observable
.combineLatest(timmy.asObservable(), jenny.asObservable()) { $0 + $1 }
.filter { $0 >= 300 }
.map { "\($0) is enough for the gaming console!" }
// Week 2
timmySavings.value = 10
jennySavings.value = 20
isConsoleAttainable
   .subscribe(onNext: { print($0) }) // Doesn't print anything
// Week 20
timmySavings.value = 100
jennySavings.value = 200
isConsoleAttainable
   .subscribe(onNext: { print($0) }) // 300 is enough for the gaming        console!

Đây là ví dụ đơn giản để mô tả về FRP, một khái niệm rất mới, nhưng khi bạn nắm được thì đây là cánh cổng mở ra một thế giới mới với rất nhiều điều thú vị, cho phép bạn thích ứng với nhiều kiến trúc khác nhau ngoài MVC ra, ví dự như MVVM.

Hết phần 1

Nguồn bài viết: https://swiftsailing.net/14-must-knows-for-an-ios-developer-5ae502d7d87f

Nguyễn Duy Khánh

iOS Developer, Former Student and Content Editor of TechMaster