ในแอปพลิเคชัน Delphi 2007 ของเราเราใช้โครงสร้างต่อไปนี้มากมาย
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClass เดินทางลำดับชั้นของเจ้าขององค์ประกอบปัจจุบันขึ้นไปเพื่อหาคลาสที่ระบุ (ในตัวอย่าง TdmBasicData) วัตถุที่เป็นผลลัพธ์จะถูกเก็บไว้ในตัวแปรฟิลด์ FdmBasic เราใช้สิ่งนี้เป็นหลักในการส่งดาต้าโมดูล
ตัวอย่าง: เมื่อสร้างรายงานข้อมูลที่ได้จะถูกบีบอัดและจัดเก็บไว้ในเขตข้อมูล Blob ของตารางที่เข้าถึงผ่านดาต้าโมดูลแบบ TdmReportBaseData ในโมดูลที่แยกต่างหากของแอปพลิเคชันของเรามีฟังก์ชั่นเพื่อแสดงข้อมูลจากรายงานในรูปแบบเพจโดยใช้ ReportBuilder รหัสหลักของโมดูลนี้ (TdmRBReport) ใช้คลาส TRBTempdatabase เพื่อแปลงข้อมูล Blob ที่ถูกบีบอัดไปยังตารางต่าง ๆ ที่ใช้งานได้ใน Reportbuilder รันไทม์ Reportdesigner TdmRBReport มีการเข้าถึง TdmReportBaseData สำหรับข้อมูลที่เกี่ยวข้องกับรายงานทุกประเภท (ประเภทของรายงานการตั้งค่ารายงานการคำนวณ ฯลฯ ) TRBTempDatabase ถูกสร้างขึ้นใน TdmRBR พอร์ต แต่ต้องมีการเข้าถึง TdmReportBasedata ดังนั้นตอนนี้จะใช้การก่อสร้างด้านบน:
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
ความรู้สึกของฉันคือสิ่งนี้หมายความว่า TRBTempDatabase รู้เจ้าของจำนวนมากและฉันสงสัยว่านี่เป็นกลิ่นรหัสหรือรูปแบบต่อต้าน
คุณคิดอย่างไรเกี่ยวกับเรื่องนี้? นี่เป็นกลิ่นรหัสหรือไม่? ถ้าอย่างนั้นเป็นวิธีที่ดีกว่าอะไร