คำว่า "บริบท" ในการเขียนโปรแกรม? [ปิด]


161

ฉันได้เขียนโปรแกรมมาหลายเดือนแล้วและคำที่ใช้บ่อยคือ "บริบท" ในชั้นเรียน กดไลค์ServletContext(Java), Activity(Android), Service(Java, Android), NSManagedContext(Objective-C, iOS)

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

ฉันค้นหาบริบทใน Stack Overflow แต่ไม่มีคำถาม / คำตอบที่สามารถช่วยฉันได้

ฉันจะมีความสุขมากถ้ามีคนอธิบายให้ฉันได้


6
บริบทกำลังพูด: พื้นที่ที่วัตถุนี้ทำหน้าที่
Blundell

7
บริบทคือสถานะของวัตถุหรือระบบ ณ เวลาหนึ่ง
Matt 26'11

คำตอบ:


190

สมมติว่าคุณไปหาหมอฟันเพื่อถอนฟันออก

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

สมมติว่าคุณเดินไปที่ธนาคาร

ที่ธนาคารคุณขอถอน $ 100 พนักงานรับฝากจะต้องสร้างตัวตนของคุณก่อนที่จะให้เงินกับคุณดังนั้นคุณอาจต้องแสดงใบขับขี่หรือรูดบัตร ATM ของพวกเขาแล้วป้อนหมายเลข PIN ของคุณ ทั้งสองวิธีสิ่งที่คุณกำลังให้เป็นบริบท พนักงานรับจ่ายใช้ข้อมูลนี้เพื่อย้ายธุรกรรมไปข้างหน้า พวกเขาอาจถามคุณว่าต้องการถอนบัญชีใด เมื่อคุณตอบ"บัญชีออมทรัพย์ของฉัน"ที่แม้บริบทอื่น

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

ทีนี้สมมติว่าคุณเอาเงิน $ 100 และซื้อตั๋วเครื่องบินเพื่อไปอุ่นที่ไหนสักแห่งในขณะที่ปากของคุณรักษา

คุณมาถึงจุดหมายปลายทางที่มีแดดดี แต่กระเป๋าของคุณไม่ได้ทำ มันหายไปที่ไหนสักแห่งในระบบสนามบิน ดังนั้นคุณจึงนำ "สัมภาระรับกระเป๋าเดินทาง" (สติ๊กเกอร์ที่มีบาร์โค้ดติดไว้) ไปยัง "สำนักงานสัมภาระสูญหาย" สิ่งแรกที่คนที่อยู่ด้านหลังโต๊ะจะขอคือตั๋วนั้นพร้อมหมายเลขสัมภาระของคุณ นั่นคือตัวอย่างของบางบริบทที่จำเป็น

แต่แล้วคนที่ฝากกระเป๋าจะขอข้อมูลเพิ่มเติมเกี่ยวกับกระเป๋าของคุณเพื่อให้พวกเขาสามารถค้นหาได้ง่ายขึ้น พวกเขาถามว่า " สีมันคืออะไรขนาดมันคืออะไรมีล้อมันแข็งหรืออ่อนในขณะที่พวกเขาไม่จำเป็นต้องใช้ข้อมูลเหล่านั้นมันจะช่วยให้แคบลงถ้าคุณให้มันลด พื้นที่ที่มีปัญหา. มันทำให้ค้นหาได้เร็วขึ้นมาก. นั่นคือบริบทตัวเลือก

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

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

หวังว่าจะช่วย


22
@Brian: จากโพสต์ของคุณและคำตอบอื่น ๆ ที่ได้รับที่นี่ฉันคิดว่าฉันอาจเริ่มเข้าใจ วัตถุที่มีข้อมูลสถานะเกี่ยวกับเหตุการณ์เป็นวัตถุ "บริบท" หรือไม่ จะถูกต้องไหม? ดังนั้นวัตถุ RequestContext จะนำข้อมูลเกี่ยวกับคำขอเฉพาะถูกต้องหรือไม่ และเมื่อมีคำขออื่นมาข้อมูลที่แนบมากับ RequestContext-object จะเปลี่ยนไป มันผิดที่จะบอกว่าบริบทวัตถุเป็นบิตเช่น DTO (วัตถุการถ่ายโอนข้อมูล)? อย่างไรก็ตามบริบทนำข้อมูลเกี่ยวกับ "สิ่งต่าง ๆ ที่เกี่ยวข้อง" ในขณะที่ DTO มีข้อมูลเกี่ยวกับวัตถุเช่นบุคคลหรือไม่ขอบคุณ
user772058

