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

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

4
เกิดอะไรขึ้นกับ PHP 6 [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันตื่นเต้นกับการเปลี่ยนแปลงใน PHP 6 ที่แสดงตัวอย่างใน PHP 5.3+ อย่างไรก็ตามฉันสงสัยว่าทำไมต้องใช้เวลานานในการปล่อย PHP 6 หนังสือเกี่ยวกับหนังสือเล่มนี้ได้รับการตีพิมพ์ตั้งแต่ปี 2551 และมีการประกาศให้ทราบตั้งแต่ปี 2550 แต่ฉันยังไม่เคยได้ยินเกี่ยวกับอัลฟ่าหรือเบต้า เหตุใดจึงใช้เวลานานกว่าจะปล่อยออกมา หรือว่ามันจะไปกับทุกภาษาเมื่อพวกเขาเปลี่ยนไปสู่รุ่นใหญ่ที่ฉันคิดว่ามันต้องใช้เวลาประมาณ 4-5 ปีกว่าจะปล่อย?

6
ฉันควรปฏิบัติตามมาตรฐาน HTML และ CSS ทุกครั้งหรือไม่
ไม่กี่ปีที่ผ่านมาฉันคิดว่าตัวเองเป็นนักพัฒนาเว็บรู้จักภาษา 3 ภาษาพื้นฐาน (HTML, CSS, JS) และ PHP มากมาย การย้ายจากข้อความธรรมดาไปยังเว็บไซต์จริงเป็นความเจ็บปวดเพราะสิ่งที่เรียกว่า "มาตรฐาน" ที่นั่นซึ่งในเวลานั้นซับซ้อนสำหรับฉันอย่างมาก มันต้มลงไปถึงสิ่งนี้มาก (ลบสิ่งที่เกี่ยวข้องกับ IE): มาตรฐานอยู่ที่นั่นเพื่อแทนที่วิธีเก่า ๆ ของการทำสิ่งต่าง ๆ ในวิธีที่ง่ายกว่า อย่างไรก็ตามเมื่อพยายามที่จะนำบางสิ่งมาใช้ (ตัวอย่างเช่นโครงร่าง CSS ทั้งหมด) ใช้เวลานานกว่าที่ฉันจะทำได้จริงถึง 10 เท่าถ้าฉันทำโซลูชันที่ง่ายขึ้นและยังใช้งานได้อยู่ หากมันแสดงผลเหมือนกันเหตุใดฉันจึงควรใช้ตัวอย่างที่มีความซับซ้อนมากขึ้นซึ่งใช้เวลานานขึ้น 10 เท่าและหยุดพักเมื่อคุณเปลี่ยนเบราว์เซอร์ สิ่งนี้ทำให้เกิดการถกเถียงทางศาสนาที่ยาวนานใน ## php, ## css และ ## js ใน Freenode IRC และทำให้ฉันถูกแบนจาก ## css เพราะฉันยุ่งกับโลกเล็ก ๆ ของพวกเขาที่นั่น คำถามของฉัน: ฉันควรปฏิบัติตามมาตรฐานการประชุมและการเข้ารหัสทุกครั้งแม้ว่าพวกเขาจะใช้เวลาฉันนานขึ้น 10 …

11
MUMPS ยังมีชีวิตอยู่หรือไม่? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ที่ทำงานแรกของฉันเราใช้ Digital Standard MUMPSใน PDP 11-clone (TPA 440) จากนั้นเราได้เปลี่ยนไปใช้ MUMPS มาตรฐานแบบไมโครวิชันที่ทำงานบนเครื่อง Hewlett-Packard, HP-UX 9 ประมาณต้นยุค 90 MUMPS ยังมีชีวิตอยู่หรือไม่? มีใครใช้หรือไม่ ถ้าใช่โปรดเขียนบางคำเกี่ยวกับมัน: คุณใช้มันในโหมดตัวอักษรมันทำหน้าที่เป็นเว็บเซิร์ฟเวอร์หรือไม่? เป็นต้น (ฉันหมายถึงCachéด้วย) หากคุณเคยใช้มันคุณมีความรู้สึกอย่างไรกับเรื่องนี้ คุณชอบหรือไม่

4
การเรียกเก็บเงินรายชั่วโมงหรือต่อโครงการ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา คุณจะเรียกเก็บเงินโครงการเขียนโปรแกรมของคุณได้อย่างไร คุณทำต่อชั่วโมงหรือไม่ ต่องานหรือไม่ โปรดระบุประเภทของโครงการที่คุณทำในคำตอบ (มือถือเว็บเดสก์ท็อป ฯลฯ ... คุณสามารถเจาะจงมากขึ้นถ้าคุณต้องการ) โบนัส: หากคุณต้องการให้จำนวนเฉพาะในคำตอบของคุณคุณอาจ ;-)

