วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

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

5
คุณใช้ประโยชน์จากหลักการแบบเปิดหรือไม่
หลักการ open-closed (OCP) ระบุว่าควรเปิดวัตถุสำหรับส่วนขยาย แต่ปิดเพื่อทำการปรับเปลี่ยน ฉันเชื่อว่าฉันเข้าใจและใช้งานร่วมกับ SRP เพื่อสร้างคลาสที่ทำสิ่งเดียวเท่านั้น และฉันพยายามสร้างวิธีการขนาดเล็กจำนวนมากที่ทำให้สามารถแยกการควบคุมพฤติกรรมทั้งหมดออกเป็นวิธีที่อาจขยายหรือแทนที่ในคลาสย่อยบางประเภท ดังนั้นฉันจบลงด้วยคลาสที่มีคะแนนส่วนขยายมากมายไม่ว่าจะเป็น: การฉีดและองค์ประกอบ, เหตุการณ์, การมอบหมาย ฯลฯ พิจารณาคลาสที่เรียบง่ายและขยายได้ดังต่อไปนี้ class PaycheckCalculator { // ... protected decimal GetOvertimeFactor() { return 2.0M; } } ตอนนี้พูดเช่นว่าการOvertimeFactorเปลี่ยนแปลง 1.5 ตั้งแต่ระดับดังกล่าวข้างต้นได้รับการออกแบบมาเพื่อขยายฉันสามารถ subclass OvertimeFactorและกลับที่แตกต่างกัน แต่ ... แม้จะมีคลาสที่ถูกออกแบบมาสำหรับการขยายและการยึดติดกับ OCP ฉันจะแก้ไขวิธีการที่เป็นปัญหามากกว่าซับคลาสและแทนที่วิธีการที่มีปัญหา ด้วยเหตุนี้ฉันจึงละเมิดส่วนหนึ่งของความพยายามของ OCP ที่จะทำให้สำเร็จ รู้สึกเหมือนฉันเพิ่งขี้เกียจเพราะสิ่งที่กล่าวมานั้นง่ายกว่านิดหน่อย ฉันเข้าใจ OCP ผิดหรือเปล่า? ฉันควรจะทำอะไรที่แตกต่างออกไปจริงๆเหรอ? คุณใช้ประโยชน์จาก OCP ต่างกันหรือไม่ อัปเดต …

6
การพัฒนาที่ขับเคลื่อนด้วยการทดสอบ - ใครควรเขียนการทดสอบ
เดิมทีมันเป็นหน้าที่ของนักพัฒนาในการเขียนการทดสอบ แต่ฉันสังเกตเห็นว่าในหลายกรณี / นักพัฒนา e-mature กรณีเหล่านั้นจะไม่ให้ความคุ้มครองถึง 80% ฉันมีคน QA ที่ทุ่มเทให้กับการเขียนการทดสอบทั้งหมดสำหรับโครงการที่กำหนดแทนที่จะเป็นนักพัฒนาได้อย่างไร มีข้อเสียใด ๆ หรือไม่?

5
โครงการแยกที่หมายเลขเวอร์ชันของฉันเริ่มต้นที่ไหน
ฉันได้แยกโครงการและมีการเปลี่ยนแปลงมากมาย ทางแยกนี้ไม่ได้เป็นเพียงการเปลี่ยนแปลงคุณสมบัติเล็กน้อยที่นี่และการแก้ไขข้อบกพร่องที่ฝังอยู่ที่นั่นมันเป็นการเปลี่ยนแปลงที่สำคัญมาก มีการแชร์รหัสหลักส่วนใหญ่เท่านั้น ฉันแยกโครงการนี้เป็น v2.5.0 ในขณะที่ฉันเริ่มรุ่นส้อมของฉันที่ v3.0 อย่างไรก็ตามฉันไม่แน่ใจว่านี่เป็นวิธีที่ถูกต้องหรือไม่ส่วนใหญ่เป็นเพราะเมื่อโครงการนั้นถึง v3.0 สิ่งต่าง ๆ จะสับสน แต่ฉันไม่ต้องการเริ่มต้นใหม่ที่ v1.0 หรือ v0.1 เพราะนั่นหมายถึงช่วงวัยเด็กความไม่แน่นอนและการไม่ refindness ของโครงการ สิ่งนี้ไม่เป็นความจริงเนื่องจากรหัสหลักส่วนใหญ่นั้นละเอียดและเสถียรมาก ฉันหลงทางในสิ่งที่ต้องทำดังนั้นฉันจึงถามที่นี่: อะไรคือวิธีมาตรฐานในการจัดการกับสถานการณ์แบบนี้? ทำส้อมส่วนใหญ่เริ่มต้นใหม่อีกครั้งชนหมายเลขรุ่นหรือทำอย่างอื่นที่ฉันไม่ทราบ
12 versioning 

6
ถ้าคุณใช้เวลาหนึ่งหรือสองปีในการเป็นนักพัฒนามันเป็นเรื่องยากที่จะกลับมาเป็นนักพัฒนาหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน8 ปีที่ผ่านมา ฉันทำงานเป็นนักพัฒนามาประมาณ 3 ปีแล้ว (ตรงจากสถาบัน) ฉันสงสัยว่าถ้าฉันใช้เวลาหนึ่งหรือสองปีมันจะเป็นไปไม่ได้ไหมที่ฉันจะกลับเข้าสู่อุตสาหกรรม? ฉันไม่ได้รับสิ่งที่ช่องว่างปีออกจากระบบของฉันหลังจากที่ uni และฉันคิดว่าฉันควรจะทำก่อนที่ฉันจะตี 30 (24 ตอนนี้) ความกังวลหลักของฉันคือถ้าฉันออกจากอุตสาหกรรมตอนนี้ฉันอาจ อย่ากลับเข้าไปทำงานเลยและลงเอยด้วยการทำงานบางอย่างให้จบ วิธีที่ฉันเห็นสิ่งต่าง ๆ นั้นแนวคิดทั่วไป / รูปแบบการออกแบบและอื่น ๆ ยังคงคล้ายกันในช่วงหลายปีที่ผ่านมาและส่วนใหญ่เป็นการเข้ารหัสไวยากรณ์ / การใช้งานจริงที่วิวัฒนาการขึ้นดังนั้นมันจึงไม่ควรเคลื่อนไหวอย่างรวดเร็ว นอกจากนี้นักพัฒนาสตรี (ใช่มีบางอย่าง!) ใช้เวลาหลายปีในการมีลูกและยังคงดำเนินต่อไปในอาชีพของพวกเขาในภายหลังดังนั้นจึงเป็นไปไม่ได้เลย Ultimatum: จะใช้เวลาหนึ่งหรือสองปีในการทำลายอาชีพ (เล็ก) ที่ฉันสร้างมาจนถึงตอนนี้หรือไม่?
12 experience 

2
อะไรคือความคิดเห็นของคุณเกี่ยวกับ“ Gamification”? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันดูวิดีโอ Google Talk ที่น่าสนใจ (เตือนเกี่ยวกับเวลาของคุณหนึ่งชั่วโมง) เกี่ยวกับ Gamification ในสิ่งที่คุณกำลังทำ เป็นที่ชัดเจนว่าชุดของไซต์ StackExchange ใช้หลักการเหล่านี้ค่อนข้างน้อย มีบางอย่างที่น่าสนใจเกี่ยวกับการทำให้การทำงานสนุก แต่ฉันสงสัยว่าโดเมนปัญหาจำนวนมากสามารถรวมแนวคิดเหล่านี้ได้อย่างไร มันใช้กับแอปพลิเคชั่นโซเชียลอย่างแน่นอน แนวคิดของโปรแกรมความภักดีเสมือนนั้นก็น่าสนใจเช่นกัน คำอธิบายสั้น ๆ ของ Gamification: มีระบบการให้คะแนนและให้รางวัล ตัวอย่างเช่นชื่อเสียงใน StackExchange เป็นประเภทของการให้คะแนน ป้ายเป็นรางวัลประเภทหนึ่ง สิทธิพิเศษเพิ่มเติมที่คุณได้รับเมื่อชื่อเสียงของคุณเพิ่มขึ้นก็เป็นรางวัลเช่นกัน ตัวอย่างของโปรแกรมความภักดีที่ไม่มีการไถ่ถอนจริงจะเป็นโปรโมชั่นที่ร้านสะดวกซื้อใช้เวลานานในการซื้อผลิตภัณฑ์และรับเครดิต FarmVille ไม่มีเงินจริงหรือมือแลกเปลี่ยนสินค้าและค่าใช้จ่ายให้กับผู้ค้าปลีกจะน้อยที่สุดที่ดีที่สุด แต่มันนำมาซึ่งเงินจริงสำหรับการจ่ายคืนเสมือนจริงเหล่านี้ การใช้ลิงค์ของ JohnL อย่างไร้ที่ติ: http://en.wikipedia.org/wiki/Gamification หมายเหตุ: ผู้พูดหมายถึงผู้ใช้สี่คลาสซึ่งดูเหมือนจะเป็นต้นแบบ พวกเขาคือ Achievers, Socializer, Explorer และ Killers ผู้ที่ประสบความสำเร็จมักจะใช้กับโปรแกรมเมอร์ของเราทุกคน …

17
ยังคงมีความจำเป็นในการเขียน SQL หรือไม่?
ด้วยเครื่องมือ ORM จำนวนมากสำหรับภาษาที่ทันสมัยส่วนใหญ่ยังมีกรณีการใช้งานสำหรับการเขียนและดำเนินการ SQL ในโปรแกรมในภาษา / สภาพแวดล้อมที่สนับสนุนพวกเขาหรือไม่? ถ้าเป็นเช่นนั้นทำไม เพื่อความชัดเจน:ฉันไม่ได้ถามว่าโปรแกรมเมอร์จำเป็นต้องรู้จัก SQL หรือไม่ถ้าฉันควรมีเครื่องมือ SQL บนเดสก์ท็อปของฉัน ฉันถามโดยเฉพาะว่าทำไมฉันถึงมีมันในรหัส (หรือ config หรืออะไรก็ตาม) เมื่อเทียบกับ ORM
12 design  sql 

5
JVM และ Java ของ WORA แตกต่างจากภาษาระดับสูงอื่น ๆ อย่างไร
ในโลกของ Java เรามักจะพูดถึง JVM และเมื่อ Java เป็นรุ่นใหม่มันมีคุณสมบัตินักฆ่าที่คาดว่าจะเป็นของ "Write Once, Run Anywhere" จากวิธีที่ผู้คนพูดคุยและเขียนสิ่งนี้ดูเหมือนจะแตกต่างจากวิธีการทำงานของ Python แต่ฉันไม่ได้ตระหนักถึงวิธีการที่รหัส Python ที่ฉันเขียนจะทำงานแตกต่างกันในเครื่องอื่น (แม้ว่าฉันจะไม่ได้เขียน Python มาก) แล้วฉันจะพลาดอะไรไป? JVM แตกต่างจาก Python interpreter อย่างไร? มีวิธีที่ Python ขาดความเป็นอิสระของแพลตฟอร์ม Java หรือไม่? หรือนี่เป็นเพียงความแตกต่างทางวัฒนธรรม?

8
คุณหาเวลาทำงานในโครงการโอเพ่นซอร์สได้อย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา พื้นหลังเล็กน้อย: ฉันมีโครงการโอเพ่นซอร์สขนาดเล็กที่ฉันได้เริ่มทำมาซึ่งเป็นกรอบพื้นฐานที่ให้วิธีการเชิงวัตถุในการสร้างโค้ด HTML (เนื่องจากฉันไม่ชอบ HTML จริงๆและฉันชอบ PHP) . มีแหล่งเผยแพร่และการดาวน์โหลดไม่กี่ครั้ง แต่โดยหลักแล้วโครงการนี้เหมาะสำหรับฉันส่วน Open Source เป็นเพียงผลประโยชน์ด้านเดียวเท่านั้น โครงการดั้งเดิมที่ทำให้ฉันสามารถพัฒนาในโครงการนี้ส่วนใหญ่ได้เข้าสู่โหมดไฮเบอร์เนตในขณะนั้นซึ่งหมายความว่าการพัฒนาทั้งหมดที่ฉันได้รับในขณะนี้เป็นเวลาส่วนตัวเท่านั้น น่าเสียดายที่ฉันกำลังศึกษาต่อระดับปริญญาตรีของฉันกำลังเรียนเพื่อขอใบรับรองและฉันมีลูกสามเดือนที่บ้าน ในระยะสั้นโดยเวลาที่ฉันได้รับ "เวลาฉัน" ฉันไม่ค่อยรู้สึกเหมือนทำงาน แต่มักจะรู้สึกเหมือนเพิ่งทำใจให้สบาย ดังนั้นหากมีคนอื่นที่อยู่ที่นั่นรู้สึกว่าพวกเขาอยู่ในตำแหน่งที่คล้ายกันคุณใช้กลยุทธ์อะไรในการทำให้ตัวเองมีแรงบันดาลใจในการทำงานในโครงการ อย่างน้อยฉันก็อยากจะทำงานกับเรื่องนี้จนกว่าฉันจะได้รับข้อมูลจำเพาะ 100% แต่ฉันไม่ได้แหล่งข้อมูลที่มุ่งมั่นในเดือน ใครบ้างที่สามารถช่วยเหลือได้

9
เวลาที่ใช้ในการปรับแต่งสภาพแวดล้อมของเครื่อง dev ของคุณคุ้มค่าหรือไม่
มีบางครั้งที่ฉันทำงานเกี่ยวกับโปรเจ็กต์การเขียนโปรแกรมและฉันได้รับ itch เพื่อเปลี่ยนแปลงบางสิ่งในสภาพแวดล้อมของฉัน (OSX หรือ Linux) Vim อาจไม่ทำสิ่งที่ฉันต้องการอย่างแน่นอนดังนั้นแทนที่จะทำรอบเกี่ยวกับวิธีที่ฉันทำมาสองสามเดือน (บางครั้งหลายปี) ฉันไปหาวิธีที่ถูกต้อง หรือฉันอาจจะทำบางสิ่งในมือที่ทุบตีมานานและฉันก็บอกกับตัวเองว่าทำไมฉันไม่เข้าใจวิธีที่ดีกว่านี้ สิ่งนี้คือเมื่อฉันออกไปและทำชั่วโมงนี้สามารถบินผ่าน บางครั้งฉันก็ยังพยายามหาสิ่งที่ต้องการ ฉันจะรู้ว่าฉันสนิทจริงๆดังนั้นฉันจะไม่ยอมแพ้ ฉันมักจะได้รับมันในที่สุด แต่หลังจากชั่วโมงของการซ่อมแซมและ googling ฉันเกลียดความรู้สึกที่ยอมแพ้และต้องรับมือกับบางสิ่งที่ฉันรู้ว่าทำได้ดีกว่า เมื่อฉันทำฉันมีความรู้สึกอบอุ่นเมื่อรู้ว่าสภาพแวดล้อมของฉันนั้นราบรื่นและเป็นส่วนตัวมากกว่านี้เล็กน้อย แต่ฉันสงสัยว่าเวลาของฉันจะดีขึ้นหรือไม่ ฉันจะวาดเส้นที่ไหน? ดูเหมือนว่าด้วยเครื่องมือสไตล์ UNIX ทั้งหมดมีจำนวนไม่รู้จบที่จะเรียนรู้ คิดอยู่เสมอว่าเครื่องหมายของโปรแกรมเมอร์ดีกว่าคือคนที่ออกนอกเส้นทางเพื่อทำให้คอมพิวเตอร์งอตามความประสงค์ ฉันทำถูกไหม? ฉันคิดว่า bash shell, unix / linux และ vim จะอยู่กับคุณตลอดไปดังนั้นฉันจึงเห็นว่ามันเป็นการลงทุน แต่จากนั้นอีกครั้งฉันใช้เวลา 3 ชั่วโมงในการพยายามทำให้ปลั๊กอินโง่เขลา vimperator firefox ทำงานได้อย่างถูกต้อง ดังนั้นฉันจึงสงสัยว่าชุมชนนี้คิดอย่างไรกับเรื่องนี้

2
การทดสอบ - ฐานข้อมูลในหน่วยความจำเทียบกับการเยาะเย้ย
เมื่อเขียนการทดสอบทำไมบางคนต้องการใช้ฐานข้อมูลในหน่วยความจำมากกว่าเพียงการล้อเลียนข้อมูล ฉันเห็นว่าฐานข้อมูลในหน่วยความจำอาจมีประโยชน์สำหรับการทดสอบคลังเก็บของ แต่ถ้าใช้เฟรมเวิร์ก (เช่น Spring Data) การทดสอบที่เก็บจะเป็นการทดสอบเฟรมเวิร์กไม่ใช่ตรรกะแอปพลิเคชัน อย่างไรก็ตามการเยาะเย้ยดูเหมือนจะเร็วและเป็นไปตามรูปแบบเดียวกันกับที่ใช้โดยทั่วไปเมื่อเขียนการทดสอบหน่วยและ TDD แล้วฉันจะพลาดอะไรไป? ฐานข้อมูลในหน่วยความจำจะมีประโยชน์เมื่อใด / ทำไม?

2
จะออกแบบ API ปลายทางสำหรับโพสต์ออบเจ็กต์ลูกและเพื่อให้ได้ลูกทั้งหมดของผู้ปกครองทั้งหมดได้อย่างไร
ตัวอย่างเช่นฉันมีเอนทิตี: ลูกค้า, รายงาน ลูกค้าอาจมีหลายรายงานและฉันคิดว่าจุดสิ้นสุดสำหรับการจัดการรายงานเดียวควรซ้อนกันเช่นนี้ /clients/{client_id}/reports/{report_id} สำหรับรายงานทั้งหมดของลูกค้าหนึ่งรายคาดว่าจะเป็น enpoint: /clients/{client_id}/reports แต่ควรมองหาจุดสิ้นสุดเพื่อให้ได้รับรายงานทั้งหมดของลูกค้าทั้งหมดเพื่อให้ API มีความสอดคล้องและได้รับการออกแบบมาเป็นอย่างดี แนวทางของฉัน: (ฉันเห็นมันในบาง google api) ใช้ "-" แทนและแยกเป็น "ทั้งหมด": /clients/-/reports สิ่งนี้คงรูปแบบจุดปลายเหมือนกัน แต่ดูผิดปกติเล็กน้อยไม่พบ rfc ใด ๆ ที่แนะนำวิธีนี้ สร้างจุดปลายแยกเฉพาะสำหรับรายงานทั้งหมด: /reports แต่เพื่อรับรายงานลูกค้าก็ยัง: /clients/{client_id}/reports Refactor endpoints เพื่อทำให้ "client" ไม่ใช่ parent แต่เป็นเพียงพารามิเตอร์ตัวกรอง: /reports?client={client_id} - รายงานลูกค้าหนึ่งราย /reports - รายงานของลูกค้าทั้งหมด ในกรณีของการเพิ่มจุดปลายใหม่สำหรับการโพสต์รายงานสำหรับลูกค้าที่เฉพาะเจาะจงมันอาจดูน่าเกลียดเพราะมันจะเป็นคำขอ POST กับพารามิเตอร์ใน URL มีคำแนะนำอื่น ๆ เกี่ยวกับความคิดหรือไม่?
12 rest  api  api-design 

1
อะไรคือแผนงานที่แนะนำให้นำไปใช้ในการควบคุมการเข้าถึงแบบง่าย (ABAC)
เมื่ออ่านเกี่ยวกับ ACL และ RBAC ฉันดูเหมือนจะเข้าใจง่าย - มีชื่อผู้ใช้หรือบทบาทที่ได้รับสิทธิ์เข้าถึงเนื้อหา ฉันยังสามารถดูว่าฉันสามารถใช้สิ่งเหล่านี้ได้อย่างไร เช่นภาพนี้ให้มุมมองที่ชัดเจนของ ACL และ RBAC สำหรับฉัน (ในขณะที่ฉันสามารถไปและออกแบบตารางฐานข้อมูลตามด้านบน): (รูปภาพมารยาทของpressbooks ) สิ่งที่ฉันกำลังดิ้นรนคือเอแบค ภาพต่าง ๆ ที่ฉันพบจนถึงตอนนี้มีลักษณะเป็นคลื่นหรือมีความซับซ้อนมากเกินไปหรือแนะนำให้ใช้บุคคลภายนอกซึ่งเป็นบุคคลที่สามที่ได้รับอนุญาต หรือให้ตัวอย่างคุณสมบัติแปลก ๆ ฉันไม่แน่ใจว่าจะใช้อย่างไร ตัวอย่างการเริ่มต้น ขอผมเริ่มด้วยบางสิ่งในชีวิตจริง สมมติว่าฉันมี บริษัท ที่มีพนักงาน 70-200 คน และสินทรัพย์ของฉันเพื่อป้องกันเป็นเว็บไซต์ที่มีหลายหน้า ฉันต้องการอนุญาตให้บางคนเข้าถึงเนื้อหาบางอย่าง ตัวอย่างเช่นฉันต้องการให้บุคคลLeslieสามารถเข้าถึงหน้าเว็บที่เรียกว่าPrice Managerและอนุญาตให้เธอจัดการราคาสำหรับTravelกลุ่มราคาในหน้านั้นเท่านั้น แต่ไม่สามารถจัดการราคาสำหรับProductกลุ่มในหน้าเดียวกันได้ ฉันจะใช้สิ่งนี้โดยใช้ ABAC ได้อย่างไร ฉันคิดว่าฉันสามารถกำหนดLeslieคุณลักษณะบางอย่างได้ (แต่มีคุณลักษณะใดบ้างและคุณสมบัติเหล่านี้มีอะไรบ้าง) จากนั้นให้ตารางฐานข้อมูลจัดเก็บข้อมูลเหล่านั้น ฉันสามารถออกแบบเอ็นจิ้นที่ดูที่คุณลักษณะเหล่านั้น (แต่ไม่ได้มองLeslieว่าเป็น "บทบาท" ที่ทำใน RBAC) และตัดสินใจจากที่นั่นว่าจะให้สิทธิ์การเข้าถึงเพจหรือไม่ เครื่องยนต์นั้นมีลักษณะอย่างไร มันง่ายหากบล็อก / …

8
เป็นไปได้หรือไม่ที่จะเก็บรหัสการบันทึกไว้อย่างสมบูรณ์นอกตรรกะทางธุรกิจ
ด้วยความช่วยเหลือของ AOP ฉันสามารถลบรหัสบันทึกจากตรรกะทางธุรกิจของฉัน แต่ฉันคิดว่ามันสามารถใช้เพื่อบันทึกสิ่งที่เรียบง่ายเท่านั้น (เช่นการเข้า / ออกวิธีการและค่าพารามิเตอร์) อย่างไรก็ตามถ้าฉันต้องลงชื่อเข้าใช้บางอย่างในตรรกะทางธุรกิจของฉัน เช่น public void SomeDomainMethod(string id) { //Get user by Id User user = Users.Get(id); if (user == null) { Log.Warn("user is not existed"); //<----------------- Log A throw new InvalidOperationException("user is not existed"); } //Step 1 while(true) { //do something } Log.Info("Step 1 …

4
กระบวนทัศน์ที่ไม่ใช่ OOP สนับสนุนแนวคิดเช่นการห่อหุ้มหรือไม่?
หนึ่งในแนวคิดที่สำคัญในการเขียนโปรแกรมเชิงวัตถุคือ Encapsulation อย่างไรก็ตามเมื่อไม่นานมานี้โลกของซอฟต์แวร์ดูเหมือนจะเอียงไปทางกระบวนทัศน์อื่น ๆ เช่นการเขียนโปรแกรมการทำงาน มันทำให้ฉันคิดว่าสิ่งที่เกี่ยวกับการห่อหุ้มและหลักการ OOP อื่น ๆ ? พวกเขาผิดหรือเปล่า? มีการใช้ OOP ผิดหรือไม่ ตัวอย่างเช่น Alan Kay ถูกกล่าวถึงในการกล่าวคำปราศรัย OOPSLA'97: "ฉันคิดค้นคำว่า object-oriented และฉันสามารถบอกคุณได้ว่าฉันไม่มี C ++ ในใจ" Joe Armstrong - "วัตถุผูกฟังก์ชั่นและโครงสร้างข้อมูลร่วมกันในหน่วยแบ่งแยกฉันคิดว่านี่เป็นข้อผิดพลาดพื้นฐานเนื่องจากฟังก์ชั่นและโครงสร้างข้อมูลอยู่ในโลกที่แตกต่างกันโดยสิ้นเชิง"

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