9
คุณจับมันถูกต้องแล้ว RequestContext จะนำข้อมูลเกี่ยวกับการร้องขอที่กำลังดำเนินการ (ตัวอย่างเช่นโลแคลของลูกค้า) บริบทคล้ายกับ DTO / VO แต่โดยทั่วไปจะไม่ได้พิมพ์อย่างรุนแรง แต่คุณมีแนวคิดที่ดี
Brian Kelly

5
@Brian: คำถามอีกข้อหนึ่งถูกนำมานึกเมื่อพูดถึงเมนูบริบทความหมายของบริบทที่ฉันเรียนรู้จากคำตอบนี้ไม่สมเหตุสมผลในหัวของฉัน อย่างที่ฉันเข้าใจแล้วในตอนนี้บริบท (สั้น ๆ ) สำหรับการพกติดตัว ดังนั้นมันหมายความว่าอย่างไรเมื่อใช้คำว่า "บริบท" ด้วยวิธีนี้
user772058

9
คำถามที่ดี. ความหมายของ "บริบท" ภายใน "เมนูบริบท" คือ "สิ่งที่คุณจะเห็นในเมนูนั้นขึ้นอยู่กับที่คุณคลิกเมื่อคุณคลิกและสิ่งที่เกิดขึ้นในแอปพลิเคชันของคุณ" ข้อมูลเหล่านั้น (ที่ / เวลา / สิ่งที่คุณคลิก) แสดงถึงบริบทและจะถูกส่งไปยังโค้ด GUI เพื่อให้สามารถตัดสินใจเลือกสิ่งที่จะนำเสนอบนเมนู
Brian Kelly

2
ดังนั้นพารามิเตอร์ของวิธีนี้จึงเป็นบริบท ฉันผิดหรือเปล่า?
Aydoğan

14

บริบทสามารถมองเห็นเป็นที่ฝากข้อมูลเพื่อส่งผ่านข้อมูลไปรอบ ๆ โดยทั่วไปจะใช้เพื่อส่งผ่านสิ่งต่าง ๆ ที่ไม่จำเป็นต้องเชื่อมโยงโดยตรงกับการเรียกใช้เมธอด แต่อาจเกี่ยวข้องกัน วิธีธรรมดา ๆ ในการอธิบายมันอาจเป็น "สิ่งที่คุณอาจสนใจ"

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

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


7
อีกวิธีที่มีประโยชน์ในการคิดเกี่ยวกับมันคือ "ข้อมูลเกี่ยวกับสิ่งที่เกิดขึ้น" หรือมากกว่าด้านวิชาการก็คือ "ข้อมูลเมตา" นั่นเป็นวลีเชิงวิชาการที่น่าสนใจ แต่แม่นยำ ในบริบทนี้.
Brian Kelly

4
โดยทั่วไปจะเป็นรัฐในเวลาไม่ซับซ้อนกว่านั้น
แมตต์

13

นี่คือ 2015 - อาจปีหลังจากที่กระทู้นี้เริ่ม

อย่างไรก็ตามฉันกำลังโพสต์ข้อความนี้เพื่อช่วยเหลือทุกคนที่นั่นเหมือนฉันที่พยายามดิ้นรนเพื่อ "บริบท"

ฉันไม่เคยอ้างว่าเคยใช้บริบทในโปรแกรม Java - ดังนั้นทั้งหมดขึ้นอยู่กับคุณที่จะเขียนบริบทออกมาในการเข้ารหัสอย่างหนักดังนั้นที่นี่จะไป: -

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

เช่น

ผู้ป่วยไปที่หมอและบอก treat_me ("ฉันปวดหัว") เอกสาร Doc ให้ผู้ป่วยกรอกแบบฟอร์ม กรอกแบบฟอร์มผู้ป่วย แพทย์ใช้แบบฟอร์มเพื่อดำเนินการตามคำขอ "treat_me"

นี่คือลักษณะของคำขอตอนนี้:

treat_me ( "i have a headache", filled_form_num_23321 ) 

นี่คือfilled_form_num_23321 ลักษณะที่ปรากฏ:

Q. สิ่งที่นำไปสู่สภาพ? A. 10 หมุดของเรียบร้อยก็อตช์คืนนี้
ชื่อ Q.Patient? A. Joe Bigdrinker
Q.Age? 98

ในการทำธุรกรรมนี้filled_form_num_23321คือ "บริบท"

หวังว่าสิ่งนี้จะช่วยในการอธิบายแนวคิดของ "บริบท"


7

ฉันมักจะนึกถึงบริบทว่าเป็นสถานะเฉพาะที่เกี่ยวข้องกับวัตถุหรือสิ่งก่อสร้างที่ฉันกำลังทำงานด้วย

