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

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

4
วิธีใดดีกว่าในการเรียกใช้เมธอดที่ใช้ได้กับคลาสหนึ่งเท่านั้นที่ใช้อินเทอร์เฟซ แต่ไม่ใช่อีกคลาสหนึ่ง?
โดยทั่วไปฉันต้องดำเนินการกระทำที่แตกต่างกันตามเงื่อนไขที่แน่นอน รหัสที่มีอยู่ถูกเขียนด้วยวิธีนี้ อินเตอร์เฟสพื้นฐาน // DoSomething.java interface DoSomething { void letDoIt(String info); } การใช้งานของพนักงานระดับแรก class DoItThisWay implements DoSomething { ... } การใช้งานของคลาสคนงานที่สอง class DoItThatWay implements DoSomething { ... } ชั้นหลัก class Main { public doingIt(String info) { DoSomething worker; if (info == 'this') { worker = new DoItThisWay(); } else { …

7
ในภาษาที่มุ่งเน้นวัตถุวัตถุควรทำการดำเนินการกับตัวเองเมื่อใดและควรจะดำเนินการกับวัตถุเมื่อใด
สมมติว่ามีPageคลาสซึ่งแสดงชุดคำสั่งสำหรับตัวแสดงผลหน้า และสมมติว่ามีRendererคลาสที่รู้วิธีแสดงหน้าบนหน้าจอ เป็นไปได้ที่จะจัดโครงสร้างโค้ดด้วยวิธีที่ต่างกันสองวิธี: /* * 1) Page Uses Renderer internally, * or receives it explicitly */ $page->renderMe(); $page->renderMe($renderer); /* * 2) Page is passed to Renderer */ $renderer->renderPage($page); ข้อดีและข้อเสียของแต่ละวิธีคืออะไร เมื่อใดจะดีกว่า คนอื่นจะดีกว่าเมื่อไหร่? พื้นหลัง เมื่อต้องการเพิ่มพื้นหลังเพิ่มเติมเล็กน้อย - ฉันค้นหาตัวเองโดยใช้วิธีการทั้งสองในรหัสเดียวกัน ฉันกำลังใช้ห้องสมุดของบุคคลที่ 3 รูปแบบไฟล์ PDF TCPDFที่เรียกว่า บางแห่งในรหัสของฉันฉันต้องมีสิ่งต่อไปนี้เพื่อให้การแสดงผล PDF ทำงานได้ $pdf = new TCPDF(); $html = "some …

5
Git กระทำไม่เสร็จ แต่ไม่สามารถดำเนินการต่อในเครื่องนั้นได้
บางครั้งฉันพบปัญหาในการมีรหัสที่ไม่มีข้อผูกมัดบนเวิร์กสเตชันที่ไม่พร้อมสำหรับการส่งมอบ แต่ต้องดำเนินการให้เสร็จสิ้นบนเวิร์กสเตชันหรือแล็ปท็อปอื่น ใครบ้างมีวิธีแก้ปัญหานี้เช่น "soft commit" หรือวิธีอื่นในการถ่ายโอนการเปลี่ยนแปลงไปยังเครื่องอื่นเพื่อทำงานกับมันในที่อื่น? ฉันไม่ต้องการถูกบังคับให้ยอมรับและผลักดันการเปลี่ยนแปลงที่ไม่ได้ดำเนินการอย่างเหมาะสม
11 git 

3
ทำไมเราไม่นำเข้าแพ็คเกจในขณะที่ใช้ฟังก์ชั่น String?
ฉันถามตัวเองว่าทำไมเราไม่นำเข้าแพ็คเกจในขณะที่เราใช้ฟังก์ชั่น String เช่นtoUpperCase()? พวกเขาเข้ามาได้อย่างไรโดยไม่ต้องนำเข้าแพ็คเกจ?
11 java  packages 

7
วิธีที่ดีที่สุดสำหรับผู้จัดการด้านเทคนิคเพื่อติดตามเทคโนโลยีล่าสุด
ผู้จัดการของฉันขอรายการบล็อกทางเทคนิคที่ควรติดตามเพื่อให้ทันสมัยกับเทคโนโลยี ปัญหาของเขาคือเขายังคงได้ยินเงื่อนไขที่เขาไม่เคยได้ยิน (เช่น NoSql, sharding, agure, sevice bus, ฯลฯ ) และเขาต้องการอย่างน้อยมีโอกาสต่อสู้กับการรู้อะไรเกี่ยวกับพวกเขาโดยไม่ต้องมีปฏิกิริยาและ มองพวกเขา นอกจากนี้ฉันคิดว่าเขาต้องการมีภาพรวมของเทคโนโลยีที่เกิดขึ้นใหม่ทั้งหมดและที่พวกเขาเข้ากันได้ดีแทนที่จะเรียนรู้เกี่ยวกับแต่ละสิ่งแยก เขาถามถึงบล็อก แต่ฉันคิดว่านิตยสารสิ่งพิมพ์อาจช่วยได้เช่นกัน ฉันควรตอบเขาอย่างไร
11 management 

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

