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

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

2
การสื่อสารระหว่างคำสั่งซ้อน
ดูเหมือนจะมีวิธีการสื่อสารค่อนข้างน้อยระหว่างคำสั่ง สมมติว่าคุณมีคำสั่งซ้อนกันซึ่งคำสั่งภายในต้องสื่อสารบางสิ่งกับภายนอก (เช่นถูกเลือกโดยผู้ใช้) <outer> <inner></inner> <inner></inner> </outer> จนถึงตอนนี้ฉันมี 5 วิธีในการทำเช่นนี้ require: คำสั่งผู้ปกครอง innerสั่งสามารถต้องouterสั่งซึ่งสามารถเปิดเผยวิธีการบางอย่างเกี่ยวกับการควบคุมของตน ดังนั้นในinnerความหมาย require: '^outer', link: function(scope, iElement, iAttrs, outerController) { // This can be passed to ng-click in the template $scope.chosen = function() { outerController.chosen(something); } } และในouterตัวควบคุมของคำสั่ง: controller: function($scope) { this.chosen = function(something) { } } $emit …

21
“ การจ้างงานที่ดีที่สุดเท่านั้น” เป็นคำแนะนำที่ใช้งานได้จริงสำหรับการเขียนโปรแกรมประยุกต์เดสก์ท็อปปกติหรือไม่? [ปิด]
สำหรับพื้นหลังที่เรากำลังทำประยุกต์ทางด้านวิศวกรรมสก์ท็อปกับ AutoCAD เช่น UI เป็นสิ่งที่คล้ายกับETABS สิ่งหนึ่งที่ทำให้ฉันเป็นโรคจิตจริงๆคือมีความต้องการจ้างนักพัฒนาที่ดีที่สุดหรือไม่? สำหรับผู้เริ่มต้นเรากำลังประสบกับความยากลำบากอย่างมากในการสรรหา; เรซูเม่ที่เราเห็นส่วนใหญ่กำลังทำแอพ CRUD อย่างง่าย ๆ หรือการปรับแต่ง SharePoint ซึ่งฉันไม่คิดว่าเกี่ยวข้องกับการเขียนโปรแกรมฮาร์ดคอร์จำนวนมาก แม้แต่คนที่เราต้องการสัมภาษณ์ส่วนใหญ่ไม่สามารถเรียงลำดับฟีโบนักชีและค้นหาไบนารี่ได้ง่ายและเรามีความสุภาพพอที่จะให้คำแนะนำและสะกดปัญหาอย่างชัดเจนเพื่อให้ผู้สมัครไม่ต้องค้นหาพจนานุกรมเพื่อตรวจสอบ "ลำดับฟีโบนักชี" หมายความว่าอะไร สิ่งนี้ทำให้ฉันคิดว่า: ใช่เราต้องการระดับความสามารถในการเขียนโปรแกรมระดับหนึ่งเมื่อทำสิ่งที่ใช้ในการคำนวณเชิงเรขาคณิต / โปรแกรมเชิงเส้นและเราต้องการระดับความสามารถในการเขียนโปรแกรมระดับหนึ่งเมื่อออกแบบสถาปัตยกรรมซอฟต์แวร์ / หรือตัดสินใจว่าจะใช้ซอฟต์แวร์รูปแบบใด รหัสจำนวนมากของเราเป็นเพียงรหัสการประปา (ฉันคิดว่า) ซึ่งสามารถทำได้โดยคนที่มีความคุ้นเคยกับการเขียนโปรแกรม เนื่องจากเราต้องการความสามารถด้านการเขียนโปรแกรมในขณะนี้และเนื่องจากการจ้างนักพัฒนาซุปเปอร์สตาร์นั้นยากมากฉันต้องการลดมาตรฐานของฉันและจ้างเฉพาะผู้ที่ดีพอ ๆ กันซึ่งขัดแย้งกับสิ่งที่โจเอลบอกไว้ คุณคิดอย่างไร? แก้ไข: คุณไม่จำเป็นต้องเขียนไลบรารีการคำนวณเชิงเรขาคณิต / การโปรแกรมเชิงเส้นทั้งหมดอีกครั้ง สิ่งที่คุณต้องทำเท่าที่แอพพลิเคชั่นของฉันเกี่ยวข้องคือการรู้วิธีการแก้ปัญหาด้วยการเขียนโปรแกรมเชิงเรขาคณิต / เชิงเส้นที่เหมาะสมและรู้ว่าจะใช้ไลบรารีที่มีอยู่เมื่อใด ดังนั้นจึงไม่ยากอย่างที่คิด
61 hiring 

6
ความแตกต่างระหว่างระดับบริการและระดับผู้ช่วย [ปิด]
ฉันต้องการที่จะรู้ว่าสิ่งที่แตกต่างชั้นบริการจากระดับยูทิลิตี้หรือชั้นผู้ช่วย? ชั้นเรียนที่มีวิธีการพื้นฐานเรียก dao เป็นบริการหรือไม่ การใช้คลาส Helper ไม่เป็นการละเมิด SRP หรือไม่

10
เราควรทดสอบวิธีการทั้งหมดของเราหรือไม่?
ดังนั้นวันนี้ฉันได้พูดคุยกับเพื่อนร่วมทีมเกี่ยวกับการทดสอบหน่วย สิ่งทั้งหมดเริ่มต้นขึ้นเมื่อเขาถามฉันว่า "เฮ้การทดสอบของชั้นนั้นอยู่ที่ไหนฉันเห็นเพียงอันเดียว" ทั้งคลาสนั้นเป็นผู้จัดการ (หรือบริการถ้าคุณต้องการเรียกมันอย่างนั้น) และวิธีการเกือบทั้งหมดเป็นเพียงการมอบหมายสิ่งของให้กับ DAO ดังนั้นมันจึงคล้ายกับ: SomeClass getSomething(parameters) { return myDao.findSomethingBySomething(parameters); } ประเภทของแผ่นสำเร็จรูปที่ไม่มีตรรกะ (หรืออย่างน้อยฉันไม่ได้พิจารณาการมอบหมายอย่างง่ายเช่นตรรกะ) แต่เป็นแผ่นที่มีประโยชน์ในกรณีส่วนใหญ่ (การแยกชั้น ฯลฯ ) และเรามีการอภิปรายค่อนข้างยาวว่าควรทดสอบยูนิทหรือไม่ (ฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึงว่าฉันทำการทดสอบยูนิทอย่างเต็มที่) ข้อโต้แย้งหลักของเขาคือว่าไม่ใช่ TDD (ชัดเจน) และบางคนอาจต้องการดูการทดสอบเพื่อตรวจสอบว่าวิธีการนี้ทำอะไร (ฉันไม่ทราบว่ามันจะชัดเจนมากขึ้น) หรือในอนาคตบางคนอาจต้องการเปลี่ยน การนำไปใช้งานและเพิ่มตรรกะ (หรือเช่น "ใด ๆ ") ใหม่ให้กับตรรกะนั้น (ซึ่งในกรณีนี้ฉันคิดว่าบางคนควรทดสอบตรรกะนั้น) นี่ทำให้ฉันคิดว่า เราควรมุ่งมั่นเพื่อให้ครอบคลุมการทดสอบมากที่สุดหรือไม่? หรือเป็นเพียงศิลปะเพื่อประโยชน์ของงานศิลปะในเวลานั้น? ฉันไม่เห็นเหตุผลใด ๆ ที่อยู่เบื้องหลังการทดสอบสิ่งต่าง ๆ เช่น: getters และ setters (ยกเว้นว่าพวกเขามีเหตุผลบางอย่างในตัวพวกเขา) รหัส "สำเร็จรูป" เห็นได้ชัดว่าการทดสอบวิธีการดังกล่าว …

10
การใช้คอมไพเลอร์ C ++ เป็นเพียงการปฏิบัติที่เกินความจำเป็นหรือไม่
ดังนั้นฉันจึงทำงานเกี่ยวกับการออกแบบซอฟต์แวร์โดยใช้ C สำหรับโปรเซสเซอร์บางตัว ชุดเครื่องมือประกอบด้วยความสามารถในการคอมไพล์ C และ C ++ สำหรับสิ่งที่ฉันทำไม่มีการจัดสรรหน่วยความจำแบบไดนามิกในสภาพแวดล้อมนี้และโปรแกรมโดยรวมค่อนข้างง่าย ไม่ต้องพูดถึงว่าอุปกรณ์มีพลังประมวลผลหรือทรัพยากรเกือบไม่ ไม่จำเป็นต้องใช้ C ++ ใด ๆ เลย ที่ถูกกล่าวว่ามีไม่กี่สถานที่ที่ฉันทำฟังก์ชั่นมากไป (คุณสมบัติของ C ++) ฉันต้องการส่งข้อมูลประเภทต่าง ๆ และไม่รู้สึกอยากใช้printfการจัดรูปแบบสไตล์กับ%sอาร์กิวเมนต์ (หรืออะไรก็ตาม) บางประเภท ฉันเคยเห็นบางคนที่ไม่สามารถเข้าถึงคอมไพเลอร์ C ++ ที่ทำprintfสิ่งนี้ได้ แต่ในกรณีของฉันรองรับ C ++ พร้อมใช้งาน ตอนนี้ฉันแน่ใจว่าฉันอาจได้รับคำถามว่าทำไมฉันต้องโอเวอร์โหลดฟังก์ชันเพื่อเริ่มต้นด้วย ดังนั้นฉันจะพยายามตอบตอนนี้ ฉันต้องส่งข้อมูลประเภทต่าง ๆ ออกจากพอร์ตอนุกรมดังนั้นฉันจึงมีข้อมูลเกินจำนวนเล็กน้อยที่ส่งประเภทข้อมูลต่อไปนี้: unsigned char* const char* unsigned char const char ฉันแค่ไม่อยากมีวิธีการหนึ่งที่จัดการกับสิ่งเหล่านี้ทั้งหมด เมื่อฉันเรียกใช้ฟังก์ชั่นที่ฉันต้องการให้มันส่งออกพอร์ตอนุกรมฉันไม่มีทรัพยากรมากมายดังนั้นฉันจึงไม่ต้องการที่จะทำอะไรเลยนอกจากการส่งสัญญาณของฉัน มีคนอื่นเห็นโปรแกรมของฉันและถามฉันว่า "ทำไมคุณถึงใช้ไฟล์ …

7
ควรตรวจสอบข้อผิดพลาดเล็ก ๆ น้อย ๆ ใน C หรือไม่?
ในฐานะโปรแกรมเมอร์ที่ดีคนหนึ่งควรเขียนโค้ดที่มีประสิทธิภาพซึ่งจะจัดการกับผลลัพธ์ทุกรายการของโปรแกรมของเขา อย่างไรก็ตามฟังก์ชันเกือบทั้งหมดจากไลบรารี C จะส่งคืนค่า 0 หรือ -1 หรือ NULL เมื่อมีข้อผิดพลาด บางครั้งก็ชัดเจนว่าจำเป็นต้องมีการตรวจสอบข้อผิดพลาดเช่นเมื่อคุณพยายามเปิดไฟล์ แต่ฉันมักจะละเลยการตรวจสอบข้อผิดพลาดในฟังก์ชั่นเช่นprintfหรือmallocเพราะฉันไม่รู้สึกจำเป็น if(fprintf(stderr, "%s", errMsg) < 0){ perror("An error occurred while displaying the previous error."); exit(1); } เป็นการดีหรือไม่ที่จะละเว้นข้อผิดพลาดบางอย่างหรือมีวิธีที่ดีกว่าในการจัดการข้อผิดพลาดทั้งหมดหรือไม่
60 c  error-handling 

4
มันจะดีกว่าถ้าจะเรียกฟังก์ชั่นที่ไม่มีผลกระทบ ณ จุดนั้นถ้ามันปรับปรุงความชัดเจนของโค้ด?
ฉันมีสามมุมมองในโปรแกรมของฉัน (แอพ iOS) มีเพียงหนึ่งรายการเท่านั้นที่ใช้งานในเวลาเดียวกันดังนั้นฉันจึงปิดการมองเห็นสำหรับพวกเขาสองคนและสลับการมองเห็นเมื่อผู้ใช้กดปุ่ม มุมมองจะเริ่มต้นเป็นมองเห็นได้ดังนั้นฉันตั้งค่าการมองเห็นออกในรหัสก่อนที่จะแสดงมุมมองหลัก ที่ฉันสามารถทำได้ [view1 setAlpha:0.0f]; [view2 setAlpha:0.0f]; สำหรับมุมมองสองมุมมอง แต่ตอนนี้มุมมองที่สาม (มุมมองที่ควรมองเห็นเมื่อเริ่มต้นแอพ) ไม่ได้ถูกระบุ ฉันใส่ [view3 setAlpha:1.0f]; หลังจากสองคนแรกเพราะฉันคิดว่ามันชัดเจนว่ามีสามมุมมองจริงไม่ใช่สองอย่างที่คิดเมื่อเห็นรหัส โปรแกรมเมอร์คนอื่นทำอย่างไร มันเป็นการตั้งค่าอย่างหมดจดหรือมีการประชุมบ้างไหม? หากการโทรนั้นหนักมากมันจะดีกว่าที่จะไม่โทรเมื่อมันไม่จำเป็น แต่ฉันสงสัยเกี่ยวกับสิ่งเล็ก ๆ น้อย ๆ เช่นแบบของฉัน

11
ฉันควรกำหนดความสัมพันธ์ระหว่างตารางในฐานข้อมูลหรือเพียงแค่ในรหัส?
จากประสบการณ์ของฉันหลายโครงการที่ฉันเคยอ่านในอดีตไม่ได้มีคำจำกัดความความสัมพันธ์ในฐานข้อมูล แต่พวกเขาเพียงกำหนดไว้ในซอร์สโค้ด ดังนั้นฉันสงสัยว่าอะไรคือข้อดี / ข้อเสียของการกำหนดความสัมพันธ์ระหว่างตารางในฐานข้อมูลและในซอร์สโค้ด? และคำถามที่กว้างขึ้นเกี่ยวกับคุณสมบัติขั้นสูงอื่น ๆ ในฐานข้อมูลที่ทันสมัยเช่นน้ำตก, ทริกเกอร์, ขั้นตอน ... มีบางจุดในความคิดของฉัน: ในฐานข้อมูล: แก้ไขข้อมูลจากการออกแบบ ป้องกันข้อผิดพลาดของแอปพลิเคชันซึ่งอาจทำให้ข้อมูลไม่ถูกต้อง ลดเครือข่ายไปกลับแอปพลิเคชันเมื่อทำการแทรก / อัปเดตข้อมูลเนื่องจากแอปพลิเคชันต้องทำแบบสอบถามเพิ่มเติมเพื่อตรวจสอบความถูกต้องของข้อมูล ในรหัสที่มา: ยืดหยุ่นมากขึ้น ดีกว่าเมื่อขยายไปยังหลายฐานข้อมูลเนื่องจากบางครั้งความสัมพันธ์สามารถข้ามฐานข้อมูลได้ ควบคุมความสมบูรณ์ของข้อมูลได้มากขึ้น ฐานข้อมูลไม่จำเป็นต้องตรวจสอบทุกครั้งที่แอปพลิเคชันแก้ไขข้อมูล (ความซับซ้อนสามารถเป็น O (n) หรือ O (n log n) (?)) แต่จะมอบให้กับแอปพลิเคชันแทน และฉันคิดว่าการจัดการความสมบูรณ์ของข้อมูลในแอปพลิเคชันจะทำให้เกิดข้อความแสดงข้อผิดพลาดมากกว่าการใช้ฐานข้อมูล เช่น: เมื่อคุณสร้างเซิร์ฟเวอร์ API หากคุณกำหนดความสัมพันธ์ในฐานข้อมูลและมีบางอย่างผิดปกติ (เช่นไม่มีเอนทิตีที่อ้างอิง) คุณจะได้รับ SQL Exception พร้อมข้อความ วิธีที่ง่ายคือการคืน 500 ให้กับลูกค้าว่ามีข้อผิดพลาด "เซิร์ฟเวอร์ภายใน" และลูกค้าจะไม่ทราบว่าเกิดอะไรขึ้น หรือเซิร์ฟเวอร์สามารถแยกวิเคราะห์ข้อความเพื่อหาว่ามีอะไรผิดปกติซึ่งเป็นวิธีที่น่าเกลียดและผิดพลาดในความคิดของฉัน หากคุณปล่อยให้แอปพลิเคชันจัดการกับสิ่งนี้ …

14
เราสามารถสร้างข้อความทั่วไปเกี่ยวกับประสิทธิภาพของการแปลรหัสและการแปลรหัสได้หรือไม่?
ฉันกำลังเปรียบเทียบสองเทคโนโลยีเพื่อให้ได้คำแนะนำที่ บริษัท ควรใช้ รหัสของเทคโนโลยี A ถูกตีความในขณะที่รหัสเทคโนโลยี B ถูกคอมไพล์ไปยังรหัสเครื่อง ในการเปรียบเทียบของฉันฉันระบุว่าเทคโนโลยี B โดยทั่วไปจะมีประสิทธิภาพที่ดีขึ้นเนื่องจากไม่มีค่าใช้จ่ายเพิ่มเติมของกระบวนการตีความ ฉันยังระบุด้วยว่าเนื่องจากโปรแกรมสามารถเขียนได้หลายวิธีจึงเป็นไปได้ที่โปรแกรมที่เขียนในเทคโนโลยี A อาจมีประสิทธิภาพสูงกว่าที่เขียนในเทคโนโลยี B. เมื่อฉันส่งรายงานนี้เพื่อการตรวจทานผู้ตรวจสอบระบุว่าฉันไม่ได้ให้เหตุผลที่ชัดเจนว่าทำไมค่าใช้จ่ายในการตีความจะมีขนาดใหญ่พอที่เราจะสรุปได้ว่าประสิทธิภาพของเทคโนโลยี B จะดีกว่า ดังนั้นคำถามของฉันคือเราไม่สามารถพูดอะไรเกี่ยวกับประสิทธิภาพของเทคโนโลยีที่รวบรวม / ตีความ? หากเราสามารถพูดได้ว่าการคอมไพล์โดยทั่วไปเร็วกว่าการตีความแล้วฉันจะโน้มน้าวผู้ตรวจสอบประเด็นของฉันได้อย่างไร

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

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

8
การปรับเปลี่ยนพารามิเตอร์ขาเข้าเป็น antipattern หรือไม่? [ปิด]
ฉันกำลังเขียนโปรแกรมใน Java และฉันมักจะทำเช่นนี้: public OtherObject MyObject2OtherObject(MyObject mo){ ... Do the conversion return otherObject; } ในที่ทำงานใหม่รูปแบบคือ: public void MyObject2OtherObject(MyObject mo, OtherObject oo){ ... Do the conversion } สำหรับฉันมันส่งกลิ่นนิดหน่อยเพราะฉันคุ้นเคยกับการไม่เปลี่ยนพารามิเตอร์ขาเข้า การแก้ไขพารามิเตอร์ขาเข้านี้เป็น antipattern หรือไม่ มันมีข้อบกพร่องร้ายแรงบ้างไหม?

8
การเข้ารหัสฝั่งไคลเอ็นต์: จะป้องกันการใช้งานที่ประสงค์ร้ายได้อย่างไร?
ในช่วงไม่กี่ปีที่ผ่านมาแนวโน้มของแอปพลิเคชันฝั่งไคลเอ็นต์ (เบราว์เซอร์) ได้ถูกถอดออกจริงๆ สำหรับโครงการล่าสุดของฉันฉันได้ตัดสินใจที่จะลองและย้ายไปตามเวลาและเขียนแอปพลิเคชันฝั่งไคลเอ็นต์ ส่วนหนึ่งของแอปพลิเคชันนี้เกี่ยวข้องกับการส่งอีเมลธุรกรรมไปยังผู้ใช้ (ตัวอย่างเช่นตรวจสอบความถูกต้องลงทะเบียนอีเมลรีเซ็ตรหัสผ่าน ฯลฯ ) ฉันใช้ API บุคคลที่สามเพื่อส่งอีเมล โดยปกติฉันจะให้แอปพลิเคชันของฉันทำงานบนเซิร์ฟเวอร์ ฉันจะเรียก API ของบุคคลที่สามจากรหัสบนเซิร์ฟเวอร์ของฉัน การเรียกใช้แอปพลิเคชันฝั่งไคลเอ็นต์หมายความว่าสิ่งนี้จะต้องเกิดขึ้นบนเบราว์เซอร์ของผู้ใช้ API บุคคลที่สามจัดเตรียมไฟล์ JavaScript ที่จำเป็นเพื่อให้บรรลุสิ่งนี้ ปัญหาที่เห็นได้ชัดแรกที่ฉันเห็นคือฉันต้องใช้คีย์ API ปกติแล้วนี่จะถูกเก็บไว้อย่างปลอดภัยบนเซิร์ฟเวอร์ของฉัน แต่ตอนนี้สมมุติว่าฉันจะต้องให้คีย์นี้แก่เบราว์เซอร์ไคลเอ็นต์ สมมติว่าฉันสามารถแก้ไขปัญหานี้ได้ปัญหาต่อไปคือสิ่งที่หยุดผู้ใช้ที่มีความชำนาญด้านเทคโนโลยีโหลดเครื่องมือผู้พัฒนา JavaScript บนเบราว์เซอร์และใช้อีเมล API อย่างไรก็ตามพวกเขาชอบแทนที่จะบอกว่าปฏิบัติตามกฎใด ๆ ที่ฉันตั้งไว้ในแอปพลิเคชัน . ฉันเดาคำถามทั่วไปของฉันคือ - เราจะป้องกันแอปพลิเคชันฝั่งไคลเอ็นต์ได้อย่างไร

3
ทำไมเฟรมเวิร์ก / ไลบรารี JavaScript มีฟังก์ชั่นที่มีอยู่แล้วในจาวาสคริปต์แท้?
ฉันสงสัยว่าทำไมเฟรมเวิร์ก / ห้องสมุดมีผู้ช่วยเหลือเป็นของตัวเอง ลองทำjQueryและAngularJSกัน พวกเขามีeachฟังก์ชั่นตัววนซ้ำของตัวเอง: jQuery.each () angular.forEach () Array.prototype.forEachแต่เรามี ในทำนองเดียวกัน jQuery.parseJSON () angular.fromJson () แต่เรามีJSON.parse()ฟังก์ชั่นใน JavaScript วานิลลา

12
มีเหตุผลใดบ้างในการสร้างเอกสารรหัสโดยอัตโนมัติ [ปิด]
การสร้างเอกสารอัตโนมัติสามารถทำได้ด้วยเครื่องมือหลากหลาย GhostDoc เป็นหนึ่งในสิ่งที่โดดเด่นมากขึ้น อย่างไรก็ตามตามคำจำกัดความทุกสิ่งที่สร้างนั้นซ้ำซ้อน มันจะดูที่ชื่อของวิธีการเรียน ฯลฯ และเอาท์พุทภาษาอังกฤษที่อาจอธิบายพวกเขาอย่างละเอียดมากขึ้น ในกรณีที่ดีที่สุดมันเป็นสิ่งที่ผู้อ่านสามารถทำได้ในหัวของพวกเขา (ตัวอย่างจากที่นี่ ): /// <summary> /// Initializes a new instance of the <see cref="Person"/> class. /// </summary> public Person() ... ในที่สุดมันสามารถสร้างเอกสารแปลกประหลาดที่ทำให้เข้าใจผิดในความพยายามที่จะเข้าใจความหมายของชื่อ: /// <summary> /// Riches the text selection changed. /// </summary> /// <param name="richTextBox">The rich text box.</param> private void RichTextSelection_Changed(System.Windows.Controls.RichTextBox richTextBox) ... มันดูเหมือนว่าทัศนคติที่มี …

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