Tôi có một lớp (giao diện) trong ứng dụng 4 góc của tôi có nhiều trường. Lưu ý rằng trường hợp của lớp/giao diện này là immutable
(tức là các thành viên sẽ KHÔNG BAO GIỜ được thay đổi).Tác động hiệu suất của một lớp/giao diện với nhiều trường là gì?
Ví dụ:
public interface IHaveALotOfFields {
field1: string;
//...
field500: string;
}
Giao diện này được cung cấp qua dịch vụ (đơn đăng ký) được hiển thị với tư cách thành viên. Ví dụ.
@Injectable()
public class MyService {
public translations: ITranslationsProvider;
}
Dịch vụ này được tiêm vào rất nhiều thành phần (gần như tất cả các thành phần) và thường được sử dụng trong mẫu tương ứng của họ và thường cũng trong ts
-part của các thành phần. Ví dụ.
@Component({
template: `Value: {{service.field500}}`
})
export class MyComponent {
public constructor(public service: MyService) {
}
private doSomething(): string {
return this.service.field1;
}
}
Bây giờ câu hỏi của tôi:
- một lớp lớn (với rất nhiều lĩnh vực) sẽ làm cho góc chậm vì việc phát hiện sự thay đổi?
- Có cách nào để đánh dấu một lớp là "Bỏ qua tôi khi phát hiện thay đổi" không? (một cái gì đó tương tự như
ChangeDetectionStrategy.OnPush
, nhưng thay vì chỉ định điều này cho mỗi thành phần, có thể được khai báo trên chính lớp đó hoặc trên thành viên của dịch vụ)
Xin lưu ý rằng tôi không muốn thay đổi phát hiện thay đổi chiến lược của tất cả các thành phần của tôi đến OnPush
.
Giao diện chỉ là một cách kiểm tra kiểu. Nó sẽ không được tiêm ... Chỉ các đối tượng được tiêm đã được khởi tạo bởi một lớp mới. Giao diện là một hợp đồng mà lớp sẽ tuân theo. Trong giao diện, bạn gán các thuộc tính và phương thức chữ ký cho hợp đồng ... Các dịch vụ có @Injectable và Angular sẽ xử lý sự khởi tạo của những cái để bạn tự động kết nối mọi thứ lại với nhau. – JGFMK
Tôi biết. Tôi có các lớp cụ thể thực hiện giao diện này. 'MyService' về cơ bản nhận một thể hiện của một lớp thực hiện giao diện được tiêm. –
Giao diện không được tiêm các đối tượng duy nhất .. Đây là những gì tôi hy vọng sẽ giúp bạn. tức là bạn không thể làm mới trên giao diện ... – JGFMK