คำถามติดแท็ก design

คำถามเกี่ยวกับการแก้ปัญหาและการวางแผนแก้ปัญหาผ่านการออกแบบซอฟต์แวร์

1
การห่อรหัสบุคคลที่สามเป็นทางออกเดียวในการทดสอบผู้บริโภคหรือไม่
ฉันทำการทดสอบหน่วยและในชั้นเรียนของฉันฉันต้องส่งจดหมายจากวิธีใดวิธีหนึ่งดังนั้นการใช้การฉีดคอนสตรัคเตอร์ฉันฉีดอินสแตนซ์ของZend_Mailคลาสที่อยู่ในกรอบ Zend ตอนนี้บางคนยืนยันว่าถ้าห้องสมุดมีความมั่นคงเพียงพอและจะไม่เปลี่ยนแปลงบ่อยครั้งก็ไม่จำเป็นต้องห่อมัน ดังนั้นสมมติว่าZend_Mailมันเสถียรและจะไม่เปลี่ยนแปลงและมันก็เหมาะกับความต้องการของฉันทั้งหมดแล้วฉันจะไม่ต้องการเสื้อคลุม ตอนนี้มาดูคลาสของฉันLoggerที่ขึ้นอยู่กับZend_Mail: class Logger{ private $mailer; function __construct(Zend_Mail $mail){ $this->mail=$mail; } function toBeTestedFunction(){ //Some code $this->mail->setTo('some value'); $this->mail->setSubject('some value'); $this->mail->setBody('some value'); $this->mail->send(); //Some } } อย่างไรก็ตามการทดสอบหน่วยต้องการให้ฉันทดสอบองค์ประกอบหนึ่งครั้งดังนั้นฉันต้องจำลองZend_Mailชั้นเรียน นอกจากนี้ฉันกำลังละเมิดหลักการการพึ่งพาการพึ่งพาเนื่องจากLoggerชั้นเรียนของฉันตอนนี้ขึ้นอยู่กับการตัดสินใจที่ไม่เป็นนามธรรม ตอนนี้ฉันจะทดสอบLoggerการแยกโดยไม่ต้องห่อได้Zend_Mailอย่างไร! รหัสอยู่ใน PHP แต่คำตอบไม่จำเป็นต้องเป็น นี่เป็นปัญหาการออกแบบมากกว่าฟีเจอร์เฉพาะภาษา

4
อินเทอร์เฟซควรขยาย (และในการทำสืบทอดวิธีของ) อินเทอร์เฟซอื่น ๆ
แม้ว่านี่จะเป็นคำถามทั่วไป แต่ก็เป็นปัญหาเฉพาะที่ฉันกำลังประสบอยู่ ขณะนี้ฉันมีส่วนต่อประสานที่ระบุในโซลูชันของฉันที่เรียกว่า public interface IContextProvider { IDataContext { get; set; } IAreaContext { get; set; } } อินเทอร์เฟซนี้มักใช้ตลอดโปรแกรมและด้วยเหตุนี้ฉันจึงเข้าถึงวัตถุที่ต้องการได้ง่าย อย่างไรก็ตามในส่วนของโปรแกรมของฉันค่อนข้างต่ำฉันต้องการเข้าถึงคลาสอื่นที่จะใช้IAreaContextและดำเนินการบางอย่างกับมัน ดังนั้นฉันจึงสร้างส่วนต่อประสานจากโรงงานอีกอันเพื่อสร้างสิ่งนี้ที่เรียกว่า: public interface IEventContextFactory { IEventContext CreateEventContext(int eventId); } ฉันมีคลาสที่ใช้IContextProviderและฉีดโดยใช้ NinJect ปัญหาที่ฉันมีคือพื้นที่ที่ฉันต้องการใช้IEventContextFactoryนี้มีการเข้าถึงIContextProviderเท่านั้นและตัวเองใช้คลาสอื่นซึ่งจะต้องใช้อินเทอร์เฟซใหม่นี้ ฉันไม่ต้องการให้อินสแตนซ์ของการใช้งานIEventContextFactoryในระดับต่ำและต้องการทำงานกับอินเตอร์เฟสIEventContextFactoryตลอด อย่างไรก็ตามฉันยังไม่ต้องการที่จะฉีดพารามิเตอร์อื่นผ่านตัวสร้างเพียงเพื่อให้มันผ่านไปยังชั้นเรียนที่ต้องการมันคือ // example of problem public class MyClass { public MyClass(IContextProvider context, IEventContextFactory event) { _context = …
13 c#  design  interfaces 

4
ส่วนย่อยของตัวอักษรละตินที่มองเห็นและคลุมเครือ
ลองนึกภาพคุณให้บัตรกับรหัส "5SBDO0" กับใครสักคนในนั้น ในแบบอักษรบางตัวอักษร "S" เป็นการยากที่จะแยกความแตกต่างจากตัวเลขห้าอย่างเห็นได้ชัด (เช่นเดียวกับเลขศูนย์และตัวอักษร "O") การอ่านรหัสออกมาดัง ๆ อาจเป็นเรื่องยากที่จะแยกความแตกต่าง "B" จาก "D" โดยจำเป็นต้องพูดว่า "B เหมือนในเด็กผู้ชาย" "D เหมือนสุนัข" หรือใช้ " สัทอักษร " แทน อะไรคือเซตย่อยของตัวอักษรและตัวเลขที่ใหญ่ที่สุดซึ่งโดยส่วนใหญ่แล้วทั้งสองจะดูคลุมเครือด้วยสายตาและฟังดูคลุมเครือเมื่ออ่านออกเสียง? พื้นหลัง: เราต้องการสร้างสตริงสั้น ๆ ที่สามารถเข้ารหัสค่าได้มากเท่าที่จะเป็นไปได้ในขณะที่ยังสื่อสารได้ง่าย ลองนึกภาพคุณมีสตริง 6 ตัวอักษร "123456" ในฐาน 10 นี้สามารถเข้ารหัสค่า10 ^ 6 ในเลขฐานสิบหก "1B23DF" คุณสามารถเข้ารหัสค่า16 ^ 6 ในจำนวนอักขระที่เท่ากัน แต่สามารถฟังดูคลุมเครือเมื่ออ่านออกเสียง ("B" กับ "D") เช่นเดียวกันกับสตริง N …
13 design 

8
หลักการความรับผิดชอบเดี่ยว - ฉันใช้มากเกินไปหรือไม่
สำหรับการอ้างอิง - http://en.wikipedia.org/wiki/Single_responsibility_principle ฉันมีสถานการณ์จำลองการทดสอบซึ่งในโมดูลของแอปพลิเคชันหนึ่งรับผิดชอบในการสร้างรายการบัญชีแยกประเภท มีงานพื้นฐานสามประการที่สามารถดำเนินการได้ - ดูรายการบัญชีแยกประเภทที่มีอยู่ในรูปแบบตาราง สร้างรายการบัญชีแยกประเภทใหม่โดยใช้ปุ่มสร้าง คลิกที่รายการบัญชีแยกประเภทในตาราง (กล่าวถึงในตัวชี้แรก) และดูรายละเอียดในหน้าถัดไป คุณสามารถลบรายการบัญชีแยกประเภทในหน้านี้ (มีการดำเนินการ / การตรวจสอบเพิ่มเติมอีกสองสามครั้งในแต่ละหน้า แต่เพื่อความกระชับฉันจะ จำกัด เฉพาะสิ่งนี้ ดังนั้นฉันตัดสินใจที่จะสร้างสามชั้นที่แตกต่างกัน - LedgerLandingPage CreateNewLedgerEntryPage ViewLedgerEntryPage คลาสเหล่านี้มีบริการที่สามารถทำได้ในหน้าเหล่านั้นและการทดสอบซีลีเนียมใช้คลาสเหล่านี้เพื่อนำแอปพลิเคชันไปสู่สถานะที่ฉันสามารถยืนยันได้ เมื่อฉันได้รับการตรวจสอบกับเพื่อนร่วมงานของฉันแล้วเขาก็ whelmed มากกว่าและขอให้ฉันทำหนึ่งชั้นเดียวสำหรับทุกคน แม้ว่าฉันจะรู้สึกว่าการออกแบบของฉันสะอาดมาก แต่ฉันก็ยังสงสัยว่าถ้าฉันใช้หลักการความรับผิดชอบเดี่ยวมากเกินไป

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

3
การประยุกต์ใช้หลักการ SOLID
ฉันค่อนข้างใหม่กับหลักการออกแบบSOLID ฉันเข้าใจถึงสาเหตุและผลประโยชน์ของพวกเขา แต่ยังไม่สามารถนำไปใช้กับโครงการขนาดเล็กที่ฉันต้องการสร้างโครงสร้างใหม่ให้เป็นการฝึกปฏิบัติเพื่อใช้หลักการ SOLID ฉันรู้ว่าไม่จำเป็นต้องเปลี่ยนแอปพลิเคชันที่ทำงานได้อย่างสมบูรณ์แบบ แต่ฉันต้องการปรับโครงสร้างใหม่เพื่อให้ได้รับประสบการณ์การออกแบบสำหรับโครงการในอนาคต แอปพลิเคชั่นมีงานดังต่อไปนี้ (จริง ๆ แล้วมากกว่านั้น แต่ให้ง่าย): มันต้องอ่านไฟล์ XML ซึ่งมีฐานข้อมูลตาราง / คอลัมน์ / ดูคำนิยาม ฯลฯ และสร้างไฟล์ SQL ที่สามารถใช้เพื่อสร้าง สกีมาฐานข้อมูล ORACLE (หมายเหตุ: โปรดอย่าอภิปรายว่าทำไมฉันถึงต้องการหรือทำไมฉันถึงไม่ใช้ XSLT และอื่น ๆ มีเหตุผลหลายประการ แต่มันไม่ใช่หัวข้อ) เป็นการเริ่มต้นฉันเลือกดูเฉพาะตารางและข้อ จำกัด หากคุณไม่สนใจคอลัมน์คุณสามารถระบุวิธีต่อไปนี้: ข้อ จำกัด เป็นส่วนหนึ่งของตาราง (หรือมากกว่าอย่างแม่นยำส่วนหนึ่งของคำสั่ง CREATE TABLE) และข้อ จำกัด อาจอ้างอิงตารางอื่น ก่อนอื่นฉันจะอธิบายว่าแอปพลิเคชันมีลักษณะอย่างไรในตอนนี้ (ไม่ได้ใช้ SOLID): ในขณะนี้แอปพลิเคชันมีคลาส "ตาราง" ซึ่งมีรายการตัวชี้ถึงข้อ จำกัด …

4
มีข้อยกเว้นในการจัดการกับปัญหาการตัดขวางหรือไม่?
ฉันไม่เห็นความแตกต่างระหว่างข้อกังวลของการจัดการข้อยกเว้นและการเข้าสู่ระบบที่ทั้งคู่เป็นข้อกังวลตัดขวาง คุณคิดอย่างไร? ไม่ควรจัดการแยกต่างหากด้วยตัวเองแทนที่จะสอดแทรกด้วยตรรกะหลักที่วิธีการใช้งานอยู่? แก้ไข : สิ่งที่ฉันพยายามจะพูดก็คือในความคิดของฉันการใช้วิธีการควรมีตรรกะสำหรับเส้นทางที่ประสบความสำเร็จของการดำเนินการและข้อยกเว้นควรได้รับการจัดการที่อื่น นี่ไม่ใช่ข้อยกเว้นเกี่ยวกับการตรวจสอบ / ไม่ได้ตรวจสอบ ตัวอย่างเช่นภาษาอาจจัดการกับข้อยกเว้นในวิธีการตรวจสอบอย่างสมบูรณ์โดยใช้โครงสร้างดังนี้: class FileReader { public String readFile(String path) { // implement the reading logic, avoid exception handling } } handler FileReader { handle String readFile(String path) { when (IOException joe) { // somehow access the FileInputStram and close it } } …

3
การพึ่งพาการสืบค้นแบบ Parametrized เป็นวิธีเดียวที่จะป้องกันการฉีด SQL หรือไม่
สิ่งที่ฉันได้เห็นจากการโจมตีด้วยการฉีด SQL ดูเหมือนว่าจะแนะนำว่าการสืบค้นแบบ parametrized โดยเฉพาะอย่างยิ่งในขั้นตอนการจัดเก็บเป็นวิธีเดียวที่จะป้องกันการโจมตีดังกล่าว ในขณะที่ฉันกำลังทำงาน (ย้อนกลับไปในยุคมืด) ขั้นตอนการจัดเก็บถูกมองว่าเป็นการปฏิบัติที่ไม่ดีส่วนใหญ่เป็นเพราะพวกเขาเห็นว่าบำรุงรักษาได้น้อยลง ทดสอบได้น้อยลง คู่อย่างมาก และล็อคระบบเป็นผู้ขายรายเดียว ( คำถามนี้ครอบคลุมเหตุผลอื่น ๆ ) แม้ว่าเมื่อฉันกำลังทำงานอยู่โครงการต่าง ๆ แทบไม่รู้ตัวถึงความเป็นไปได้ของการโจมตีดังกล่าว มีการนำกฎต่างๆมาใช้เพื่อรักษาความปลอดภัยของฐานข้อมูลต่อการทุจริตในหลาย ๆ ประเภท กฎเหล่านี้สามารถสรุปได้ดังนี้: ไม่มีไคลเอ็นต์ / แอปพลิเคชันเข้าถึงตารางฐานข้อมูลโดยตรง การเข้าถึงตารางทั้งหมดทั้งหมดผ่านมุมมอง (และการอัปเดตทั้งหมดไปยังตารางฐานถูกทำผ่านทริกเกอร์) รายการข้อมูลทั้งหมดมีโดเมนที่ระบุ ไม่มีรายการข้อมูลที่ได้รับอนุญาตให้เป็นโมฆะ - นี่เป็นนัยที่ DBAs บดฟันของพวกเขาในบางครั้ง; แต่ถูกบังคับใช้ บทบาทและการอนุญาตได้รับการตั้งค่าอย่างเหมาะสม - ตัวอย่างเช่นบทบาทที่ถูก จำกัด ให้สิทธิ์ในการดูข้อมูลเท่านั้น ดังนั้นชุดของกฎ (บังคับ) เช่นนี้ (แม้ว่าไม่จำเป็นต้องเป็นชุดนี้โดยเฉพาะ) เป็นทางเลือกที่เหมาะสมในการค้นหาแบบ parametrized ในการป้องกันการโจมตี SQL injection? ถ้าไม่ทำไมล่ะ สามารถรักษาความปลอดภัยฐานข้อมูลจากการโจมตีดังกล่าวด้วยฐานข้อมูล …

7
แนวทางการพัฒนา: อินเทอร์เฟซผู้ใช้ในหรือโมเดลของโดเมน?
ในขณะที่ฉันไม่เคยส่งมอบอะไรเลยโดยใช้ Smalltalk เวลาสั้น ๆ ที่ฉันเล่นด้วยมันทิ้งร่องรอยไว้ วิธีเดียวที่จะอธิบายประสบการณ์คือ MVC ตามที่ตั้งใจไว้ โดยพื้นฐานแล้วการยกของหนักทั้งหมดสำหรับแอปพลิเคชันของคุณจะทำในออบเจ็กต์ทางธุรกิจ (หรือแบบจำลองโดเมนหากคุณมีแนวโน้มมาก) การควบคุมมาตรฐานถูกผูกไว้กับวัตถุทางธุรกิจในบางวิธี ตัวอย่างเช่นกล่องข้อความถูกแมปไปยังเขตข้อมูลของวัตถุ (เขตข้อมูลนั้นเป็นวัตถุเพื่อให้ง่ายต่อการทำ) ปุ่มจะแมปกับวิธีการ ทั้งหมดนี้ทำด้วย API ที่เรียบง่ายและเป็นธรรมชาติ เราไม่ต้องคิดเกี่ยวกับวัตถุที่มีผลผูกพัน ฯลฯ มันใช้งานได้ แต่ในภาษาและ APIs ที่ใหม่กว่านั้นคุณจะถูกบังคับให้คิดจากภายนอกสิ่งแรกคือ C ++ และ MFC และขณะนี้มี C # และ WPF แล้ว Microsoft ได้รับโลกของนักพัฒนาติดอยู่ใน GUI builders ซึ่งคุณสร้างแอปพลิเคชันของคุณ . การพัฒนา Java Swing นั้นไม่แตกต่างกันเพียงคุณเท่านั้นที่เขียนโค้ดเพื่อสร้างอินสแตนซ์ของการควบคุมในแบบฟอร์มด้วยตัวคุณเอง สำหรับบางโครงการอาจไม่เคยมีรูปแบบโดเมนเลยแม้แต่แค่ตัวจัดการเหตุการณ์ ฉันอยู่ในและรอบ ๆ โมเดลนี้สำหรับผู้ดูแลส่วนใหญ่ของฉัน แต่ละวิธีบังคับให้คุณคิดต่างกัน ด้วยวิธีการ Smalltalk …

5
เกิดอะไรขึ้นกับรูปแบบไฟล์รวมของ Alan Cooper
อลันคูเปอร์เป็นเวลานาน (ในหนังสือทั้งสามเล่มของเขาเรื่อง "About Face") ได้ส่งเสริม "unified file model" ให้กับสิ่งอื่น ๆ เขาได้แจกจ่ายสิ่งที่เขาเรียกว่ากล่องข้อความที่งี่เง่าที่สุดที่เคยประดิษฐ์ขึ้นมา ปรากฏขึ้นเมื่อกดปุ่มปิดในแอปหรือแบบฟอร์มที่เขียนว่า "คุณต้องการยกเลิกการเปลี่ยนแปลงหรือไม่" ฉันชอบความคิดและข้อโต้แย้งของเขา แต่ยังมีปฏิกิริยาตอบสนองต่อข้อเหวี่ยงที่ผู้เขียนโปรแกรมและผู้ใช้เก๋าส่วนใหญ่มี ในขณะที่หนังสือของคูเปอร์ดูเหมือนเป็นที่นิยมและได้รับความเคารพ แต่ก็มีการพูดคุยกันเล็กน้อยเกี่ยวกับปัญหานี้ในเว็บที่ฉันสามารถหาได้ Petter Hesselberg ผู้เขียน "Programming Industrial Strength Windows" กล่าวถึง แต่ดูเหมือนว่าจะเป็นเรื่องนั้น ฉันมีโอกาสนำไปใช้ในโครงการ (เดสก์ท็อป) ที่ฉันกำลังดำเนินการอยู่ แต่การเผชิญกับการต่อต้านจากลูกค้าและเพื่อนร่วมงานที่คุ้นเคยกับวิธี MS Word และ Excel ในการทำสิ่งต่าง ๆ ฉันอยู่ในฐานะที่จะแทนที่การคัดค้านของพวกเขา แต่ฉันไม่แน่ใจว่าควรทำหรือไม่ คำถามของฉันคือ: มีการสนทนาที่ดีเกี่ยวกับเรื่องนี้หรือไม่ที่ฉันไม่พบ? มีใครทำเช่นนี้ในแอปของพวกเขาหรือไม่ มันเป็นความคิดที่ดีหรือไม่ที่น่าเสียดายที่ไม่สามารถนำไปปฏิบัติได้จนกว่าจะกล่าวว่า Microsoft ทำใช่หรือไม่

4
รูปแบบ“ ศูนย์การแจ้งเตือน” ส่งเสริมการออกแบบโปรแกรมที่ดีหรือไม่ดีหรือไม่?
บางครั้งฉันเจอ API สไตล์ฮับข้อความเช่น Cocoa NSNotificationCenter: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html โดยปกติแล้ว API เหล่านี้จะให้จุดเชื่อมต่อส่วนกลางที่คุณสมัครหรือเผยแพร่ข้อความ / กิจกรรม ฉันคิดว่านี่เป็นปัญหาเพราะมันสนับสนุนสถาปัตยกรรมโปรแกรมแบบแบนและไม่มีโครงสร้างซึ่งการพึ่งพาไม่ชัดเจนใน API แต่ซ่อนอยู่ในซอร์สโค้ด คุณไม่ได้ถูกบังคับให้คิดเกี่ยวกับการเป็นเจ้าของวัตถุและลำดับชั้น แต่สามารถทำให้วัตถุใด ๆ ในโปรแกรมของคุณส่งผลให้มีรหัสใด ๆ ที่ถูกเรียก แต่นี่อาจเป็นสิ่งที่ดี? โดยทั่วไปแล้วรูปแบบนี้ส่งเสริมการออกแบบโปรแกรมที่ดีหรือไม่ดีและทำไมถึงเป็นเช่นนั้น มันทำให้รหัสยากขึ้นหรือง่ายขึ้นในการทดสอบ? ยกโทษให้ฉันถ้าคำถามนี้คลุมเครือหรือกว้างเกินไป ฉันพยายามคาดไม่ถึงผลที่ตามมาจากการใช้ API อย่างกว้างขวางและวิธีต่างๆที่คุณสามารถใช้ได้ แก้ไข: ฉันเดาว่าปัญหาที่ใหญ่ที่สุดของฉันในรูปแบบนี้คือ API "โกหก" เกี่ยวกับการพึ่งพาและข้อต่อวัตถุและสามารถแสดงด้วยตัวอย่างนี้: myObj = new Foo(); myOtherObj = new Bar(); print myOtherObj.someValue; // prints 0 myObj.doSomething(); print myOtherObj.someValue; // prints …

1
ขั้นตอนที่ตามมาเมื่อเขียน lexer เป็นไปตามไวยากรณ์คืออะไร?
ในขณะที่อ่านคำตอบสำหรับคำถามที่ชี้แจงเกี่ยวกับแกรมมาร์, Lexers และ Parsersคำตอบดังกล่าวระบุว่า: [... ] ไวยากรณ์ BNF มีกฎทั้งหมดที่คุณต้องการสำหรับการวิเคราะห์คำและการแยกวิเคราะห์ สิ่งนี้เกิดขึ้นกับฉันค่อนข้างแปลกเพราะจนถึงตอนนี้ฉันมักจะคิดเสมอว่า lexer นั้นไม่ได้ยึดหลักไวยากรณ์เลยในขณะที่ parser มีพื้นฐานมาจากหนึ่ง ฉันมาถึงข้อสรุปนี้หลังจากอ่านโพสต์บล็อกจำนวนมากเกี่ยวกับการเขียน lexers และไม่มีใครเคยใช้1 EBNF / BNF เป็นพื้นฐานสำหรับการออกแบบ หาก lexers รวมถึง parsers อิงตามไวยากรณ์ EBNF / BNF แล้วจะมีวิธีการสร้าง lexer โดยใช้วิธีนั้นอย่างไร นั่นคือฉันจะสร้าง lexer โดยใช้ไวยากรณ์ EBNF / BNF ที่กำหนดได้อย่างไร ฉันเคยเห็นโพสต์มากมายที่เกี่ยวข้องกับการเขียนโปรแกรมแยกวิเคราะห์โดยใช้ EBNF / BNF เป็นแนวทางหรือพิมพ์เขียว แต่ฉันเจอมาไม่ถึงตอนนี้ที่แสดงเทียบเท่ากับการออกแบบเล็ก ตัวอย่างเช่นใช้ไวยากรณ์ต่อไปนี้: input = digit| string …

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

6
รูปแบบไฟล์กำหนดค่าที่มนุษย์อ่านง่ายที่สุดคืออะไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ไฟล์การกำหนดค่าปัจจุบันเป็นดังนี้: mainwindow.title = 'test' mainwindow.position.x = 100 mainwindow.position.y = 200 mainwindow.button.label = 'apply' mainwindow.button.size.x = 100 mainwindow.button.size.y = 30 logger.datarate = 100 logger.enable = True logger.filename = './test.log' นี่คือการอ่านด้วยหลามในพจนานุกรมที่ซ้อนกัน: { 'mainwindow':{ 'button':{ 'label': {'value':'apply'}, ... }, 'logger':{ datarate: {'value': 100}, enable: {'value': True}, …

5
ค้นหาแบบที่ใกล้ที่สุดที่ดีที่สุดสำหรับวงกลม
ด้านล่างเป็นภาพตัวอย่างถ้าฉันมีจุดสีขาวตรงกลางและฉันต้องการค้นหาตำแหน่งที่ใกล้ที่สุดสำหรับวงกลมสีน้ำเงิน (ซึ่งเห็นได้ชัดว่าอยู่ในตำแหน่งที่ฉันวางไว้) ถ้าวงกลมสีแดงทั้งหมดมีอยู่แล้ว . ฉันจะหาตำแหน่งนั้นได้อย่างไร ประสิทธิภาพสำหรับฉันไม่ใช่สิ่งสำคัญสำหรับแอปพลิเคชันนี้

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