4
การเขียนโปรแกรม Windows - คุณควรเปิด UAC ไว้หรือไม่
การตั้งค่าการควบคุมบัญชีผู้ใช้ที่แนะนำ (UAC) คืออะไรเมื่อพัฒนาบน Windows แม้ใน Win7 ฉันพบว่ามันน่ารำคาญพอที่จะปิด (เพราะทำให้ฉันมีประสิทธิภาพมากขึ้นด้วย) แต่บางครั้งฉันก็รู้สึกไม่ดีเพราะฉันรู้ว่าฉันจะพบปัญหามากขึ้นในรหัสของฉันถ้าฉันปล่อยไว้
11 windows 

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

14
ฉันควรกังวลเกี่ยวกับ 'การละเมิดลิขสิทธิ์ Javascript' หรือไม่
ถ้าฉันเขียนแอพ Javascript ฝั่งไคลเอ็นต์ (มีการโต้ตอบกับเซิร์ฟเวอร์เล็กน้อย) ฉันจะป้องกันไม่ให้ผู้อื่นคัดลอกไฟล์ Javascript ไปยังไซต์ของตัวเองได้อย่างไร ฉันควรที่ทั้งหมดหรือไม่

4
ให้คะแนน จำกัด * un * - การร้องขอที่ตรวจสอบสิทธิ์
สมมติว่าเรามี load balancer ที่ จำกัด อัตรา การ จำกัด อัตราดูเหมือนตรงไปตรงมามากสำหรับผู้ใช้ที่เข้าสู่ระบบ - เพียงแค่ดูที่ JWT และอาจใช้ร้านค้าในหน่วยความจำเพื่อดูจำนวนคำขอใน 10 วินาทีสุดท้ายสำหรับผู้ใช้นั้น อย่างไรก็ตามสิ่งที่เกี่ยวกับผู้ใช้ที่ไม่ได้เข้าสู่ระบบ (ไม่ได้ตรวจสอบ) เราไม่ทราบแน่ชัดว่าพวกเขาหรือใครมาจากที่ใดดังนั้นจึงไม่สามารถ จำกัด อัตราคำขอเหล่านั้นหรือ .. มีโซลูชั่นในตัวสำหรับ AWS และแพลตฟอร์มโฮสติ้งอื่น ๆ นี้เป็นสิ่งที่เราต้องกังวลหรือไม่? ดูเหมือนว่าเราจำเป็นต้องจัดการกับตรรกะการ จำกัด อัตราของผู้ใช้ที่บันทึกด้วยตนเอง แต่ผู้ใช้ที่ไม่ได้เข้าสู่ระบบนั้นเป็นอย่างไร ฉันเดา / หวังว่าอาจมีกลไกในตัวสำหรับการ จำกัด อัตราคำขอที่ไม่ได้รับอนุญาตบนแพลตฟอร์มโฮสติ้งโปรดแจ้งให้เราทราบ

