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

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

6
มันไม่เป็นไรสำหรับอินเตอร์เฟสที่จะมีวิธีการที่ส่งกลับชนิดที่เป็นรูปธรรมของการใช้งานในรูปแบบของค่าคงที่หรือไม่?
ฉันมักจะทำให้ตัวเองอยู่ในสถานการณ์ที่ฉันต้องการพฤติกรรมที่แตกต่างของส่วนประกอบซึ่งขึ้นอยู่กับรูปแบบที่แตกต่างกันของอินเทอร์เฟซที่แตกต่างกัน เพื่อแสดงคำถามของฉันฉันได้เขียนรหัสชิ้นเล็ก ๆ ซึ่งจะแสดงสิ่งที่ฉันหมายถึง ในตัวอย่างนี้ฉันพยายามที่จะยกตัวอย่างวัตถุอาหารจากวัตถุสัตว์ interface Animal { void growl(); String getAnimalType(); //"DOG" or "FISH" } abstract class Food {} Meat extends Food {} Bread extends Food {} class FoodFactory { Food createFoodForAnimal(Animal animal) { switch (animal.getAnimalType()) { case "DOG": Food food = new Meat(); break; case "FISH": Food food …

1
Vanilla JS ยังถือว่าเป็นห้องสมุดหรือไม่?
เมื่อไม่นานมานี้ฉันพบว่า VanillaJS (document?) เป็นไลบรารีที่รวมกับเบราว์เซอร์ 99% เท่านั้นและไม่ใช่ JavaScript ดั้งเดิม ในขณะที่เขียน lib ของฉันฉันมักจะหลีกเลี่ยงสิ่งที่เป็นประโยชน์ทั้งหมด libs ส่วนใหญ่ ตอนนี้ฉันมีสามคำถาม: VanillaJS ยังถือว่าเป็น lib หรือไม่? มีวิธีทำอะไรกับ DOM ที่ไม่มี VanillaJS หรือไม่? libs ที่สำคัญนั้นใช้ VanillaJS หรือ native JS (ไม่มีสิ่งของ)

1
Rest APIs - ความท้าทายเฉพาะสำหรับมือถือ
ฉันกำลังทำงานในโครงการแอพ iOS ใหม่ทางมือถือ การเปลี่ยนแปลงสถาปัตยกรรมบางอย่างกำลังเกิดขึ้นและปรากฎว่าเราจะต้องพึ่งพา API ส่วนตัวที่สร้างขึ้นเองซึ่งจะถูกใช้โดยแอพที่เรากำลังสร้างและลูกค้ารายอื่นเช่นเว็บไซต์ API ที่ถูกออกแบบตามสไตล์ Rest ของการดำเนินการ URI และ CRUD ที่เน้นทรัพยากรเป็นศูนย์กลางจับคู่กับกริยา HTTP สิ่งที่ชอบ: GET www.example.com/books DELETE www.example.com/books/482094 POST www.example.com/users/6793 ปัญหาคือว่ารูปแบบนี้มักจะนำไปสู่ความต้องการให้ไคลเอนต์มือถือทำการร้องขอมากมายสำหรับการโหลดหน้าจอแอปเดียวหรือจัดการการกระทำ UI ของผู้ใช้คนเดียว สิ่งนี้นำไปสู่แอปที่อยู่ในโหมดโหลดเป็นเวลา 8 วินาทีจนกว่าจะมีทุกอย่างที่จำเป็น แอพที่ช้าและไม่ตอบสนอง ไคลเอนต์มือถือมีข้อ จำกัด ที่ร้ายแรงเมื่อพูดถึงการเชื่อมต่อดังนั้นเราควรปฏิบัติตามกฎดังกล่าว: 1 หน้าจอ == 1 การเรียก API 1 บันทึก == 1 การเรียก API มีหลายสถานการณ์ที่สิ่งนี้ทำให้คุณมีหลักสูตรการชนด้วยหลักการออกแบบ REST เช่น: สมมติว่าแอปของคุณออฟไลน์อยู่หนึ่งวันและคุณจำเป็นต้องซิงค์กับฐานข้อมูลแบ็กเอนด์สี่ตารางและคุณต้องการโทรศัพท์เช่น www.example.com/sync_everything?since=2015-07-24 สมมติว่ามีหน้าจอที่ผู้ใช้สามารถแก้ไขวัตถุของเขาได้หลายอย่างเช่นการทำเครื่องหมายในรายการสิ่งที่ต้องทำ …
25 rest  api  ios  mobile 

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

4
ฉันจะจัดการ setters ในฟิลด์ที่ไม่เปลี่ยนรูปแบบได้อย่างไร
ฉันมีชั้นเรียนสองreadonly intสาขา พวกเขาถูกเปิดเผยเป็นคุณสมบัติ: public class Thing { private readonly int _foo, _bar; /// <summary> I AM IMMUTABLE. </summary> public Thing(int foo, int bar) { _foo = foo; _bar = bar; } public int Foo { get { return _foo; } set { } } public int Bar { get { …

8
การรวบรวมลำดับของฉันควรเริ่มต้นที่ดัชนี 0 หรือดัชนี 1 หรือไม่
ฉันกำลังสร้างแบบจำลองวัตถุสำหรับอุปกรณ์ที่มีหลายช่องทาง คำนามที่ใช้ระหว่างลูกค้าและฉันและChannel ChannelSet("ชุด" ไม่ถูกต้องทางความหมายเพราะเป็นชุดและชุดที่ไม่ถูกต้อง แต่นั่นเป็นปัญหาสำหรับเวลาที่แตกต่างกัน) ฉันใช้ C # นี่คือตัวอย่างการใช้งานของChannelSet: // load a 5-channel ChannelSet ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json"); Console.Write(channels.Count); // -> 5 foreach (Channel channel in channels) { Console.Write(channel.Average); Console.Write(", "); } // -> 0.3, 0.3, 0.9, 0.1, 0.2 ทั้งหมดคือสำรวย อย่างไรก็ตามลูกค้าไม่ใช่โปรแกรมเมอร์และพวกเขาจะสับสนอย่างแน่นอนโดยไม่มีการทำดัชนี - ช่องแรกคือช่องที่ 1 สำหรับพวกเขา แต่เพื่อประโยชน์ของความสอดคล้องกับ C # ผมต้องการที่จะให้ChannelSetจัดทำดัชนีจากศูนย์ นี่เป็นสาเหตุที่ทำให้เกิดการเชื่อมต่อระหว่างทีม …

2
“ ตรรกะทางธุรกิจ” หมายความว่าอย่างไรหากไม่ใช่“ รหัสบุคคลที่ไม่ใช่บุคคลที่สาม”?
ฉันได้ยินคนพูดถึงตรรกะทางธุรกิจมากมายในที่ทำงานและออนไลน์และฉันได้อ่านคำถามหลายข้อเกี่ยวกับเว็บไซต์นี้ แต่คำนี้ยังไม่สมเหตุสมผลสำหรับฉัน ตัวอย่างเช่นต่อไปนี้เป็นคำสั่ง (ถอดความ) ที่ฉันมักจะเห็น: "ตรรกะทางธุรกิจเป็นส่วนหนึ่งของโปรแกรมของคุณที่เข้ารหัสกฎเกณฑ์ทางธุรกิจที่แท้จริง" คำจำกัดความส่วนใหญ่ที่ฉันได้อ่านเป็นคำวงกลมเช่นนี้ "ตรรกะทางธุรกิจคือทุกสิ่งที่ไม่เหมือนใครสำหรับแอปพลิเคชันของคุณโดยเฉพาะ" ฉันไม่เห็นว่าสิ่งนี้แตกต่างจาก "แอปพลิเคชันของคุณโดยเฉพาะคืออะไร แต่เป็นตรรกะทางธุรกิจ" เว้นแต่ว่าเราจะมีการคิดค้นใหม่โดยบังเอิญ ดังนั้นชื่อคำถาม "ควรมี Business Logic Layer เหนือ Data Access Layer ของคุณและต่ำกว่า GUI Layer ของคุณ" ในรหัสที่ฉันเขียนตัวเข้าถึงฐานข้อมูลต้องทราบว่าข้อมูลใดที่พวกเขาควรจะเข้าถึงและรหัส UI ต้องรู้มากมายเกี่ยวกับสิ่งที่กำลังแสดงเพื่อแสดงอย่างถูกต้องและไม่มีอะไรทำระหว่าง ทั้งสองแห่งนั้นไม่ใช่การส่งข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ ดังนั้นสิ่งที่ควรจะเป็น Business Logic Layer? "ตรรกะทางธุรกิจควรแยกออกจากตรรกะการนำเสนอ" คำขอคุณสมบัติส่วนใหญ่ที่เราได้รับคือการเปลี่ยนตรรกะการนำเสนอด้วยเหตุผลทางธุรกิจ หากหนึ่งในกฎเกณฑ์ทางธุรกิจคือการแสดงราคาพันธบัตรรัฐบาลสหรัฐฯในรูปแบบที่ 32 โดยค่าเริ่มต้น (ในขณะเดียวกันก็ให้ UI สำหรับผู้ใช้ในการกำหนดค่านั้น) ตรรกะการนำเสนอต้องมีอย่างน้อยต้องรู้ว่ามีกฎนี้อยู่หรือไม่ นอกจากนี้ดูเหมือนว่าส่วนสำคัญของการออกแบบ UX ช่วยให้ผู้ใช้เข้าใจกฎเกณฑ์ทางธุรกิจซอฟต์แวร์ของเราพยายามนำไปใช้ เป็นไปได้หรือไม่ที่ฉันอยู่ในทีมที่ทำแค่ตรรกะทางธุรกิจและตรรกะอื่น ๆ ที่ไม่ใช่ธุรกิจกำลังทำโดยทีมอื่น ๆ ? …

2
Java: ทำไมคอลเลกชันถึงรับตัวเปรียบเทียบ แต่ไม่ใช่ (สมมุติ) Hasher and Equator?
ปัญหานี้ชัดเจนที่สุดเมื่อคุณมีการใช้อินเทอร์เฟซที่แตกต่างกันและสำหรับวัตถุประสงค์ของคอลเลกชันเฉพาะคุณสนใจเฉพาะมุมมองระดับอินเทอร์เฟซของวัตถุ ตัวอย่างเช่นสมมติว่าคุณมีอินเทอร์เฟซเช่นนี้: public interface Person { int getId(); } วิธีปกติในการใช้งานhashcode()และequals()ในชั้นเรียนการใช้งานจะมีรหัสดังนี้ในequalsวิธี if (getClass() != other.getClass()) { return false; } นี้ทำให้เกิดปัญหาเมื่อคุณผสมการใช้งานในPerson HashMapหากมีHashMapเพียงคนเดียวที่ใส่ใจเกี่ยวกับมุมมองระดับอินเตอร์เฟสของPersonมันก็อาจจบลงด้วยการซ้ำที่แตกต่างกันเฉพาะในชั้นเรียนของพวกเขาใช้งาน คุณสามารถทำให้กรณีนี้ทำงานโดยใช้วิธีการแบบเดียวกันequals()สำหรับการใช้งานทั้งหมด แต่คุณเสี่ยงต่อการequals()ทำสิ่งที่ผิดในบริบทที่แตกต่างกัน (เช่นการเปรียบเทียบสองPersons ที่สำรองข้อมูลโดยบันทึกฐานข้อมูลที่มีหมายเลขรุ่น) สัญชาตญาณของฉันบอกฉันว่าควรกำหนดความเสมอภาคต่อการรวบรวมแทนที่จะเป็นแบบต่อชั้นเรียน เมื่อใช้คอลเลกชันที่พึ่งพาการสั่งซื้อคุณสามารถใช้แบบกำหนดเองComparatorเพื่อเลือกลำดับที่ถูกต้องในแต่ละบริบท ไม่มีอะนาล็อกสำหรับคอลเล็กชันที่ใช้แฮช ทำไมนี้ คำถามนี้แตกต่างจาก " Why is .compareTo () ในส่วนติดต่อในขณะที่. equals () อยู่ในคลาสใน Java? " เพราะเกี่ยวข้องกับการใช้งานคอลเลกชัน compareTo()และequals()/ hashcode()ทั้งสองประสบปัญหาสากลเมื่อใช้คอลเลกชัน: คุณไม่สามารถเลือกฟังก์ชั่นการเปรียบเทียบที่แตกต่างกันสำหรับคอลเลกชันที่แตกต่างกัน ดังนั้นสำหรับวัตถุประสงค์ของคำถามนี้ลำดับชั้นการสืบทอดของวัตถุไม่สำคัญเลย สิ่งที่สำคัญคือฟังก์ชันการเปรียบเทียบถูกกำหนดต่อวัตถุหรือต่อการรวบรวม
25 java  collections 

3
RESTful API: คำกริยา HTTP กับ URL ที่แชร์หรือเฉพาะ
ในขณะที่สร้างRESTful APIฉันควรใช้ HTTP Verbs บน URL เดียวกัน (เมื่อเป็นไปได้) หรือฉันควรสร้าง URL เฉพาะสำหรับแต่ละการกระทำ ตัวอย่างเช่น: GET /items # Read all items GET /items/:id # Read one item POST /items # Create a new item PUT /items/:id # Update one item DELETE /items/:id # Delete one item หรือด้วย URL เฉพาะเช่น: GET /items # Read …

4
มีเหตุผลที่ดีที่จะทำให้ฟังก์ชั่นที่บริสุทธิ์ไม่ใช่แบบสาธารณะหรือไม่?
ฉันมีการอภิปรายเล็กน้อยเกิดขึ้นกับเพื่อนร่วมงาน มีเหตุผลที่ดีที่จะซ่อน / ห่อหุ้มฟังก์ชั่นที่บริสุทธิ์หรือไม่? โดย "pure" ฉันหมายถึงคำจำกัดความของวิกิพีเดีย : ส่งคืนผลลัพธ์เดียวกันจากอินพุตเดียวกันเสมอ (เพื่อประโยชน์ในการสนทนาFoo Create(){ return new Foo(); }นี้ถือว่าไม่บริสุทธิ์หากFooไม่มีความหมายตามตัวอักษร) ห้ามใช้สถานะที่ไม่แน่นอน (ยกเว้นตัวแปรโลคัล) หรือ I / O ไม่ก่อให้เกิดผลข้างเคียง

2
เป็นเรื่องปกติหรือไม่ที่ผู้ก่อตั้งเว็บแอปจะขาดความเชี่ยวชาญด้านเทคนิคในการขยายหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการ4 ปีที่แล้ว เมื่อฉันดูสิ่งต่าง ๆ เช่น Twitter ดูเหมือนว่าความคิดนั้นง่ายมากที่จะนำไปใช้ในขั้นต้นว่าผู้ก่อตั้งไม่จำเป็นต้องมีความสามารถทางเทคนิคมาก โดยพื้นฐานแล้วมันเป็นแค่ผู้ชายที่มีความคิดที่ดี แต่เมื่อแอพ / ซอฟต์แวร์ระเบิดและก่อให้เกิดปัญหาทางวิศวกรรมที่ยากขึ้นผู้ก่อตั้งจะจัดการกับมันอย่างไร เราเคยเห็นกรณีที่คนดั้งเดิมที่มีความคิดที่ดีตกหล่นองค์กรเพราะมันกลายเป็นความท้าทายทางเทคนิคและความคิดน้อยลงหรือไม่?
25 startup 

1
ผู้เขียน Code Complete หมายถึงอะไรเมื่อพูดถึงการซ่อนข้อมูลทั่วโลก
ในส่วนที่ 6.4 ของ Code Complete 2nd Edition มีย่อหน้าเกี่ยวกับการซ่อนข้อมูลทั่วโลก สิ่งที่ฉันสนใจเป็นพิเศษคือ McConnell (ผู้แต่งหนังสือ) ให้ตัวอย่างของประโยชน์จากการซ่อนข้อมูลทั่วโลก มีตัวอย่างหนึ่งที่ฉันไม่เข้าใจ ฉันไม่มีหนังสือฉบับภาษาอังกฤษดังนั้นฉันจะพยายามแปลข้อความ การซ่อนข้อมูลทั่วโลก (... ) คุณสามารถเปลี่ยนโครงสร้างของข้อมูลโดยไม่ต้องแก้ไขโปรแกรม McConnell แปลว่าอะไร? เขากำลังพูดถึงการเปลี่ยนแปลงข้อมูลทั่วโลกหรือไม่ ถ้าเป็นเช่นนั้นทำไมคุณไม่ต้องแก้ไขโปรแกรมของคุณเมื่อคุณใช้วิธีการในการเรียกข้อมูลกลับคืน? หรือบางทีเขากำลังพูดถึงสิ่งอื่นที่นี่? ฉันจะซาบซึ้งอย่างมากถ้ามีคนล้างความสับสนของฉัน หากคุณสามารถให้ตัวอย่างมันจะดีมาก (ตัวอย่างนั้นยอดเยี่ยมคุณก็รู้)

1
มันถูกต้องหรือไม่ที่จะขอให้ผู้ดูแลเพื่อรีบูตคำขอการชักชวนของพวกเขาบน GitHub
ฉันรักษา repit GitHub ที่เป็นที่นิยม เมื่อคำขอดึงเป็นสิ่งที่ดีที่จะผสานฉันมักจะขอให้ผู้เขียนรีบูตมันเพื่อกระทำเดียวก่อนที่ฉันจะรวมมัน (โดยเฉพาะอย่างยิ่งเมื่อมีการแก้ไขเล็ก ๆ หลายครั้ง) นี่เป็นการฝึกคอมไพล์ที่ดีหรือไม่? มารยาท GitHub มาตรฐานนี้เป็นที่ยอมรับหรือไม่? ประโยชน์บางประการ: ฉันได้รับประวัติการกระทำที่ดีในบันทึกการกระทำ ฉันไม่ต้องการเปลี่ยนแปลงการผูกมัดตัวเอง มันมอบหมายงานบางส่วน ข้อเสียที่เป็นไปได้: ฉันไม่แน่ใจว่านี่เป็นมารยาทที่ดีหรือไม่ ฉันไม่แน่ใจว่านี่เป็นการฝึกคอมไพล์ที่ดีหรือไม่ ฉันมักจะถามการเปลี่ยนแปลงอื่น ๆ แล้ว - นี่คืออีกหนึ่งและฉันไม่ต้องการกีดกันผู้มีส่วนร่วม
25 github  etiquette 

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

3
ทำไมสมาชิกส่วนตัวสามารถเข้าถึงได้ในวิธีการคงที่?
ต่อไปนี้เป็นรหัสหลอกฉันลองใน Java และ PHP และทั้งสองทำงาน: class Test { private int a = 5; public static function do_test(){ var t = new Test(); t.a = 1; print t.a // 1 } } Test::do_test(); ทำไมคุณสามารถทำสิ่งนี้ในกระบวนทัศน์ OOP และการใช้งานของมันคืออะไร?

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