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

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

2
ฉันในฐานะผู้เขียนและผู้ถือลิขสิทธิ์สามารถขอรหัสของฉันภายใต้ใบอนุญาตเสรีมากขึ้นหลังจากที่ได้รับการเผยแพร่ภายใต้ใบอนุญาตที่ จำกัด มากขึ้น?
พูดเช่นฉันเผยแพร่รหัสของฉันภายใต้ GPL หนึ่งเดือนหลังจากปล่อยฉันตัดสินใจว่าองค์กรชั่วร้าย ( *ไอ*) ได้รับอนุญาตให้ใช้รหัสของฉันเพราะมันยอดเยี่ยมและปราศจากข้อผิดพลาด ฉันขอรหัสของตัวเองหรือฉันล็อคตัวเองไม่ให้ทำเช่นนั้น?
10 licensing  gpl 

2
ไปยังที่เก็บหรือไม่ไปยังที่เก็บ
เมื่อครั้งแรกที่ฉันได้เรียนรู้เกี่ยวกับการออกแบบการขับเคลื่อนด้วยโดเมนฉันยังได้รับการแนะนำให้รู้จักกับที่เก็บและรูปแบบการทำงานที่ครั้งหนึ่งดูเหมือนจะเป็นอันดับต้น ๆ สำหรับเด็กสุดเท่ห์ที่ทำให้แบบสอบถาม SQL เช่น cavemans เทียบกับฐานข้อมูล ยิ่งฉันเข้าสู่หัวข้อนั้นมากเท่าไหร่ฉันก็ยิ่งรู้ว่าพวกเขาไม่จำเป็นอีกต่อไปเพราะORMsเช่นEFและNHibernateที่ใช้ทั้งสองหน่วยงานและพื้นที่เก็บข้อมูลไว้ใน API เดียวที่เรียกว่าเซสชันหรือบริบท ตอนนี้ฉันไม่แน่ใจว่าจะทำอย่างไร เพื่อเก็บหรือไม่ไปยังที่เก็บ ผมเข้าใจโต้แย้งว่าแนวคิดดังกล่าวรั่วเพียงสิ่งที่มากกว่าซับซ้อนขณะที่การเพิ่มอะไรอย่างที่อาจลดความซับซ้อนของการเข้าถึงข้อมูล แต่ก็ไม่ได้รู้สึกขวาคู่ทุกด้านที่เป็นไปได้ของการประยุกต์ใช้ของฉันไปเช่นEntity Framework โดยปกติฉันทำตามคำแนะนำง่ายๆ: เลเยอร์โดเมนคือหัวใจของระบบที่มีเอนทิตี, บริการ, ที่เก็บ ... ชั้นโครงสร้างพื้นฐานให้การใช้งานของส่วนต่อประสานโดเมนที่เกี่ยวข้องกับโครงสร้างพื้นฐานเช่นไฟล์ฐานข้อมูลโปรโตคอล ชั้นแอพลิเคชันเป็นเจ้าภาพรากองค์ประกอบที่เชื่อมโยงสิ่งต่างๆและประสานทุกอย่าง โซลูชันของฉันมักจะมีลักษณะเช่นนี้: Domain.Module1 Domain.Module2 IModule2Repo IModule2Service Module2 Infrastructure.Persistence Repositories EntityFrameworkRepositoryBase MyApp Boostrapper -> inject EntityFrameworkRepositoryBase into IRepository etc. ฉันรักษาเลเยอร์โดเมนของฉันให้สะอาดโดยใช้สิ่งIRepository<'T>ที่เป็นข้อกังวลเกี่ยวกับโดเมนไม่ขึ้นอยู่กับสิ่งอื่นใดที่บอกวิธีเข้าถึงข้อมูล เมื่อตอนนี้ฉันจะทำให้การใช้งานที่เป็นรูปธรรมของIModule2Serviceที่ต้องการเข้าถึงข้อมูลฉันจะต้องฉีดDbContextและโดยสิ่งนี้เชื่อมต่อโดยตรงกับชั้นโครงสร้างพื้นฐาน ( มาที่โครงการ Visual Studio สิ่งนี้อาจทำให้ยุ่งยากเพราะการอ้างอิงแบบวงกลม! ) นอกจากนี้สิ่งที่สามารถเป็นทางเลือกให้กับศูนย์รับฝากและงานfucktons ? CQRS? …

