typescript - Angular - sự khác nhau giữa Model và Services
Tôi đã dành thời gian để học công nghệ mới và công nghệ đó là Angular (không phải JS) nên tôi có một số câu hỏi.
Sự khác biệt giữa Model và Services là gì? Khi nào chúng ta cần sử dụng Model hoặc Services? Tôi biết rằng tôi có thể sử dụng DI cho các dịch vụ và thiết lập trong provider và nhận mẫu singleton.
Trước đây, tôi chỉ viết các mô hình cho logic nghiệp vụ. Ví dụ: các thao tác CURD với cơ sở dữ liệu, các xác thực khác nhau, v.v.
Nhưng tôi bối rối giữa services và models, khi nào tôi cần sử dụng services và khi nào tôi cần sử dụng model. Có ai có thể chỉ tôi bằng mã và giải thích không?
Cảm ơn nhiều!
Câu trả lời #1
Tôi thường xử lý nó theo cách sau, nhưng tất cả phụ thuộc vào cách bạn nhìn nhận ứng dụng và câu trả lời của tôi có thể không hoàn toàn phù hợp với các quyết định kiến trúc của bạn.
Vậy hãy bắt đầu với Mô hình:
Mô hình giống như DTO. Thường thì nó chỉ giữ một số dữ liệu và cung cấp một số phương thức để làm việc với dữ liệu đó. Các mô hình trong dự án của tôi không được đánh dấu là @Injectable(), vì vậy tôi chỉ import chúng ở đầu và sử dụng khi cần thiết.
Ví dụ :
export class Car {
name: string;
speed: number;
constructor(name: string) {
this.name = name;
this.speed = 0;
}
accelerate(delta: number): void {
this.speed += delta;
}
}
Dịch vụ:
Dịch vụ giống như Layer trong kiến trúc của bạn. Tôi sử dụng các dịch vụ để thao tác dữ liệu, ví dụ thực hiện các yêu cầu GET/POST/PUT/DELETE, ánh xạ phản hồi sang các Model thực tế, v.v. Tất cả đều được đánh dấu là @Injectable() và chia sẻ giữa nhiều mô-đun trong ứng dụng.
Ví dụ :
@Injectable()
export class CarService {
getAll(): Observable<Car[]> {
// GET api/cars and map JSON response to the Car[] here
}
}
Tóm lại: Nếu một thứ gì đó nên thao tác dữ liệu thuộc về nó, thì nó có khả năng là một Model và nếu nó nên thao tác các tập dữ liệu khác nhau và chia sẻ chúng giữa các mô-đun khác nhau, thì nó có khả năng là một Service
Tuy nhiên, vài năm trước đã có một thực tiễn khi MVC sử dụng mô hình "Active" và nó chịu trách nhiệm đồng bộ trạng thái của chính nó với backend, nhưng dù sao nó thường có Service được tiêm vào với logic các cuộc gọi API được đóng gói trong dịch vụ đó.
Cập nhật: Đã thêm một số ví dụ mã.
