ส่วนประกอบสองอย่างที่เสนอฟังก์ชันการทำงานเดียวกันซึ่งเป็นไปตามความต้องการที่แตกต่างกัน


9

ฉันกำลังสร้างแอปพลิเคชันใน PHP โดยใช้ Zend Framework 1 และ Doctrine2 เป็นเลเยอร์ ORM ทุกอย่างเป็นไปด้วยดี ตอนนี้ฉันสังเกตเห็นว่าทั้ง ZF1 และ Doctrine2 มาพร้อมกับและใช้งานแคชของพวกเขาเอง ฉันได้ประเมินทั้งสองอย่างและในขณะที่แต่ละคนมีข้อดีและข้อเสียของตัวเองทั้งคู่ต่างก็โดดเด่นกว่าคนอื่นสำหรับความต้องการที่เรียบง่ายของฉัน ดูเหมือนว่าไลบรารีทั้งสองนั้นจะถูกเขียนลงบนอินเตอร์เฟสที่เกี่ยวข้องไม่ใช่การประยุกต์ใช้

เหตุผลที่ฉันรู้สึกว่านี่เป็นปัญหาคือในระหว่างการบูตแอปพลิเคชันของฉันฉันต้องกำหนดค่าแคชไดรเวอร์สองตัว - แต่ละอันมีไวยากรณ์ของตัวเอง ไม่ตรงกันถูกสร้างขึ้นอย่างง่ายดายด้วยวิธีนี้และรู้สึกไม่มีประสิทธิภาพในการตั้งค่าสองการเชื่อมต่อกับแบ็กเอนด์แคชเพราะสิ่งนี้

ฉันกำลังพยายามกำหนดว่าอะไรคือวิธีที่ดีที่สุดในการส่งต่อและยินดีรับข้อมูลเชิงลึกที่คุณสามารถเสนอได้

สิ่งที่ฉันคิดตอนนี้มีสี่ตัวเลือก:

  1. ไม่ทำอะไรเลยยอมรับว่ามีสองคลาสที่เสนอฟังก์ชันการแคช
  2. สร้างคลาส Facade เพื่อติดอินเทอร์เฟซของ Zend เข้ากับการใช้แคชของ Doctrine
  3. ตัวเลือก 2 วิธีอื่น ๆ - สร้าง Facade เพื่อแมปอินเทอร์เฟซของ Doctrine บนแบ็กเอนด์ Zend Framework
  4. ใช้หลายอินเทอร์เฟซการสืบทอดเพื่อสร้างอินเทอร์เฟซเดียวเพื่อปกครองทั้งหมดและอธิษฐานว่าไม่มีการซ้อนทับกัน (เช่น: หากทั้งคู่มีวิธี "บันทึก" พวกเขาจะต้องยอมรับพารามิเตอร์ในลำดับเดียวกันเนื่องจาก PHP ขาดความหลากหลายที่เหมาะสม)

ตัวเลือกใดดีที่สุดหรือมีตัวแปร "ไม่มีข้างต้น" ที่ฉันไม่ทราบ?


3
บางทีคุณควรอธิบายปัญหาในแง่ของการออกแบบซอฟต์แวร์โดยทั่วไปสำหรับผู้ที่ไม่รู้ PHP, ZF หรือ Doctrine ห้องสมุดทั้งสองกำลังแคชสิ่งเดียวกันหรือไม่ ถ้าใช่ทำไมไม่ปิดใช้งานหนึ่งแคช ถ้าไม่ใช่ปัญหาคืออะไร เรื่องแบบนั้น
idoby

ก่อนหน้านี้ฉันเคยทำงานกับ. NET CMS ที่มี ORM และผู้ให้บริการแคชการเข้าถึงฐานข้อมูลของตัวเอง ฉันจึงต้องรวม CMS กับแพลตฟอร์มธุรกิจของเราซึ่งใช้ผู้ให้บริการแคชที่แตกต่างอย่างสิ้นเชิง สิ่งนี้ทำให้เรามีปัญหาเนื่องจากผู้ให้บริการแคชภายใน CMS ไม่สามารถปรับขนาดให้กับเว็บฟาร์มได้เมื่อผู้ให้บริการแคชแพลตฟอร์มธุรกิจของเราสามารถปรับขนาดได้ คุณประสบปัญหาอะไรบ้าง
CodeART