5
วิธีการใช้มรดก RealNumber และ ComplexNumber
หวังว่าจะไม่เป็นนักวิชาการ ... สมมติว่าฉันต้องการจำนวนจริงและซับซ้อนในห้องสมุด SW ของฉัน ขึ้นอยู่กับความสัมพันธ์แบบis-a (หรือที่นี่ ) จำนวนจริงเป็นจำนวนเชิงซ้อนโดย b ในส่วนจินตภาพของจำนวนเชิงซ้อนเป็นเพียง 0 ในทางตรงกันข้ามการดำเนินการของฉันจะเป็นเด็กที่ขยายผู้ปกครองดังนั้นในผู้ปกครอง RealNumber ฉันมีส่วนจริงและเด็ก ComplexNumber จะเพิ่มงานศิลปะจินตภาพ นอกจากนี้ยังมีความเห็นว่าการรับมรดกเป็นความชั่วร้าย ฉันจำได้เหมือนเมื่อวานเมื่อฉันเรียนรู้ OOP ที่มหาวิทยาลัยอาจารย์ของฉันบอกว่านี่ไม่ใช่ตัวอย่างที่ดีของการสืบทอดเนื่องจากค่าสัมบูรณ์ของทั้งสองนั้นคำนวณต่างกัน (แต่สำหรับวิธีที่เรามีวิธีการมากไป . ประสบการณ์ของฉันคือเรามักจะใช้การสืบทอดเพื่อแก้ปัญหา DRY ดังนั้นเรามักจะมีคลาสนามธรรมที่เป็นนามธรรมในลำดับชั้น (เรามักจะมีปัญหาในการค้นหาชื่อเพราะพวกเขาไม่ได้เป็นตัวแทนวัตถุจากโลกแห่งความเป็นจริง)

4
ฉันควรทำอย่างไรเมื่อการล็อคในแง่ดีไม่ทำงาน
ฉันมีสถานการณ์ต่อไปนี้: ผู้ใช้ทำให้GETคำขอไป/projects/1และได้รับการETag ผู้ใช้ทำการร้องขอPUT/projects/1กับ ETag จากขั้นตอน # 1 ผู้ใช้ทำการร้องขอ PUT อื่น/projects/1โดยใช้ ETag จากขั้นตอนที่ # 1 โดยปกติคำขอ PUT ที่สองจะได้รับการตอบสนอง 412 เนื่องจาก ETag ตอนนี้ค้าง - คำขอ PUT แรกแก้ไขทรัพยากรดังนั้น ETag จึงไม่ตรงกันอีกต่อไป แต่จะเกิดอะไรขึ้นถ้าคำขอ PUT ทั้งสองนั้นถูกส่งในเวลาเดียวกัน คำขอ PUT แรกไม่มีเวลาในการประมวลผลและอัปเดตทรัพยากรก่อน PUT # 2 มาถึงซึ่งทำให้ PUT # 2 เขียนทับ PUT # 1 จุดรวมของการล็อคในแง่ดีคือการที่จะไม่เกิดขึ้น ...

2
ข้อยกเว้นใน DDD
ฉันกำลังเรียน DDD และฉันกำลังคิดจะทิ้งข้อยกเว้นในบางสถานการณ์ ฉันเข้าใจว่าวัตถุไม่สามารถเข้าสู่สถานะที่ไม่ดีดังนั้นที่นี่ยกเว้นได้ดี แต่ในหลาย ๆ ตัวอย่างมีข้อยกเว้นการขว้างปาเช่นถ้าเราพยายามเพิ่มผู้ใช้ใหม่ที่มีอีเมลที่มีอยู่ในฐานข้อมูล public function doIt(UserData $userData) { $user = $this->userRepository->byEmail($userData->email()); if ($user) { throw new UserAlreadyExistsException(); } $this->userRepository->add( new User( $userData->email(), $userData->password() ) ); } ดังนั้นหากผู้ใช้ที่มีอีเมลนี้มีอยู่เราสามารถยกเว้นบริการแอพพลิเคชั่นได้ แต่เราไม่ควรควบคุมการทำงานของแอปพลิเคชันโดยใช้บล็อกการลองจับ วิธีที่ดีที่สุดสำหรับสิ่งนี้คืออะไร?

4
ฉันจะปิดบริการได้อย่างไรจึงง่ายขึ้น
เรามีการพึ่งพาบริการของบุคคลที่สามซึ่งแสดงถึงอินเทอร์เฟซขนาดมหึมาซึ่งเราต้องการเพียง 3 วิธีเท่านั้น นอกจากนี้อินเทอร์เฟซเปลี่ยนบ่อย ... ฉันตัดสินใจที่จะรวมส่วนต่อประสานในชั้นเรียนในโครงการของเราและเปิดเผยวิธีการที่เราต้องการเท่านั้น แต่ผมไม่แน่ใจว่าผมควรจะจัดการกับค่าส่งกลับ ... Storageอินเตอร์เฟซที่ส่งกลับวัตถุของการพิมพ์ เราภายในมีชนิดซึ่งเป็นตัวแทนของเราภายในของStorageModelStorage สิ่งที่คุณจะกลับมาใน mapper นี้StorageหรือStorageModel? เรามี DataService StorageServiceซึ่งได้รับการพึ่งพาของ wrapper injected ขณะนี้ฉันกำลังทำมันโดยทั่วไปดังนี้: public class StorageService { private readonly IExternalStorageWrapper externalStorageWrapper; public StorageService(IExternalStorageWrapper externalStorageWrapper) { this.externalStorageWrapper = externalStorageWrapper; } public StorageModel GetStorage(int storageId) { return this.externalStorageWrapper.GetStorage(storageId).ConvertToStorageModel(); } } public class ExternalStorageWrapper : IExternalStorageWrapper { …

6
DDD บริการฉีดในวิธีการนิติบุคคลที่เรียก
คำถามแบบสั้น มันอยู่ในแนวปฏิบัติที่ดีที่สุดของ DDD และ OOP ในการฉีดบริการกับการเรียกเมธอดเอนทิตีหรือไม่? ตัวอย่างรูปแบบยาว สมมติว่าเรามีกรณี Order-LineItems แบบคลาสสิกใน DDD ที่เรามี Domain Entity ชื่อ Order ซึ่งยังทำหน้าที่เป็น Aggregate Root และ Entity นั้นไม่เพียง แต่ประกอบไปด้วย Value Objects แต่ยังเป็นคอลเลกชันของรายการโฆษณา หน่วยงาน สมมติว่าเราต้องการไวยากรณ์ที่คล่องแคล่วในแอปพลิเคชันของเราเพื่อให้เราสามารถทำสิ่งนี้ (สังเกตไวยากรณ์ในบรรทัดที่ 2 ซึ่งเราเรียกgetLineItemsเมธอด) $order = $orderService->getOrderByID($orderID); foreach($order->getLineItems($orderService) as $lineItem) { ... } เราไม่ต้องการฉีด LineItemRepository ใด ๆ ลงใน OrderEntity เนื่องจากเป็นการละเมิดหลักการหลายอย่างที่ฉันสามารถนึกได้ แต่ความคล่องแคล่วของวากยสัมพันธ์เป็นสิ่งที่เราต้องการจริงๆเพราะมันง่ายต่อการอ่านและบำรุงรักษารวมถึงการทดสอบ พิจารณาโค้ดต่อไปนี้โดยสังเกตวิธีgetLineItemsในOrderEntity: interface …

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

3
ใน Python 3.4+ ทำไมฉันควรใช้ namedtuple บน SimpleNamespace เมื่อไม่ได้ใช้ dict ดูเหมือนว่าจะคล้ายกันมาก
เมื่อถึงจุดหนึ่งคุณอาจพบกับฟังก์ชั่นที่มีข้อโต้แย้งมากมาย บางครั้งมันก็สมเหตุสมผลที่จะรวมการขัดแย้งบางอย่างเข้ากับการโต้แย้งสุดยอด ฉันทำสิ่งนี้บ่อยครั้งด้วย dicts แต่ตอนนี้ฉันกำลังมองหาวิธีที่ดีกว่าในการทำมัน ฉันอยากจะกลับ ... def do_something(ax, ay, az, bu, bv, c): # Do something ... เข้าสู่ ... def do_something(a, b, c): # Do something ... ที่ไหนaและbมีตัวแปรย่อย วิธีหนึ่งในการทำเช่นนี้คือ: A = namedtuple('A', 'x, y, z') a = A(ax, ay, az) B = namedtuple('B', 'u, v') b = B(bu, bv) …

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