การแจ้งคุณลักษณะและการอนุญาต

ฉันเพิ่งสะดุดกับแนวคิดของการตั้งค่าสถานะคุณลักษณะ และ Java lib โอเพ่นซอร์สยอดนิยมสำหรับสิ่งนี้ที่เรียกว่า Togglz ซึ่งอ้างอิงถึงโพสต์บล็อกของ Martin Fowler:

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

แต่สำหรับฉัน สิ่งนี้ดูเหมือนการอนุญาต: ผู้ใช้ได้รับอนุญาตให้ดูเนื้อหานี้หรือไม่

ตัวอย่างเช่น ผู้ใช้ควรเห็นเมนู FizzBuzz หรือไม่

ใน Togglz ฉันอาจใช้การตรวจสอบนี้ดังนี้:

if(MyFeatures.ShowFizzBuzz.isActive()) {
    // Show the FizzBuzz menu.
}

ในพูดว่า Apache Shiro ฉันสามารถทำสิ่งเดียวกันได้:

ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
if(currentUser.isPermitted(showFizzBuzz) {
    // Show the FizzBuzz menu.
}

ขอย้ำอีกครั้งว่าฟีเจอร์การตั้งค่าสถานะเพียงให้ความรู้สึกเป็นปัญหาเดียวกันกับการตรวจสอบบทบาทหรือสิทธิ์

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


person smeeb    schedule 21.11.2014    source แหล่งที่มา


คำตอบ (2)


ฉันจะใช้ Mr. คำศัพท์เฉพาะของฟาวเลอร์สำหรับฟีเจอร์สลับสองประเภท:

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

การตั้งค่าสถานะคุณลักษณะแตกต่างจากการอนุญาตและการตรวจสอบบทบาท/สิทธิ์อย่างไร และกรณีการใช้งานที่เป็นรูปธรรมประเภทใดที่เป็นตัวอย่างความแตกต่างนี้

ฉันคิดว่าการอนุญาตและการตรวจสอบบทบาท/สิทธิ์เป็นการกำหนดค่าภายใต้การใช้งาน Business Toggle การตรวจสอบสิทธิ์เป็นฟีเจอร์ Business Toggle ของคุณ Shiro จะเป็นเครื่องมือที่ช่วยคุณกำหนดค่าและบังคับใช้ฟีเจอร์การตรวจสอบสิทธิ์ของคุณ Togglz เป็นกรอบการทำงานสำหรับการใช้งาน Business Toggles หรือ Version Toggles สามารถ ใช้สำหรับคุณลักษณะการตรวจสอบสิทธิ์

หากคุณใช้ Togglz เพื่อเปิด/ปิดการตรวจสอบสิทธิ์ และจากนั้น Shiro เพื่อบังคับใช้การกำหนดค่าของผู้ใช้ โค้ดของคุณจะมีลักษณะดังนี้:

if(MyFeatures.ShowFizzBuzz.isActive()) {
  ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission();
  if(currentUser.isPermitted(showFizzBuzz) {
    // Show the FizzBuzz menu.
  }
}

คุณอาจเลือกที่จะลืมการสลับคุณลักษณะได้ เนื่องจากคุณต้องการเปิดการตรวจสอบสิทธิ์อยู่เสมอ การสลับเป็นเพียงการแนะนำการตรวจสอบเพิ่มเติมและหนี้ทางเทคนิค

เมื่อใดที่ฉันควรใช้การตรวจสอบการอนุญาต/บทบาท/การอนุญาต และเมื่อใดที่ฉันควรใช้แฟล็กคุณลักษณะ

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

person ajk    schedule 02.02.2015

ฉันจะไม่ตอบตรรกะเบื้องหลัง Togglz ในเอกสาร FF4J (การพลิกฟีเจอร์สำหรับ Java) คุณจะพบสคีมาที่ชัดเจนซึ่งอธิบายความแตกต่างได้

การสลับคุณลักษณะเทียบกับการให้สิทธิ์

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

เมื่อคุณระบุกลไกการสลับคุณลักษณะแล้วจะมีคุณค่าอย่างยิ่ง (คุณสามารถเลือกกรณีการใช้งานที่ด้านล่างของหน้า ff4J.org) คุณสามารถตรวจสอบการอนุญาตได้

การตรวจสอบสิทธิ์ในบริบทการสลับคุณลักษณะมีไว้เพื่อดำเนินการ "Canary Release" : เปิดคุณลักษณะใหม่สำหรับผู้ใช้กลุ่มย่อยที่จำกัดก่อนที่จะเปิดให้ทุกคน

person Cédrick Lunven    schedule 01.11.2015