ดู Symfony2 และวิธีจัดการกับปัญหานี้
nietonfir

คำตอบ:


7

ไม่ทำอะไรเลยยอมรับว่าโครงการที่แยกต่างหากสามารถมีความซ้ำซ้อนได้ตราบใดที่พวกเขาทำงานในพื้นที่ของตัวเอง หลักคำสอนรู้ว่า Zend มีการแคช แต่พวกเขาไม่ต้องการขึ้นอยู่กับ Zend และในทางกลับกัน ไม่ใช่ทุกคนที่ต้องการใช้ Zend และ Doctrine

ฉันจะให้รหัส Doctrine ใช้ของตัวเองและใช้ ZF เพื่อทุกอย่างอื่น วิธีนี้ฉันเพียงแค่ต้องรู้คลาส ZF แคชหลักคำสอนควรใช้ภายในโดยหลักคำสอนสำหรับวัตถุฐานข้อมูลเท่านั้น ZF มีส่วนหน้ามากขึ้นซึ่งมีประโยชน์นอก ORM เช่นหน้า HTML ส่วนหน้าแคช

การสร้างเลเยอร์อื่นจะเหมาะ แต่จะเพิ่มการพึ่งพาอื่นให้กับโครงการดังนั้นจึงไม่ดีสำหรับการบำรุงรักษา

ฉันรู้ว่าใน bootstrap มันสามารถดูซ้ำซ้อนในการตั้งค่าแคชหลาย ๆ มันจะแย่ลงถ้าคุณพยายามใช้ ZF1, Doctrine และ ZF2 พร้อมกัน แต่มันเป็นเวลาที่มีค่าคงที่น้อยมากเนื่องจากมันเป็นเพียงตัวแปรการตั้งค่าเท่านั้น

ดังนั้นจากมุมมองการเขียนโปรแกรมการบำรุงรักษาและการใช้งาน


3

เหตุผลที่ฉันรู้สึกว่านี่เป็นปัญหาคือในระหว่างการบูตแอปพลิเคชันของฉันฉันต้องกำหนดค่าแคชไดรเวอร์สองตัว - แต่ละอันมีไวยากรณ์ของตัวเอง ไม่ตรงกันถูกสร้างขึ้นอย่างง่ายดายด้วยวิธีนี้และรู้สึกไม่มีประสิทธิภาพในการตั้งค่าสองการเชื่อมต่อกับแบ็กเอนด์แคชเพราะสิ่งนี้

ทำไมไม่เพียงจัดการปัญหาจากจุดยืน "ทำให้การกำหนดค่าสะดวกยิ่งขึ้น"?

กล่าวอีกนัยหนึ่งให้เขียนคลาสใหม่ที่ยอมรับข้อมูลการกำหนดค่าของคุณแล้วนำไปใช้กับทั้งไดรฟ์แคช แน่นอนว่ามันไม่ได้มีความยืดหยุ่น แต่ก็หมายความว่าจะมีน้อยลงที่จะผิด


0

ทำไมไม่สร้างสิ่งที่เป็นนามธรรมของอินเทอร์เฟซของคุณซึ่งสามารถใช้กับแต่ละเฟรมเวิร์กได้? ฉันจะเขียนตัวควบคุมการแคชของตัวเองด้วยวิธีที่ฉันต้องการซึ่งจะแค็ปซูลทั้งแคช จากนั้นฉันสามารถลืมพวกเขาและพูดคุยกับผู้ควบคุมของฉันเท่านั้น มีปัญหาอะไรกับวิธีแก้ปัญหาเหรอ?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.