Trong ứng dụng Delphi 2007 của chúng tôi, chúng tôi đang sử dụng rất nhiều cấu trúc sau
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClass di chuyển phân cấp Chủ sở hữu của thành phần hiện tại lên trên để tìm một lớp cụ thể (trong ví dụ TdmBasicData). Đối tượng kết quả được lưu trữ trong biến Trường FdmBasic. Chúng tôi sử dụng điều này chủ yếu để vượt qua các datamodules cùng.
Ví dụ: Khi tạo báo cáo, dữ liệu kết quả được nén và lưu trữ trong trường Blob của bảng được truy cập thông qua biểu dữ liệu TdmReportBaseData. Trong một mô-đun riêng của ứng dụng của chúng tôi, có chức năng hiển thị dữ liệu từ báo cáo ở dạng Paged bằng cách sử dụng ReportBuilder. Mã chính của mô-đun này (TdmRBReport), sử dụng lớp TRBTempdatabase để chuyển đổi dữ liệu blob nén thành các bảng khác nhau có thể sử dụng được trong trình báo cáo thời gian chạy của Trình xây dựng báo cáo. TdmRBReport có quyền truy cập vào TdmReportBaseData cho tất cả các loại dữ liệu liên quan đến báo cáo (loại báo cáo, cài đặt tính toán báo cáo, v.v.). TRBTempDatabase được xây dựng trong TdmRBReport nhưng phải có quyền truy cập vào TdmReportBasingata. Vì vậy, điều này bây giờ được thực hiện bằng cách sử dụng xây dựng ở trên:
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
Cảm giác của tôi là điều này có nghĩa là TRBTempDatabase biết rất nhiều chủ sở hữu của nó và tôi đã tự hỏi liệu đây có phải là một loại mùi mã hay Anti-pattern.
suy nghĩ của bạn về điều này là gì? Đây có phải là một mùi mã? Nếu vậy, một cách tốt hơn là gì?