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

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

2
เอนทิตีเพื่อการใช้งาน DTO
รับความพยายามในการสร้างเว็บแอพพลิเคชั่นระดับพื้นฐานและได้อ่านข้อมูลที่ขัดแย้งกันทางออนไลน์ สิ่งที่ฉันพยายามคิดก็คือหากมีข้อได้เปรียบในการใช้วัตถุ DTO จาก DAO to เลเยอร์บริการของคุณผ่านการใช้ mapper บางประเภท โฟลว์พื้นฐานที่ฉันคาดการณ์ไว้มีดังนี้: UI Model / Form -> Controller คอนโทรลเลอร์แปลง Model เป็น Domain Object (Entity) วัตถุโดเมน -> ชั้นบริการ วัตถุโดเมน -> DAO DAO -> วัตถุโดเมน บริการ -> UI UI แปลงโดเมนเป็นโมเดล UI ถ้า DTO ถูกติดตาม DAO จะส่งกลับ DTO ไม่ใช่เอนทิตี หลังจากอ่านบางอย่างดูเหมือนว่า DTO ได้หมดอายุลงเล็กน้อยเนื่องจาก (อย่างน้อยใน Java) เอนทิตีได้กลายเป็นหมายเหตุประกอบ …
15 java  entity  jpa 

2
ทำไมคำหลักที่น่าเกลียดใน C11
ฉันกำลังอ่านร่างของข้อกำหนด C11 คำหลักที่แนะนำใหม่: ทุกคนรู้สึกเหมือนส่วนขยายที่กำหนดเองแทนที่จะใช้คำหลักที่สงวนมาตรฐานชอบ_Bool, _Alignof, _Atomicstruct, union, int ฉันรู้ว่ามาตรฐานโดยทั่วไปประกอบด้วยส่วนขยายมาตรฐาน ... แต่ถึงกระนั้นนี่มันแย่มาก! บางทีเราอาจจะจบลงด้วยการ__Long_Long_Reallylong_Integer_MSVC_2020_tคืบคลานในมาตรฐาน! ความเข้ากันได้แบบย้อนกลับของรหัสที่ไม่เป็นมาตรฐานเป็นเพียงเหตุผลเดียวของรูปแบบใหม่ของคำหลักหรือไม่
15 c  keywords 

4
การส่งบูลีนกลับมาเมื่อประสบความสำเร็จหรือล้มเหลวเป็นเรื่องที่ต้องกังวล
ฉันมักจะพบว่าตัวเองคืนบูลีนจากวิธีการที่ใช้ในหลาย ๆ ตำแหน่งเพื่อให้มีตรรกะทั้งหมดรอบวิธีนั้นในที่เดียว วิธีการโทร (ภายใน) ทั้งหมดจำเป็นต้องทราบว่าการดำเนินการนั้นสำเร็จหรือไม่ ฉันใช้ Python แต่คำถามไม่ได้เจาะจงเฉพาะภาษานั้น มีเพียงสองตัวเลือกที่ฉันนึกได้ เพิ่มข้อยกเว้นถึงแม้ว่าสถานการณ์จะไม่ได้ยอดเยี่ยมและอย่าลืมจับข้อยกเว้นนั้นในทุกที่ที่มีการเรียกใช้ฟังก์ชัน คืนบูลีนขณะที่ฉันกำลังทำ นี่คือจริงๆตัวอย่างง่ายๆที่แสดงให้เห็นว่าสิ่งที่ผมพูดถึง import os class DoSomething(object): def remove_file(self, filename): try: os.remove(filename) except OSError: return False return True def process_file(self, filename): do_something() if remove_file(filename): do_something_else() แม้ว่ามันจะใช้งานได้ แต่ฉันไม่ชอบวิธีนี้ในการทำอะไรบางอย่างมัน "มีกลิ่น" และบางครั้งอาจทำให้เกิดการซ้อนกันหลายครั้ง แต่ฉันไม่สามารถคิดถึงวิธีที่ง่ายกว่านี้ได้ ฉันสามารถใช้ปรัชญา LBYL มากขึ้นและใช้os.path.exists(filename)ก่อนที่จะพยายามลบ แต่ก็ไม่รับประกันว่าไฟล์จะไม่ถูกล็อคในระหว่างนี้ (มันไม่น่าเป็นไปได้ แต่เป็นไปได้) และฉันยังต้องพิจารณาว่าการลบนั้นสำเร็จหรือไม่ นี่เป็นการออกแบบที่ "ยอมรับได้" และหากไม่ใช่สิ่งที่จะเป็นวิธีที่ดีกว่าในการออกแบบสิ่งนี้