3
ฉันจะป้องกันผู้ใช้จากการแก้ไขรหัสของฉันในเบราว์เซอร์ของพวกเขาได้อย่างไร
ลักษณะ ฉันออกแบบแอปพลิเคชั่น Node.JS (เหมือนเว็บไซต์เต็มรูปแบบ) แอพจะส่งไฟล์ JavaScript ห้าไฟล์และจะมี<script>แท็กเชื่อมโยงเข้าด้วยกัน คำถาม ฉันจะป้องกันผู้ใช้และผู้โจมตีโจมตีและแก้ไขโค้ดได้อย่างไร ตัวอย่างจะเป็น: Ctrl+ Shift+I ในDevtoolsให้ไปที่Sourcesเลือกไฟล์ที่จะแก้ไข (เช่นindex.html) และเขียนการแก้ไข การกดCtrl+ Sจะทำให้การแก้ไขสดเกิดขึ้น ฉันต้องการป้องกันตัวอย่างข้างต้นไม่ให้เกิดขึ้น ... เป็นไปได้หรือไม่ นี่คือสิ่งที่ฉันคิดว่า: ฉันจะสร้างไฟล์ JavaScript ฝั่งไคลเอนต์อีกไฟล์ Prevent_keys.js มันจะฟังCtrl+ +ShiftI ถ้ามันกลับมาtrue(เช่นกดปุ่ม) มันจะlogคีย์ อย่างไรก็ตามนั่นจะไม่หยุดผู้ใช้จากการใช้ Devtools โดยตรง

5
คุณจะดีบักรูปแบบไบนารีอย่างไร
ฉันต้องการที่จะสามารถแก้ปัญหาการสร้างตัวสร้างไบนารี ตอนนี้ฉันกำลังพิมพ์ข้อมูลอินพุตไปยังตัวแยกวิเคราะห์ไบนารี่จากนั้นก็ลึกเข้าไปในโค้ดและพิมพ์การแม็พของอินพุตไปยังเอาต์พุตจากนั้นใช้การแม็พเอาต์พุต (จำนวนเต็ม) และใช้เพื่อค้นหาจำนวนเต็มที่สอดคล้องกัน ในไบนารี ค่อนข้างงอแงและต้องการให้ฉันแก้ไขซอร์สโค้ดอย่างลึกซึ้งเพื่อให้ได้การแม็พระหว่างอินพุตและเอาต์พุต ดูเหมือนว่าคุณสามารถดูไบนารีในรูปแบบที่แตกต่างกัน (ในกรณีของฉันฉันต้องการดูมันในหน่วยจำนวน 8 บิตเป็นตัวเลขทศนิยมเพราะมันค่อนข้างใกล้กับอินพุต) ที่จริงแล้วตัวเลขบางตัวเป็น 16 บิตบาง 8 หรือ 32 เป็นต้นดังนั้นอาจมีวิธีดูไบนารีด้วยตัวเลขที่แตกต่างกันเหล่านี้ที่เน้นในหน่วยความจำในบางวิธี วิธีเดียวที่ฉันจะเห็นว่าเป็นไปได้คือถ้าคุณสร้าง visualizer เฉพาะกับรูปแบบ / เค้าโครงไบนารีจริง ดังนั้นจึงรู้ได้ว่าลำดับ 32 บิตควรอยู่ที่ใดและควรใช้เลข 8 บิตที่ไหนเป็นต้นนี่เป็นงานที่ต้องทำมากมายและมีเล่ห์เหลี่ยมในบางสถานการณ์ ดังนั้นสงสัยว่ามีวิธีทั่วไปที่จะทำ ฉันยังสงสัยด้วยว่าวิธีทั่วไปในการแก้ไขข้อบกพร่องของประเภทนี้ในปัจจุบันคืออะไรดังนั้นบางทีฉันอาจได้รับแนวคิดบางอย่างเกี่ยวกับสิ่งที่ต้องลองจากสิ่งนั้น
11 debugging  binary 

