Tôi xin lỗi nếu đây là một câu hỏi ngụy biện TUYỆT VỜI, nhưng tôi tò mò không biết những thực tiễn tốt nhất hiện có và dường như tôi không thể tìm thấy câu trả lời hay trên Google.
Trong Python, tôi thường sử dụng một lớp trống làm bộ chứa cấu trúc dữ liệu siêu bắt (giống như một tệp JSON) và thêm các thuộc tính trên đường đi:
class DataObj:
"Catch-all data object"
def __init__(self):
pass
def processData(inputs):
data = DataObj()
data.a = 1
data.b = "sym"
data.c = [2,5,2,1]
Điều này mang lại cho tôi một sự linh hoạt to lớn, bởi vì đối tượng container về cơ bản có thể lưu trữ bất cứ thứ gì. Vì vậy, nếu các yêu cầu mới tăng lên, tôi sẽ chỉ thêm nó dưới dạng một thuộc tính khác vào đối tượng DataObj (mà tôi chuyển xung quanh trong mã của mình).
Tuy nhiên, gần đây tôi rất ấn tượng (bởi các lập trình viên của FP) rằng đây là một thực tế khủng khiếp, bởi vì nó làm cho việc đọc mã rất khó khăn. Người ta phải trải qua tất cả các mã để tìm ra những thuộc tính mà DataObj thực sự có.
Câu hỏi : Làm thế nào tôi có thể viết lại điều này để duy trì tốt hơn mà không bị mất tính linh hoạt?
Có bất kỳ ý tưởng từ lập trình chức năng mà tôi có thể áp dụng?
Tôi đang tìm kiếm các thực hành tốt nhất ngoài đó.
Lưu ý : một ý tưởng là khởi tạo trước lớp với tất cả các thuộc tính mà người ta mong đợi gặp phải, vd
class DataObj:
"Catch-all data object"
def __init__(self):
data.a = 0
data.b = ""
data.c = []
def processData(inputs):
data = DataObj()
data.a = 1
data.b = "sym"
data.c = [2,5,2,1]
Đây thực sự là một ý tưởng tốt? Điều gì xảy ra nếu tôi không biết thuộc tính của mình là gì?