2
ฉันควรใช้วิธีการจากโรงงานแทนที่จะเป็นตัวสร้าง ฉันสามารถเปลี่ยนสิ่งนั้นและยังเข้ากันได้แบบย้อนหลังได้หรือไม่
ปัญหา สมมติว่าฉันมีคลาสที่เรียกว่าDataSourceมีReadDataวิธี (และบางทีคนอื่น ๆ แต่ให้สิ่งที่ง่าย) เพื่ออ่านข้อมูลจาก.mdbไฟล์: var source = new DataSource("myFile.mdb"); var data = source.ReadData(); ไม่กี่ปีต่อมาฉันตัดสินใจว่าฉันต้องการให้สามารถรองรับ.xmlไฟล์เพิ่มเติมจาก.mdbไฟล์เป็นแหล่งข้อมูล การนำไปใช้สำหรับ "การอ่านข้อมูล" นั้นค่อนข้างแตกต่างกันสำหรับ.xmlและ.mdbไฟล์ ดังนั้นถ้าฉันจะออกแบบระบบตั้งแต่เริ่มต้นฉันจะนิยามมันดังนี้: abstract class DataSource { abstract Data ReadData(); static DataSource OpenDataSource(string fileName) { // return MdbDataSource or XmlDataSource, as appropriate } } class MdbDataSource : DataSource { override Data ReadData() { …

1
แนวทางปฏิบัติที่ดีที่สุดในการรักษาความปลอดภัยเว็บ API คืออะไร
ฉันต้องสร้าง API บริการเว็บสำหรับแอพมือถือของเราเพื่อโต้ตอบกับเซิร์ฟเวอร์และฐานข้อมูลของเรา (ใน ASP.Net MVC 4 แต่มันไม่ค่อยเกี่ยวข้องกัน) การกระทำส่วนใหญ่ไม่ต้องการให้ผู้ใช้ลงทะเบียนกับบริการของเราเราต้องการ จำกัด การเข้าถึงเฉพาะผู้ใช้แอปของเราเท่านั้น อะไรคือวิธีการตรวจสอบให้แน่ใจว่าการโทรออกจากที่อื่น (เช่นมีคนต้องการข้อมูลทั้งหมดของเราหรือสร้างแอปที่ไม่เป็นทางการ) ถูกปฏิเสธ? แนวคิดเบื้องต้นของฉันคือการให้อุปกรณ์ถามโทเค็นเซิร์ฟเวอร์ซึ่งสร้างแบบสุ่มและส่งตามที่เป็นอยู่ วิธีการอื่น ๆ ทั้งหมดจะตรวจสอบว่าส่วนหัวคำขอมีวิธีเฉพาะที่จะแฮช md5 ของโทเค็นที่ผ่านการเค็ม เซิร์ฟเวอร์รู้โทเค็นและเกลือและสามารถคำนวณแฮชและเปรียบเทียบกับที่ส่ง นอกจากนี้โทเค็นเป็นอายุการใช้งานที่ จำกัด และอุปกรณ์จะต้องได้รับอีกหนึ่งชั่วโมงทุก ๆ ที่ดูเหมือนจะค่อนข้างง่ายในการใช้งานและถึงแม้ว่าอาจจะไม่ใช่ข้อพิสูจน์ 100% แต่ก็เป็นความคิดที่ดี คุณคิดอย่างไร?

1
แนวทางที่ดีสำหรับการทำเว็บแอพพลิเคชัน PHP สำหรับบรรจุภัณฑ์ Debian
เว็บแอปพลิเคชั่น PHP หลายรุ่นใช้สำหรับติดตั้งและอัปเกรด: ยกเลิกการ tar ลูก tar แหล่งที่มา ชี้ Apache ที่แหล่งที่มา นำทางเว็บเบราว์เซอร์ไปที่หน้าแรก ดำเนินการผ่านหน้าเว็บหลายหน้าของการตั้งค่า (เช่นการตรวจสอบการมีอยู่ของห้องสมุดการขอข้อมูลการเชื่อมต่อฐานข้อมูลการสร้างหรืออัพเดทคีมาฐานข้อมูล ฯลฯ ) ผู้ใช้เปลี่ยนชื่อinstall/ไดเรกทอรีเป็นอย่างอื่นเพื่อให้แอปพลิเคชันรู้ว่าติดตั้งแล้ว ฉันไม่เห็นวิธี (ง่ายๆ) ในการสร้างแพ็คเกจ Debian จากสิ่งนี้โดยไม่ทำให้ผู้ใช้ติดตั้งแพคเกจทำตามขั้นตอนด้วยตนเองหลายขั้นตอนข้างต้น โปรดทราบว่าฉันไม่ใช่นักพัฒนาในแอปพลิเคชันดังนั้นฉันไม่ได้อยู่ในฐานะที่จะทำการเปลี่ยนแปลงโดยตรงกับวิธีการติดตั้งแอปพลิเคชัน วิธีการทั่วไปในการทำบรรจุภัณฑ์ของแอพพลิเคชั่นดังกล่าวคืออะไร?

5
แนวปฏิบัติที่ดีที่สุดสำหรับการตั้งชื่อรูปภาพที่อัปโหลดคืออะไร
สมมติว่าฉันมีแบบฟอร์มในเว็บแอปพลิเคชันซึ่งผู้ใช้สามารถอัปโหลดรูปโปรไฟล์ ฉันมีข้อกำหนดเล็กน้อยเกี่ยวกับขนาดไฟล์ขนาดและอื่น ๆ แต่เมื่อผู้ใช้อัปโหลดภาพฉันจะตั้งชื่อพวกเขาในระบบของฉันได้อย่างไร ฉันคิดว่ามันจะต้องมีความสอดคล้องและไม่ซ้ำกัน อาจเป็น GUID หรือไม่? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg การประทับเวลา? 129899740140465735.jpg แฮช เช่น md5 b1a9acaf295cf14ffbc5b6538294562c.jpg มีวิธีมาตรฐานหรือแนะนำให้ทำเช่นนี้?

4
ทำไมฐานข้อมูลเชิงสัมพันธ์ยอมรับเฉพาะแบบสอบถาม SQL?
เท่าที่ฉันรู้ฐานข้อมูลเชิงสัมพันธ์ส่วนใหญ่ไม่ได้เสนอ API ระดับไดรเวอร์สำหรับการสืบค้นยกเว้นqueryฟังก์ชั่นที่ใช้สตริง SQL เป็นอาร์กิวเมนต์ ฉันกำลังคิดว่ามันจะง่ายกว่านี้หากมีใครทำได้: var result = mysql.select('article', {id: 3}) สำหรับตารางที่เข้าร่วมมันจะซับซ้อนกว่าเล็กน้อย แต่ก็ยังเป็นไปได้ ตัวอย่างเช่น: var tables = mysql.join({tables: ['article', 'category'], on: 'categoryID'}); mysql.select(tables, {'article.id': 3}, ['article.title', 'article.body', 'category.categoryID']) รหัสที่สะอาดกว่าไม่มีการแยกสตริงค่าใช้จ่ายไม่มีปัญหาการฉีดใช้องค์ประกอบการสืบค้นได้ง่ายขึ้น ... ฉันเห็นข้อดีมากมาย มีเหตุผลที่เฉพาะเจาะจงหรือไม่ที่เลือกให้เฉพาะการเข้าถึงคิวรีผ่าน SQL เท่านั้น
15 database  sql 

4
ทำไม Cem Kaner พิจารณาการทดสอบที่ไม่เปิดเผยข้อผิดพลาดให้เสียเวลา?
สิ่งที่เกี่ยวกับการยืนยันการทำงานในการทดสอบเชิงบวกพิสูจน์ว่ามันทำงาน - ฉันควรจะพูดว่ามันเสียเวลา? แนวคิดแบบไหนที่อยู่เบื้องหลังคำพูดนี้? การทดสอบที่ไม่สำเร็จเช่นการทดสอบที่ไม่พบข้อผิดพลาดนั้นเป็นการเสียเวลา วิศวกรรมเว็บ: วินัยของการพัฒนาระบบการใช้งานเว็บ quoting เซมคเนอร์
15 testing  theory 

3
มีการเรียกฟังก์ชันซ้อนกันมากเกินไปจำนวนเท่าใด?
อ้างจากMSDN เกี่ยวกับ StackOverflowException : ข้อยกเว้นที่ถูกส่งออกมาเมื่อการดำเนินการสแต็คล้นเพราะมันมีการเรียกวิธีการซ้อนกันมากเกินไป Too manyที่นี่ค่อนข้างคลุมเครือ ฉันจะรู้ได้อย่างไรว่าเมื่อใดมากเกินไปมากเกินไปจริง ๆ ? การเรียกใช้ฟังก์ชันหลายพันครั้ง? ล้าน? ฉันคิดว่ามันต้องเกี่ยวข้องกับปริมาณของหน่วยความจำในคอมพิวเตอร์ แต่เป็นไปได้ไหมที่จะมีขนาดของลำดับความแม่นยำที่ถูกต้อง? ฉันกังวลเกี่ยวกับเรื่องนี้เพราะฉันกำลังพัฒนาโครงการที่เกี่ยวข้องกับการใช้โครงสร้างแบบเรียกซ้ำและการเรียกใช้ฟังก์ชันแบบเรียกซ้ำ ฉันไม่ต้องการให้แอปพลิเคชันล้มเหลวเมื่อฉันเริ่มใช้งานมากกว่าการทดสอบเล็กน้อย

3
โปรแกรมเมอร์ไม่มีใครจะสร้างเว็บไซต์กึ่งผู้ใหญ่ของฉัน ทำไม? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันได้รับการมองหาการทำเว็บไซต์นี้เป็นเวลานาน ฉันคิดว่ามีการจัดเรียงอย่างเป็นระเบียบของสิ่งที่ฉันต้องการเช่นเดียวกับการมีตัวอย่างที่ชัดเจนทำใน photoshop ของมารยาทหน้าเพื่อให้ความคิดของวิสัยทัศน์และไม่มีความประหลาดใจที่ซ่อนอยู่ฉันจะเป็นงานในฝันของโปรแกรมเมอร์ น่าเสียดายที่ไม่มี บริษัท ใดจะแตะเว็บไซต์ ไม่มีอะไรผิดกฎหมายเกี่ยวกับมันหรือแม้แต่จากระยะไกล มันเป็นรายการสำหรับผู้ใหญ่สำหรับ Dominatrices มืออาชีพ ฉันไม่เห็นว่าเรื่องใหญ่คืออะไรเมื่อมีเว็บไซต์แย่ลงและมีฮาร์ดคอร์มากขึ้นและนี่เป็นเพียงรายชื่อ Pro Domination เป็นอาชีพที่ถูกกฎหมายในสหรัฐอเมริกาและส่วนใหญ่ของโลก ผู้คนไม่ต้องการสัมผัสเว็บไซต์ มันแปลกจริงๆ ฉันมีข้อมูลและรายละเอียดทั้งหมดของเว็บไซต์ที่วางไว้อย่างสมบูรณ์และชัดเจน ฉันแค่ไม่ได้รับคำตอบหรือคนที่บอกฉันว่าพวกเขาจะไม่แตะต้องผู้ใหญ่อะไรจากระยะไกล มีเหตุผลสำหรับสิ่งนี้หรือไม่?

5
นักพัฒนาซอฟต์แวร์อาวุโสที่มีความสามารถทางเทคนิคสามารถทำการศึกษาเพื่อปรับปรุงอย่างต่อเนื่อง [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว สมมติว่าคุณเขียนโปรแกรมมานานกว่า 10 ปีแล้ว คุณรู้หลายภาษามีไม่กี่คนที่มีรายละเอียดมาก คุณได้ออกแบบสถาปัตยกรรมสำหรับโซลูชันทำงานและส่งมอบโครงการขนาดใหญ่ คุณได้ศึกษารูปแบบวิธีปฏิบัติที่ดีที่สุดแนวทางการเข้ารหัสที่มีประสิทธิภาพการทดสอบหน่วยการทำเธรดหลายเธรดและอื่น ๆ แล้วคุณค่อย ๆ พัฒนาความรู้สึกที่หนังสือส่วนใหญ่ที่คุณอ่านให้ข้อมูลที่มีค่าน้อยลงและน้อยลงต่อข้อความ 100 หน้า ดังนั้นพวกเขาจึงเริ่มให้ผลตอบแทนลดลง คุณยังคงเรียนรู้ แต่คุณจะไม่พัฒนาอีกต่อไปเมื่อก้าวกระโดด ทำไมการเรียนรู้จึงมีประสิทธิผลน้อยลงเมื่อเทียบกับเมื่อก่อน ย้อนกลับไปก่อนหน้านี้มันเคยเปลี่ยนวิธีคิดของคุณสอนสิ่งใหม่ ๆ และขยายขอบเขตอันไกลโพ้นของคุณซึ่งต่อมาได้ปรับปรุงทั้งอาชีพปัจจุบันของคุณหรืออนุญาตให้คิดค้น / จัดการ / สร้างสิ่งใหม่ เหตุใดจึงไม่เป็นเช่นนั้นอีกต่อไป?

1
Apache License และสิทธิบัตร
ฉันพยายามเข้าใจว่า Apache License มีผลต่อสิทธิบัตรอย่างไร ในส่วนที่เกี่ยวกับเว็บไซต์ Apache http://www.apache.org/licenses/LICENSE-2.0ส่วนที่ 3 ฉันถูกต้องหรือไม่ในส่วนแรกที่กล่าวว่าผู้ได้รับอนุญาตสามารถทำอะไรกับสิทธิบัตรได้หรือไม่ ในส่วนหลังมันคือการบอกว่าถ้าผู้อนุญาตตัดสินใจที่จะฟ้องคนที่ละเมิดสิทธิบัตรของพวกเขาพวกเขาจะสูญเสียสิทธิบัตรทั้งหมดของพวกเขาหรือมันพูดถึงผู้รับใบอนุญาต?

5
อะไรคือทางเลือกในการตั้งโปรแกรมการทำงานของอินเตอร์เฟส?
หากฉันต้องการตั้งโปรแกรมในรูปแบบ "ฟังก์ชั่น" ฉันจะใช้อะไรแทนอินเตอร์เฟสได้บ้าง? interface IFace { string Name { get; set; } int Id { get; } } class Foo : IFace { ... } อาจจะTuple<>? Tuple<Func<string> /*get_Name*/, Action<String> /*set_Name*/, Func<int> /*get_Id*/> Foo; เหตุผลเดียวที่ฉันใช้อินเทอร์เฟซตั้งแต่แรกก็เพราะฉันต้องการให้มีคุณสมบัติ / วิธีการบางอย่างอยู่เสมอ แก้ไข:รายละเอียดเพิ่มเติมบางอย่างเกี่ยวกับสิ่งที่ฉันคิด / พยายาม บอกว่าฉันมีวิธีที่ใช้สามฟังก์ชั่น: static class Blarf { public static void DoSomething(Func<string> getName, Action<string> …

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

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