2
Entity-Component System แย่มากสำหรับการแยกส่วน / ซ่อนข้อมูลหรือไม่
ชื่อนี้มีความหมายเกินความจริงและมันอาจเป็นความไม่ชำนาญของฉันกับรูปแบบ แต่นี่คือเหตุผลของฉัน: "ปกติ" หรือเนื้อหาที่ตรงไปตรงมาของการใช้งานเอนทิตีคือการใช้พวกเขาเป็นวัตถุและ subclassing พฤติกรรมที่พบบ่อย สิ่งนี้นำไปสู่ปัญหาแบบคลาสสิกของ "is EvilTreesubclass of Treeor Enemy?" หากเรายอมให้มีการสืบทอดหลายครั้งปัญหาเพชรจะเกิดขึ้น เราแทนสามารถดึงการทำงานรวมกันTreeและEnemyขึ้นไปลำดับชั้นซึ่งนำไปสู่การเรียนพระเจ้าหรือเราจงใจสามารถออกจากพฤติกรรมของเราTreeและEntityการเรียน (ทำให้พวกเขาเชื่อมต่อในกรณีที่รุนแรง) เพื่อให้EvilTreeสามารถดำเนินการที่ตัวเอง - ซึ่งจะนำไปสู่ SomewhatEvilTreeการทำสำเนารหัสถ้าเราเคยมี ระบบ Entity-Component พยายามที่จะแก้ปัญหานี้โดยการหารTreeและEnemyวัตถุเป็นส่วนประกอบที่แตกต่างกัน - พูดPosition, HealthและAI- และดำเนินการระบบเช่นAISystemที่มีการเปลี่ยนแปลงตำแหน่งของ Entitiy ตามการตัดสินใจของเอไอ จนถึงดีมาก แต่จะเกิดอะไรขึ้นหากEvilTreeสามารถหยิบพลังและจัดการความเสียหายได้? ก่อนอื่นเราต้องการ a CollisionSystemและ a DamageSystem(เราอาจมีสิ่งเหล่านี้อยู่แล้ว) CollisionSystemความต้องการในการสื่อสารกับDamageSystemทุกครั้งที่สองสิ่งชนCollisionSystemส่งข้อความถึงDamageSystemสุขภาพเพื่อที่จะสามารถลบ ความเสียหายยังได้รับอิทธิพลจากการเติมพลังดังนั้นเราต้องเก็บมันไว้ที่ไหนซักแห่ง เราสร้างใหม่PowerupComponentที่เราแนบกับหน่วยงาน? แต่แล้วDamageSystemจำเป็นต้องรู้เกี่ยวกับบางสิ่งบางอย่างมันค่อนข้างจะไม่รู้อะไรเลย - นอกจากนี้ยังมีบางสิ่งที่สร้างความเสียหายที่ไม่สามารถรับพลังได้ (เช่นกSpike) เราอนุญาตให้มีPowerupSystemการแก้ไข a StatComponentที่ใช้สำหรับการคำนวณความเสียหายที่คล้ายกับคำตอบนี้หรือไม่? แต่ตอนนี้ทั้งสองระบบเข้าถึงข้อมูลเดียวกัน เมื่อเกมของเรามีความซับซ้อนมากขึ้นมันจะกลายเป็นกราฟพึ่งพาไม่มีตัวตนที่องค์ประกอบร่วมกันระหว่างระบบต่างๆ ณ จุดนี้เราสามารถใช้ตัวแปรคงที่ทั่วโลกและกำจัดแผ่นเหล็กทั้งหมด มีวิธีที่มีประสิทธิภาพในการแก้ปัญหานี้หรือไม่? …

