Bạn gọi lớp nào mà không có phương thức?
Ví dụ,
class A
{
public string something;
public int a;
}
Trên đây là một lớp học mà không có phương pháp nào. Loại lớp này có một tên đặc biệt?
Bạn gọi lớp nào mà không có phương thức?
Ví dụ,
class A
{
public string something;
public int a;
}
Trên đây là một lớp học mà không có phương pháp nào. Loại lớp này có một tên đặc biệt?
Câu trả lời:
Hầu hết thời gian: Một mô hình chống.
Tại sao? Bởi vì nó tạo điều kiện cho lập trình thủ tục với các lớp "Toán tử" và cấu trúc dữ liệu. Bạn tách dữ liệu và hành vi không chính xác OOP.
Thông thường: Một DTO (Đối tượng truyền dữ liệu)
Chỉ đọc các cơ sở dữ liệu có nghĩa là để trao đổi dữ liệu, xuất phát từ một đối tượng kinh doanh / tên miền.
Đôi khi: Chỉ là cấu trúc dữ liệu.
Đôi khi, bạn chỉ cần có những cấu trúc đó để chứa dữ liệu đơn giản và đơn giản và không có thao tác nào trên đó. Nhưng sau đó tôi sẽ không sử dụng các lĩnh vực công cộng mà là các bộ truy cập (getters và setters).
Tôi gọi nó struct
hoặc record
bởi vì nó được sử dụng để lưu trữ dữ liệu và điều này rất phổ biến đối với các ngôn ngữ như C
bạn có thể thấy ở đó: struct (ngôn ngữ lập trình C) . Vì vậy, cá nhân tôi thích sử dụng một struct
thay vì một lớp phù hợp hơn và dễ đọc hơn:
struct A
{
public string something;
public int a;
}
Thông thường chúng được sử dụng làm DTO (Đối tượng truyền dữ liệu) như đã nói.
Chúng được gọi là Các đối tượng __ cũ (PO_Os) trong đó khoảng trống là Java hoặc C hoặc CIL hoặc bất kỳ ngôn ngữ nào bạn đang sử dụng.
Nếu chúng được sử dụng như các khối dữ liệu đơn giản để liên lạc, thì chúng có thể được gọi là Đối tượng truyền dữ liệu (DTO).
Nếu họ đại diện cho một số dữ liệu được cung cấp bên ngoài, họ có thể được gọi là Thực thể .
Tôi sẽ gọi một lớp như vậy là một người giữ dữ liệu có thể thay đổi và đôi khi đã sử dụng một hình thức chung:
class DataHolder<T>
{
public T dat;
}
Lưu ý rằng việc bọc dat
trong một tài sản sẽ làm giảm hiệu suất và không mang lại lợi ích gì, vì không có gì mà người truy cập tài sản có thể làm (ngoài việc đọc / ghi trường) sẽ không phá vỡ một số triển khai. Hơn nữa, có thể cần phải sử dụng Interlocked
các phương thức với dat
(hoặc, nếu đó là một cấu trúc, với các trường của chúng), nhưng điều đó sẽ không thể thực hiện được nếu dat
được bọc trong một thuộc tính.
Lưu ý rằng mặc dù chủ sở hữu dữ liệu có thể thay đổi có thể hữu ích cho các loại (có thể thay đổi hoặc không) có thể giữ dữ liệu, chúng không thể được sử dụng một cách an toàn để trao đổi dữ liệu theo cách tương tự như các loại không thay đổi. Ví dụ: một tuyên bố như:
myData = myCollection.GetData(myKey);
sẽ có ý nghĩa rõ ràng nếu GetData
trả về một loại lớp bất biến hoặc một cấu trúc ("có thể thay đổi" hoặc không) không chứa các tham chiếu đến dữ liệu có thể thay đổi. Tuy nhiên, nếu nó trả về một đối tượng lớp có thể thay đổi, thì sẽ không rõ liệu có bất kỳ thay đổi nào đối với đối tượng đó sẽ bị bỏ qua bởi bộ sưu tập bên dưới hay không, dẫn đến cập nhật sạch cho nó hoặc gây ra một số hành vi không thể đoán trước hoặc không thể đoán trước.
Nếu một người muốn có một dữ liệu trả về bộ sưu tập trong một đối tượng có thể thay đổi, mô hình chính xác thường sẽ là một cái gì đó như:
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
Sử dụng phương pháp đó, có một hàm ý rõ ràng GetData
sẽ gây ra myData
dữ liệu từ bộ sưu tập, nhưng myCollection
sẽ không được dự kiến sẽ giữ một tham chiếu đến nó sau khi chức năng hoàn thành, cũng không sử dụng nó cho bất kỳ mục đích nào khác. StoreData
cũng muốn sao chép thông tin myData
vào cấu trúc dữ liệu nội bộ của chính nó mà không giữ tham chiếu. Lưu ý rằng một ưu điểm của phương pháp này là nếu mã máy khách sẽ đọc nhiều mục dữ liệu trong một vòng lặp, thì nó có thể tạo một phiên bản myData
bên ngoài vòng lặp một cách an toàn , sau đó sử dụng lại ví dụ đó mỗi lần. Tương tự như vậy, myCollection
có thể có thể sử dụng lại thể hiện đối tượng được liên kết với khóa (sao chép dữ liệu từ thể hiện được truyền vào) mà không phải tạo một thể hiện mới.
Tôi sẽ gọi nó là a Schema
.
Điều này bao gồm nhiều cách sử dụng, chẳng hạn như biểu diễn một bảng cơ sở dữ liệu hoặc một bản ghi được giải trừ hoặc DTO, v.v.