2
วิธีที่แนะนำสำหรับฟังก์ชั่นตัวช่วยใน JavaScript คืออะไร?
วิธีที่แนะนำสำหรับฟังก์ชั่นผู้ช่วยคืออะไร? ฉันต้องการเลือกหนึ่งเทคนิคและดำเนินการเพื่อสร้าง "คลาส" ใหม่ของฉัน นี่คือตัวเลือกการออกแบบที่ฉันได้ครุ่นคิด: ตัวเลือกที่ 1: ฟังก์ชันผู้ช่วยในขอบเขตด้านนอกเรียกใช้ด้วยบริบทของอินสแตนซ์ function createPane (pane) { // logic to create pane var proto = Object.create(this.paneList); $.extend(paneProto, pane); return paneProto; } Panes.prototype.initialize = function (panes) { var _this = this; _.each(panes, function () { _this.panes.push(createPane.call(_this, this)); }); } จุดเด่น:ไวยากรณ์ง่าย ๆ createPaneไม่ได้เผยแพร่ในอินสแตนซ์ ข้อด้อย: createPaneสามารถเข้าถึงได้ในขอบเขตอื่น ตัวเลือก 2: …

5
ทำไมส่วนหัว HTTP ไม่รวมความละเอียดของอุปกรณ์ความหนาแน่นของพิกเซล ฯลฯ
ฉันกำลังพัฒนาเว็บไซต์ที่ตอบสนองได้ด้วยการสืบค้นสื่อ CSS มันจะง่ายขึ้นถ้าเซิร์ฟเวอร์ส่ง HTML / CSS ที่แตกต่างกันสำหรับแต่ละวิวพอร์ต ฉันสงสัยว่าทำไมลูกค้าถึงไม่สามารถใส่ข้อมูลวิวพอร์ตของตนเมื่อขอไฟล์ HTML พฤติกรรมนี้เป็นเรื่องปกติอยู่แล้วสำหรับการส่งคืนเว็บไซต์ในภาษาที่ถูกต้องโดยใช้Accept-Languageส่วนหัว
10 http 

2
จะหลีกเลี่ยงการใช้ API โดยไม่ได้รับอนุญาตได้อย่างไร
ฉันต้องออกแบบ "วิดเจ็ต" สคริปต์ที่พันธมิตรจะฝังไว้ในเว็บไซต์ของพวกเขาเพื่อแสดง UI และโทรหา API ของเรา โดยพื้นฐานแล้วมันจะแสดงข้อมูลของเราในเว็บไซต์เหล่านี้โดยอ้างอิงจาก ID บางรหัสที่พวกเขาให้ไว้ในการเรียก API สิ่งที่เราต้องการหลีกเลี่ยงคือมีคนใช้ API ในทางที่ผิดและใช้ขูดแคตตาล็อกทั้งหมดของเรา พันธมิตรแต่ละรายที่ฝังสคริปต์ของเราจะได้รับกุญแจสาธารณะที่จะต้องให้เมื่อเรียก API แนวคิดจะขอให้พวกเขาต่อท้ายคีย์นี้เมื่อโหลดสคริปต์เช่น: <script src="//initrode.com/widget/loader.js?key=xxxx"></script> ด้วยวิธีนี้คำขอสำหรับสคริปต์สามารถใช้ในการลงทะเบียนคู่ของคีย์ / แหล่งที่มา IP และตอบรับการเรียก API ที่ตามมาเฉพาะในกรณีที่คู่คีย์ / IP ตรงกับคู่ที่ลงทะเบียนแล้ว (มีอายุการใช้งาน จำกัด และ จำกัด คำขอต่อวัน) ฉันไม่แน่ใจว่าเป็นความคิดที่ดีเพราะเห็นได้ชัดว่าการรักษาความปลอดภัยด้วยการทำให้งงงวย (มีคนโหลดสคริปต์จะข้ามมันอย่างสมบูรณ์); แต่ฉันไม่เห็นวิธีอื่น ๆ ในการ จำกัด การเข้าถึง ฉันไม่สามารถให้รหัสที่ไม่ซ้ำกับผู้ใช้ทุกคนเฉพาะกับพันธมิตร ฉันไม่สามารถใช้ระบบกุญแจส่วนตัวได้เนื่องจากทุกรหัสจะมีให้สำหรับทุกคน โดยทั่วไปจะ จำกัด การเข้าถึง API สาธารณะเช่นขัดแย้งกับคำจำกัดความ คุณคิดอย่างไรกับวิธีนี้และคุณจะทำอย่างไรกับข้อ จำกัด …

3
พุช vs โพลเมื่อยอมรับล่าช้า (ชั่วโมง) ขนาดใหญ่
ดูเหมือนว่าทุกวันนี้การลงคะแนนเลือกตั้งเป็นวิธีปฏิบัติที่ไม่ดีและการผลักดันเป็นวิธีที่จะดำเนินการเมื่อมีการพัฒนาแอปพลิเคชั่นมือถือที่ต้องการรับข้อมูลจากเซิร์ฟเวอร์ระยะไกลอย่างต่อเนื่อง ร้านมือถือรายใหญ่ทุกแห่งมีบริการแจ้งเตือนแบบพุช: บริการแจ้งเตือน Apple Push Google Cloud Messaging สำหรับ Android บริการแจ้งเตือนของ Microsoft Push อย่างไรก็ตามฉันสงสัยว่าข้อสมมติฐานนี้จะมีผลในระดับใด ฉันหมายถึงถ้าฉันมีแอปพลิเคชั่นที่สำรวจเซิร์ฟเวอร์ระยะไกลวันละสองสามครั้งเท่านั้นและไม่จำเป็นต้องส่ง "การแจ้งเตือน" ทันที (ยอมรับความล่าช้ามาก) ถ้าเป็นเช่นนั้นจะเป็นการตัดสินใจที่ดี การสำรวจความคิดเห็นสำหรับข้อมูลแทนที่จะผลักดันมัน? ขอบคุณล่วงหน้า!
10 mobile  push  polling 

3
แมโครและสคริปต์แตกต่างกันอย่างไร
ไม่ใช่ทั้งชุดคำสั่งที่ดำเนินการโดยล่ามบางคนใช่ไหม (ตรงกันข้ามกับโปรแกรมเต็มรูปแบบซึ่งทำงาน (ได้รับการดำเนินการ) ในระบบคอมพิวเตอร์บางระบบ?

1
ทำไม FRACTRAN ถึงสมบูรณ์
ฉันพยายาม google เพื่อขอคำอธิบาย แต่ลิงก์ส่วนใหญ่พูดเพียงสิ่งเดียวเช่น "FRACTRAN กำลังทำให้สมบูรณ์ตัวอย่างเช่นลองดูที่การคูณ" ฉันจำได้ว่าเห็นโพสต์ฟอรัม xkcd บอกว่าFRACTRANช่วยให้โปสเตอร์เข้าใจทัวริงครบถ้วน ฉันกำลังมองหาคำอธิบายที่เข้าใจง่ายว่าเหตุใด esolang นี้จึงทัวริงสมบูรณ์เพราะมันไม่ชัดเจนมากนักในการดูกลศาสตร์ภาษา

2
ส่วนหน้าเขียนด้วยภาษาที่ใช้สำหรับแบ็กเอนด์! [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา จากประสบการณ์ของฉันในการพัฒนาเว็บไซต์ฉันรู้ว่ามีการใช้ภาษาอย่าง PHP, Java, Python..etc สำหรับการพัฒนาแบ็กเอนด์ (ซอฟต์แวร์ที่ทำงานบนเซิร์ฟเวอร์) และสำหรับภาษาส่วนหน้าใช้ JS / HTML / CSS แต่ฉันเห็นหลาย บริษัท บอกว่าพวกเขาใช้เช่น PHP สำหรับการพัฒนาส่วนหน้าและไพ ธ อนสำหรับแบ็คเอนด์ นั่นหมายความว่า PHP เป็นส่วนหน้าสำหรับการเรียกบริการอื่น ๆ ที่เขียนเป็นภาษาอื่น ๆ ผ่าน REST, RPC .. เป็นต้น?

1
เบลอเส้นระหว่างแอซิงก์และฟังก์ชั่นปกติใน C # 5.0
เมื่อเร็ว ๆ นี้ดูเหมือนว่าฉันจะไม่สามารถรับรูปแบบasync-await ที่น่าทึ่งของ C # 5.0 ได้ คุณอยู่ที่ไหนตลอดชีวิตของฉัน ฉันตื่นเต้นอย่างมากกับไวยากรณ์ที่เรียบง่าย แต่ฉันมีปัญหาเล็กน้อย ปัญหาของฉันคือฟังก์ชั่น async มีการประกาศที่แตกต่างกันโดยสิ้นเชิงจากฟังก์ชั่นปกติ เนื่องจากมีเพียง async เท่านั้นที่สามารถรอฟังก์ชั่นอื่น ๆ ของ async ได้เมื่อฉันพยายามที่จะแปลงรหัสการบล็อกเก่า ๆ ให้เป็น async ฉันจึงมีผลกระทบโดมิโนของฟังก์ชั่นที่ฉันต้องแปลง คนได้รับการอ้างถึงนี้เป็นทำลายผีดิบ เมื่อ async เริ่มกัดรหัสของคุณมันก็จะยิ่งใหญ่ขึ้นเรื่อย ๆ กระบวนการ porting ไม่ยากมันเป็นเพียงแค่การขว้างปาในการประกาศและการตัดค่าตอบแทนด้วยasync Task<>แต่มันเป็นเรื่องที่น่ารำคาญที่จะทำเช่นนี้ซ้ำแล้วซ้ำอีกเมื่อทำการพอร์ตรหัสซิงโครนัสเก่า ดูเหมือนว่าฉันจะเป็นธรรมชาติมากขึ้นถ้าทั้งสองประเภทฟังก์ชั่น (async และซิงค์เก่าธรรมดา) มีไวยากรณ์เดียวกันแน่นอน หากเป็นกรณีนี้การย้ายจะใช้ความพยายามเป็นศูนย์และฉันสามารถสลับระหว่างสองรูปแบบได้อย่างไม่ลำบาก ฉันคิดว่าสิ่งนี้สามารถใช้งานได้หากเราปฏิบัติตามกฎเหล่านี้: ฟังก์ชัน Async ไม่จำเป็นต้องมีการasyncประกาศอีกต่อไป Task<>ประเภทการกลับมาของพวกเขาจะได้ไม่ต้องถูกห่อใน คอมไพเลอร์จะระบุฟังก์ชั่น async ระหว่างการคอมไพล์ด้วยตัวเองและทำการตัดคำสั่งงาน <> โดยอัตโนมัติตามต้องการ ไม่มีการเรียกและฟังก์ชั่น …

6
การเชื่อมโยงหลายมิติเอกสารรหัสที่มาภายนอก [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ทำไมเรายังคงฝังคำอธิบายภาษาธรรมชาติของรหัสที่มา (คือเหตุผลที่ว่าทำไมบรรทัดของรหัสที่ถูกเขียน) ภายในรหัสที่มามากกว่าที่จะเป็นเอกสารแยกต่างหาก? เมื่อพิจารณาถึงอสังหาริมทรัพย์ที่กว้างขวางในสภาพแวดล้อมการพัฒนาที่ทันสมัย ​​(จอภาพความละเอียดสูง, จอภาพสองจอ ฯลฯ ) IDE สามารถจัดทำพาเนลกึ่งล็อคขั้นตอนที่ซอร์สโค้ดแยกออกจากสายตา - แต่เชื่อมโยงกับ - ความคิดเห็นที่เกี่ยวข้อง ตัวอย่างเช่นนักพัฒนาสามารถเขียนความคิดเห็นซอร์สโค้ดในภาษามาร์กอัปที่เชื่อมโยงหลายมิติ (เชื่อมโยงกับข้อกำหนดของซอฟต์แวร์เพิ่มเติม) ซึ่งจะช่วยป้องกันเอกสารจากการทำให้ยุ่งเหยิงซอร์สโค้ด ข้อบกพร่องอะไรที่จะยับยั้งกลไกการพัฒนาซอฟต์แวร์เช่นนี้? การจำลองเพื่อช่วยชี้แจงคำถาม: เมื่อเคอร์เซอร์อยู่ที่บรรทัดใดบรรทัดหนึ่งในซอร์สโค้ด (แสดงด้วยพื้นหลังสีน้ำเงินด้านบน) เอกสารที่สอดคล้องกับบรรทัดที่เคอร์เซอร์จะถูกเน้น (เช่นแตกต่างจากรายละเอียดอื่น ๆ ) ดังที่ระบุไว้ในคำถามเอกสารประกอบจะยังคงอยู่ในขั้นตอนการล็อคโดยมีซอร์สโค้ดขณะที่เคอร์เซอร์กระโดดข้ามซอร์สโค้ด ปุ่มลัดสามารถสลับระหว่าง "โหมดเอกสาร" และ "โหมดการพัฒนา" ข้อดีที่เป็นไปได้ ได้แก่ : รหัสต้นฉบับเพิ่มเติมและเอกสารเพิ่มเติมบนหน้าจอพร้อมกัน ความสามารถในการแก้ไขเอกสารเป็นอิสระจากซอร์สโค้ด (โดยไม่คำนึงถึงภาษา?) เขียนเอกสารและซอร์สโค้ดขนานโดยไม่มีข้อขัดแย้งผสาน เอกสารไฮเปอร์ลิงก์แบบเรียลไทม์พร้อมการจัดรูปแบบข้อความที่เหนือกว่า การแปลด้วยเครื่องเสมือนจริงแบบเรียลไทม์เป็นภาษาธรรมชาติที่แตกต่างกัน รหัสทุกบรรทัดสามารถเชื่อมโยงอย่างชัดเจนกับงานความต้องการทางธุรกิจและอื่น ๆ เอกสารสามารถประทับเวลาโดยอัตโนมัติเมื่อเขียนโค้ดแต่ละบรรทัด (ตัวชี้วัด) …

2
การสืบทอดบริบทเป็นเช่นที่แสดงโดยตัวอย่างเป็ดของ Head First Design Patterns ซึ่งไม่เกี่ยวข้องกับรูปแบบกลยุทธ์หรือไม่
ในHead First Design Patternsมันสอนรูปแบบกลยุทธ์โดยใช้ตัวอย่าง Duck ที่ subclasses ที่แตกต่างกันของ Duck สามารถกำหนดพฤติกรรมเฉพาะที่รันไทม์ จากความเข้าใจของฉันจุดประสงค์ของรูปแบบกลยุทธ์คือการเปลี่ยนพฤติกรรมของวัตถุเดี่ยวที่รันไทม์ แต่พวกเขากำลังใช้การสืบทอดของ Duck เพื่อเปลี่ยนพฤติกรรมของ Duck ชนิดต่างๆ ความสัมพันธ์กัน? การสืบทอดบริบทของเป็ดนั้นไม่เกี่ยวข้องกับรูปแบบกลยุทธ์หรือการเปลี่ยนแปลงประเภทเป็ดและการเปลี่ยนแปลงพฤติกรรมของพวกเขาเป็นเหตุผลที่ดีที่จะใช้รูปแบบกลยุทธ์หรือไม่ สถานการณ์ที่คุณต้องการเปลี่ยนแปลงทั้งสองอย่างนั้นเป็นเหตุผลที่ดีที่จะใช้รูปแบบกลยุทธ์หรือไม่ เหตุใดพวกเขาจึงรวมสิ่งนี้เป็นตัวอย่างรูปแบบกลยุทธ์? ตัวอย่างที่เรียบง่าย ฉันสามารถทำให้ตัวอย่างนี้ง่ายขึ้นโดยแค่มีคลาส Duck (ไม่มีคลาสที่ได้รับ) หรือไม่ จากนั้นเมื่อนำวัตถุเป็ดหนึ่งชิ้นมาใช้จะสามารถกำหนดพฤติกรรมที่แตกต่างกันตามสถานการณ์บางอย่างที่ไม่ได้ขึ้นอยู่กับประเภทวัตถุของตัวเอง ตัวอย่างเช่นการเปลี่ยนแปลง FlyBehavior ตามสภาพอากาศหรือการเปลี่ยนแปลง QuackBehavior ตามช่วงเวลาของวันหรือว่าเป็ดหิวแค่ไหน ฉันรู้ว่านี่จะเป็นการแก้ปัญหาที่แตกต่างจากในหนังสือ แต่สิ่งที่ฉันกำลังมองหาคือตัวอย่างรูปแบบกลยุทธ์ที่เกี่ยวข้องเพื่อถอยกลับ ตัวอย่างด้านบนของฉันจะเป็นรูปแบบกลยุทธ์ด้วยหรือไม่ แก้ไข: ผมเป็นคนที่ประสบความสำเร็จในการหาง่าย 2 ตัวอย่างรูปแบบกลยุทธ์ที่ปฏิบัติตามอย่างเคร่งครัดมากขึ้นที่จะเป็นรูปแบบเพียงกลยุทธ์โดยไม่ต้องมรดกบริบท: Hunter.javaและsolver.py

4
แบ็กเอนด์ devs วางโดยเรื่องราวของผู้ใช้
ฉันวางแผนที่จะแบ่งการพัฒนาแบ็กเอนด์เข้ากับเรื่องราวของผู้ใช้ในแนวตั้ง แต่คนที่แบ็กเอนด์ในทีมของเราเริ่มบ่นว่านี่ทำให้งานของพวกเขาล่องหน คำตอบของฉันคือ ในการวางแผนการวิ่งและทบทวนการประชุมเราหารืองานแบ็กเอนด์ต่อหน้าผู้มีส่วนได้ส่วนเสียเพื่อให้สามารถมองเห็นได้และ การรักษาคุณภาพในระหว่างโครงการจะส่งผลให้เริ่มช้ากว่าทีมอื่น ๆ แต่เราจะมีความเร็วคงที่ในระหว่างโครงการ และความเร็วจะปรากฏแก่ผู้มีส่วนได้เสียอย่างชัดเจน เขายังคงยืนยันที่จะมีเรื่องราวเช่น: "ในฐานะนักพัฒนาฉันต้องมีเลเยอร์โดเมนเพื่อให้ฉันสามารถสรุปทางตรรกะทางธุรกิจได้" ฉันจะแก้ปัญหาก่อนที่ทีมจะสร้างมลพิษได้อย่างไร สาเหตุของปัญหาคือฝ่ายบริหารของเราพิจารณางานแบ็กเอนด์อย่างเป็นระบบโดยมองไม่เห็นและเรียกผู้ปฏิบัติงานที่ได้รับการสนับสนุนหรือเงื่อนไขการดูหมิ่นอื่น ๆ
10 agile  scrum  team  user-story 

7
ตรวจสอบให้แน่ใจว่าส่วนหัวจะถูกรวมไว้อย่างชัดเจนในไฟล์ CPP
ฉันคิดว่าเป็นเรื่องดี#includeสำหรับส่วนหัวสำหรับประเภทใด ๆ ที่ใช้ในไฟล์ CPP โดยไม่คำนึงถึงสิ่งที่รวมอยู่ในไฟล์ HPP ดังนั้นฉันจึงอาจเป็นได้#include <string>ทั้ง HPP และ CPP แม้ว่าฉันจะสามารถรวบรวมได้หากฉันข้ามใน CPP ด้วยวิธีนี้ฉันไม่ต้องกังวลว่า HPP ของฉันจะใช้การประกาศล่วงหน้าหรือไม่ มีเครื่องมือใดที่สามารถบังคับใช้#includeรูปแบบการเข้ารหัสนี้ได้หรือไม่? ฉันควรบังคับใช้รูปแบบการเข้ารหัสนี้หรือไม่ เนื่องจากตัวประมวลผลล่วงหน้า / คอมไพเลอร์ไม่สนใจว่า#includeจะมาจาก HPP หรือ CPP ฉันจึงไม่ได้รับคำติชมถ้าฉันลืมทำตามสไตล์นี้

4
ใน MVC ถือว่าเป็นแนวปฏิบัติที่ดีที่จะมีฟังก์ชั่นส่วนตัวที่ไม่ใช่แอ็คชั่นในคลาสคอนโทรลเลอร์หรือไม่?
บางครั้งฟังก์ชั่นการกระทำในคลาสคอนโทรลเลอร์อาจมีขนาดใหญ่และน่ารังเกียจโดยมีโค้ดหลายบรรทัดเพื่อควบคุมการไหลของข้อมูลจาก Model ไปยังมุมมอง เมื่อถึงจุดหนึ่งฟังก์ชั่นขนาดใหญ่เหล่านี้จะสูญเสียการติดตามหลักการพื้นฐานของโค้ดที่ดีอย่างสมบูรณ์เช่นการทำสิ่งเดียวการเล็กการอ่านและการจัดการเป็นต้น มันจะถือว่าเป็นการปฏิบัติที่ดีที่จะแบ่งฟังก์ชั่นการทำงานขนาดใหญ่เหล่านี้ออกเป็นฟังก์ชั่นส่วนตัวที่เล็กลงในคลาสคอนโทรลเลอร์หรือหากความต้องการของการปรับให้เหมาะสมดังกล่าวหมายความว่าเราควรเพิ่มพวกมันในโมเดล? ฉันจะลงคะแนนให้ฟังก์ชั่นขนาดเล็กเป็นส่วนตัวในคอนโทรลเลอร์เพื่อให้พวกมันสัมพันธ์กับแอ็คชั่น แต่ฉันเคยได้ยินข้อโต้แย้งว่าผู้ควบคุมควรจะง่ายกว่าในขณะที่โมเดลสามารถมีขนาดใหญ่และเป็นก้อน และเพียงแค่สงสัยว่าอันไหนจะเป็นวิธีที่ต้องการมากที่สุด
10 php  code-quality  mvc 

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