5
วิธีการใช้การฉีดพึ่งพาและหลีกเลี่ยงการมีเพศสัมพันธ์ชั่วคราว?
สมมติว่าฉันมีสิ่งServiceที่ได้รับการอ้างอิงผ่านตัวสร้าง แต่ยังต้องเริ่มต้นด้วยข้อมูลที่กำหนดเอง (บริบท) ก่อนจึงจะสามารถใช้: public interface IService { void Initialize(Context context); void DoSomething(); void DoOtherThing(); } public class Service : IService { private readonly object dependency1; private readonly object dependency2; private readonly object dependency3; public Service( object dependency1, object dependency2, object dependency3) { this.dependency1 = dependency1 ?? throw new ArgumentNullException(nameof(dependency1)); …

6
การสร้างเอกสารการออกแบบซอฟต์แวร์หลังจากการพัฒนานั้นเป็นธรรม
ปัจจุบันฉันกำลังศึกษาเรื่อง "การพัฒนาซอฟต์แวร์" ซึ่งฉันต้องพัฒนาซอฟต์แวร์ที่ซับซ้อนเป็นรายบุคคลใน บริษัท ภายนอก ทั้งหมดนี้จะต้องทำในลักษณะที่มีโครงสร้างการสร้างเอกสารที่เกี่ยวข้องทั้งหมด สำหรับโครงการนี้ฉันเลือกทำงานกับเอกสารมาตรฐาน IEEE: เอกสารข้อกำหนดซอฟต์แวร์ (SRS), เอกสารสถาปัตยกรรมซอฟต์แวร์ (SAD) และเอกสารออกแบบซอฟต์แวร์ (SDD) แม้ว่าจะสอนเป็นอย่างอื่นในโรงเรียนสำหรับโครงการนี้ฉันเลือกที่จะสร้าง SDD หลังการพัฒนา (แทนที่จะเป็นก่อนหน้านี้) เหตุผลของฉันคือ บริษัท ที่ฉันฝึกงานได้ให้คำแนะนำฉันในการสร้างซอฟต์แวร์ที่ซับซ้อนขึ้นซึ่งเป็นไปตามข้อกำหนดที่กำหนดในแบบทดลอง เนื่องจากจำนวนเสรีภาพที่พวกเขาให้แก่ฉันในคำจำกัดความของโครงการแทบไม่มีอะไรแน่นอนและสามารถพบได้ดีที่สุดในขณะที่ทดลองในกระบวนการพัฒนา นอกจากนี้ฉันกำลังสร้างซอฟต์แวร์ในลักษณะส่วนบุคคลมันจะไม่มีประโยชน์กับคนอื่น ๆ ใน บริษัท สำหรับฉันที่จะทำให้การออกแบบซอฟต์แวร์นี้มาก่อน ทำมันก่อนก็จะเสียค่าใช้จ่ายเป็นจำนวนมากเวลาที่จะเปลี่ยนมันในภายหลังที่ผมสามารถแน่ใจได้ว่ามีความไม่แน่นอนในโครงการการออกแบบที่ฉันทำก่อนจะต้องมีการเปลี่ยนแปลงไปมาก สิ่งนี้รู้สึกต่อต้านฉัน นี่เป็นเหตุผลที่ดีในการสร้าง SDD หลังจากการพัฒนาหรือไม่? ถ้าไม่จะมีเหตุผลที่ดีสำหรับสิ่งนั้นหรือไม่? แก้ไข: เหตุผลในการสร้าง SDD หลังจากนั้นจะทำให้นักพัฒนาในอนาคตสามารถดำเนินโครงการต่อไปได้ ฉันจะไม่สามารถทำโครงการทั้งหมดให้เสร็จในช่วงเวลาที่สำเร็จการศึกษาดังนั้นนักพัฒนาซอฟต์แวร์รายอื่นจะต้องดำเนินการตามรหัสฐานปัจจุบันต่อไป

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

2
อินเทอร์เฟซ IComparable ล้าสมัย /“ เป็นอันตราย” หรือไม่
IComparable ใช้งานได้ทางเดียวเท่านั้น สมมติว่าคุณมีEmployeeชั้นเรียน ในมุมมองหนึ่งคุณต้องการแสดงทั้งหมดEmployeesเรียงตามชื่อ - ในอีกมุมมองตามที่อยู่ คุณจะประสบความสำเร็จได้อย่างไร ไม่อยู่กับIComparableอย่างน้อยก็ไม่มีทางที่เป็นไปได้ IComparable มีเหตุผลในสถานที่ที่ไม่ถูกต้อง .Sort()อินเตอร์เฟซที่ถูกนำมาใช้โดยการเรียก ในมุมมองที่แสดงCustomerเรียงตามชื่อไม่มีรหัสเลยที่จะบอกว่ามันจะถูกเรียงลำดับอย่างไร ในทางกลับกันCustomerคลาสจะสมมติว่ามันจะถูกใช้อย่างไรในกรณีนี้มันจะถูกใช้ในรายการเรียงตามชื่อ IComparable มีการใช้งานโดยปริยาย ในการเปรียบเทียบกับทางเลือกมันเป็นเรื่องยากมากที่จะเห็นว่ามีการใช้ตรรกะการเปรียบเทียบหรือไม่ สมมติว่า IDE มาตรฐานของคุณและเริ่มจากCustomerชั้นเรียนฉันจะต้อง ค้นหาการอ้างอิงทั้งหมดถึง Customer ค้นหาการอ้างอิงเหล่านั้นที่ใช้ในรายการ ตรวจสอบว่ารายการเหล่านั้นเคย.Sort()เรียกพวกเขา มีอะไรที่แย่กว่านั้นถ้าคุณลบการIComparableใช้งานที่ยังคงใช้อยู่คุณจะไม่ได้รับข้อผิดพลาดหรือคำเตือน สิ่งเดียวที่คุณจะได้รับคือพฤติกรรมที่ไม่ถูกต้องในทุกสถานที่ที่คลุมเครือเกินกว่าที่คุณจะนึกถึง ปัญหาเหล่านี้รวมกันรวมถึงข้อกำหนดที่เปลี่ยนแปลง เหตุผลที่ฉันมาคิดเรื่องนี้ก็เพราะมันผิดสำหรับฉัน ฉันมีความสุขที่ใช้IComparableในใบสมัครของฉันเป็นเวลา 2 ปีแล้ว ตอนนี้ความต้องการเปลี่ยนแปลงและสิ่งที่ต้องเรียงลำดับใน 2 วิธีที่แตกต่างกัน สังเกตว่าไม่มีความสนุกที่ทำตามขั้นตอนที่อธิบายไว้ในส่วนก่อนหน้า คำถาม ปัญหาเหล่านี้ทำให้ฉันคิดว่าIComparableเป็นด้อยกว่าIComparerหรือ.OrderBy()จนถึงจุดที่ไม่เห็นกรณีการใช้งานที่ถูกต้องที่จะไม่ได้รับการบริการที่ดีขึ้นโดยทางเลือกที่ จะดีกว่าเสมอที่จะใช้IComparerหรือ LINQ หรือมีข้อดี / กรณีการใช้งานที่ฉันไม่เห็นที่นี่?
11 c#  sorting  comparison 

2
ฉันคือ j = 1 ทำให้เข้าใจผิดจริงเหรอ? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา มีข้อโต้แย้งทั่วไปเกี่ยวกับการกำหนดค่าเริ่มต้นหลายตัวแปรในหนึ่งซับคือ: ลองพิจารณาตัวอย่าง int i, j = 1; ซึ่งอาจทำให้บางคนเชื่อว่าตัวแปรทั้งสองกำลังเริ่มต้นผิดพลาด เราอาจโต้แย้งว่าบางคนควรรู้ไวยากรณ์ของภาษาของเขามากพอที่จะไม่เข้าใจผิดเกี่ยวกับเรื่องนั้น อาจเป็นอีกเรื่องที่นักพัฒนาเราเรียนรู้ภาษามากมายที่เราสามารถทำผิดพลาดระหว่างความเฉพาะเจาะจงระหว่างภาษา อย่างไรก็ตามสำหรับกรณีที่เฉพาะเจาะจงฉันสงสัยว่าต่อไปนี้จะมีภาษาที่ไวยากรณ์มากi, j = 1เริ่มต้นตัวแปรทั้งสองหรือไม่ หากไม่ใช่ข้อโต้แย้งนั้นก็จะไม่มีผล

2
การทดสอบหน่วยเพื่อทดสอบการสร้างวัตถุโดเมน
ฉันมีการทดสอบหน่วยซึ่งมีลักษณะดังนี้: [Test] public void Should_create_person() { Assert.DoesNotThrow(() => new Person(Guid.NewGuid(), new DateTime(1972, 01, 01)); } ฉันยืนยันว่ามีการสร้างวัตถุบุคคลที่นี่เช่นการตรวจสอบความถูกต้องจะไม่ล้มเหลว ตัวอย่างเช่นหาก Guid เป็นโมฆะหรือวันเดือนปีเกิดเร็วกว่า 01/01/1900 การตรวจสอบจะล้มเหลวและข้อยกเว้นจะถูกโยนทิ้ง (หมายถึงการทดสอบล้มเหลว) ตัวสร้างมีลักษณะดังนี้: public Person(Id id, DateTime dateOfBirth) : base(id) { if (dateOfBirth == null) throw new ArgumentNullException("Date of Birth"); elseif (dateOfBith < new DateTime(1900,01,01) throw new ArgumentException("Date of Birth"); …

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