Nếu ai đó viết mã để có thể truy cập biến nội bộ $ _fields mà không cần sử dụng các phương thức getter / setter, thì có một thuật ngữ thích hợp được sử dụng để mô tả điều đó không?
Một cái gì đó đủ lịch sự để sử dụng với quản lý :)
Nếu ai đó viết mã để có thể truy cập biến nội bộ $ _fields mà không cần sử dụng các phương thức getter / setter, thì có một thuật ngữ thích hợp được sử dụng để mô tả điều đó không?
Một cái gì đó đủ lịch sự để sử dụng với quản lý :)
Câu trả lời:
Phơi bày những thành viên tư nhân không bao giờ là một điều tốt trong xã hội lịch sự ...
Thực hành này là thiếu / đóng gói kém.
private
) đã có một triển khai khác về khái niệm đóng gói.
__
xáo trộn của một lớp khác hoặc bỏ qua các quy ước của một tiền tố gạch dưới duy nhất (mặc dù nếu getter của bạn đang thực hiện hành vi khác; thực sự nên sử dụng để xáo trộn tên). Các ngôn ngữ khác cũng có thể đóng gói kém, ví dụ, sự phản chiếu trong Java và số học con trỏ trong C ++ để có được các biến riêng tư. Python không tạo ra cú pháp để làm điều đó rườm rà.
__
xáo trộn tên. Không có __
, nó thiết kế vẫn phản ánh đóng gói tốt. Cho rằng "công khai" có nghĩa là "thiếu / đóng gói kém" là sai. Khái niệm này vẫn còn. Mã nguồn thiếu trang trí thích hợp.
Bên cạnh việc thiếu đóng gói đã được Oded đề cập, tùy thuộc vào ngôn ngữ lập trình và mô hình của nó, nó cũng có thể là "dữ liệu cũ đơn giản" (trong đó không nhất thiết phải là mùi antipotype hoặc mã).
Tôi đã nghe thuật ngữ "vật thể trần trụi" trước đây.
Nó được gọi là một túi tài sản.
Thông thường, nó được sử dụng để giữ một tập hợp các thuộc tính có thể liên quan (mỗi thuộc tính có thể có khả năng là một đối tượng lớp có các chỉ định truy cập phù hợp hay không). Nhưng cấu trúc xung quanh chỉ là một túi tài sản.
Nó được gọi là "không tuân theo một tiêu chuẩn mã hóa cụ thể".
OP đã viết:
một biến nội bộ $ _fields có thể truy cập mà không cần sử dụng các phương thức getter / setter
Điều đó có thể trái với tiêu chuẩn của bạn và (do đó) có thể là mùi mã. Nhưng nó không nhất thiết là đóng gói nghèo. Việc để lộ một biến nội bộ (như "chỉ sử dụng nội bộ") đối với getter và setters với thế giới bên ngoài sẽ còn tồi tệ hơn.
Câu hỏi là: có nên $_fields
truy cập được cho thế giới bên ngoài?
Nếu vậy, chúng ta có một trường hợp bạn sẽ thêm các phương thức getter / setter. Các phương thức này không gói gọn bất cứ điều gì ngoài thực tế đó $_fields
là một biến số của một loại nào đó (trái ngược với một cái gì đó được tính toán / tìm nạp / v.v. khi đang bay). Tùy thuộc vào ngôn ngữ, có thể bạn vẫn sẽ rò rỉ loại (còn gọi là chi tiết triển khai) ra bên ngoài. Cho dù bạn luôn muốn getters / setters, hoặc chỉ khi "cần thiết" là một vấn đề tiêu chuẩn mã hóa.
Nếu $_fields
nên không thể truy cập, sau đó, tốt, không truy cập vào nó. Việc bạn có nên ngăn người khác truy cập nó ở cấp độ ngôn ngữ (riêng tư và bạn bè) hay không (có thể dễ dàng gỡ lỗi trong một số trường hợp nhất định) - một lần nữa - một vấn đề tiêu chuẩn mã hóa.
Vấn đề đóng gói hoàn toàn trực giao với điều này. Vi phạm đóng gói là hoàn toàn có thể với getters và setters. Thậm chí còn dễ dàng hơn để đi vào, bởi vì hầu hết tiếng chuông báo thức của mọi người không vang lên khi họ nhìn thấy một loạt các getters và setters - mã dường như tuân theo các thực tiễn tốt nhất. Mã, điều đó rất có thể giới thiệu nhiều phụ thuộc hơn vào các chi tiết triển khai nội bộ so với một biến được gọi là $_fields
không xảy ra private
.
Tôi là một fan hâm mộ của những điều tương tự tồi: Gọi rằng đóng gói kém cũng giống như gọi ai đó cầm súng là kẻ giết người.
Tôi sẽ gọi các biến như vậy các biến thành viên công cộng .
nếu các phương thức setter / getter của bạn không có gì hơn
void setfoo(bar){foo=bar;}
foo getfoo{return foo;}
sau đó chỉ cần tạo một biến pubic chỉ là lưu một số cách gõ bên ngoài một vài trường hợp cạnh trong đó sự khác biệt quan trọng.