ตัวอย่างเช่นเมื่อคุณใช้ drawRect ในมุมมอง (ที่ต้องวาดรูปทั้งหมดสำหรับมุมมอง) คุณจะต้องได้รับ currentGraphicsContext ที่คุณจะออกงบกราฟิกหลักของคุณ บริบทนี้มีสิ่งต่าง ๆ เช่นขอบเขตของมุมมองสีเส้นขีดความหนาของเส้นขีดสำหรับการวาดเส้นสีเติมสำหรับการเติมเส้นทางที่ปิด ฯลฯ บริบทนี้ (เช่นอื่น ๆ ส่วนใหญ่) เป็นเพียงสถานะปัจจุบัน ณ เวลานี้ ดังนั้นคิดว่าบริบทกราฟิกในกรณีนี้เป็นเพียงชุดของรัฐเช่น

ความหนาของเส้นขีดคือ 1.5 พิกเซลสีเติมเป็นขอบเขตสีดำของมุมมองคือ (155, 200) สีเส้นขีดเป็นสีแดง

โดยพื้นฐานแล้วเป็นสถานะ ณ เวลาปัจจุบัน ...


5

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

โค้ดหลอกบางอย่าง:

class FooPage
{
    void handleRequest(RequestContext context)
    {
        User user = context.getUser();
        Locale locale = context.getLocale();

        … do some logic based on the context
    }
}

มันไม่ใช่เรื่องยาก แต่มันต้องใช้เวลาพอสมควรในการทำความเข้าใจแนวคิด


5

บริบทหมายถึงบริบทการดำเนินการซึ่งเป็นสัญลักษณ์ที่สามารถเข้าถึงได้จากจุดที่กำหนดในรหัสและค่าของสัญลักษณ์เหล่านั้นในการดำเนินการนั้น ๆ

บริบทเป็นแนวคิดที่สำคัญเพราะ:

  1. หน่วยที่ปฏิบัติการได้ (ฟังก์ชั่นขั้นตอนคำแนะนำ) อาจให้ผลลัพธ์ที่แตกต่างหรือทำงานแตกต่างกันภายใต้บริบทที่แตกต่างกัน
  2. บริบทที่มีขนาดใหญ่ขึ้นหรือซับซ้อนมากขึ้นนั้นยากที่จะเข้าใจว่าโค้ดทำอะไรได้บ้าง

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

แม้ว่าคุณจะไม่ได้พูดภาษาอังกฤษ แต่ฉันขอแนะนำให้คุณอ่านCode Completeเพื่อนำเสนอแนวคิดอย่างนุ่มนวลและละเอียดถี่ถ้วนเช่นบริบท , ความเป็นโมดูล , การมีเพศสัมพันธ์ , การทำงานร่วมกันและอื่น ๆ


ฉันเห็นว่ามีรุ่นที่สอง ฉันสามารถอ่านพบมันที่นั่นด้วยได้ไหม?
user772058

ฉันเรียกดูฉบับที่สองที่ร้านหนังสือและตัดสินใจที่จะยึดติดกับต้นฉบับ ฉันจำไม่ได้ว่าทำไม
Apalala

2

บริบทในกรณีของคุณคือสภาพแวดล้อมที่แอปพลิเคชันของคุณทำงานอยู่

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

HTH


0

ทั้งหมดบ่อยเกินไปผู้เขียนถือว่าผู้อ่านมีความเข้าใจรายละเอียดของบริบทคำว่า "บริบท" ถูกใช้งาน

จะกำหนดบริบทในประโยคต่อไปนี้ได้อย่างไร "The? runtime สร้างบริบทที่สามารถเก็บค่าการฉีดที่เป็นไปได้บริบทนี้สามารถแก้ไขได้เช่นแอปพลิเคชันและกรอบสามารถเพิ่มองค์ประกอบให้กับบริบทได้

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


0

3 ปีต่อมาดังนั้นอาจช้าไปหน่อย แต่บางทีกระทู้นี้อาจช่วยคุณได้ มันแสดงให้เห็นว่าคำว่า "บริบท" มีความหมายทางเทคนิคในการเขียนโปรแกรม (ไม่ใช่แค่ความหมายภาษาอังกฤษธรรมดา)

ภาษาการเขียนโปรแกรมแบบใดที่ไม่มีบริบท

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

แก้ไข: หรืออย่างน้อยก็แสดงให้เห็นว่าคำว่า "บริบท" สามารถนำไปใช้ในด้านเทคนิคและบริบทการเขียนโปรแกรม (ไม่มีจุดประสงค์ในการเล่นเกม) อาจเป็นไปได้ในการประยุกต์ใช้คำศัพท์มากกว่าหนึ่งอย่าง

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