ฉันคิดถึงเรื่องนี้เมื่อไม่นานมานี้และเมื่อไม่นานมานี้ปรากฏขึ้นอีกครั้งเมื่อร้านของฉันกำลังทำเว็บแอป Java ตัวแรก
ในบทนำฉันเห็นกลยุทธ์การตั้งชื่อแพ็กเกจหลัก 2 แบบ (เพื่อความชัดเจนฉันไม่ได้หมายถึงส่วน 'domain.company.project' ทั้งหมดของสิ่งนี้ฉันกำลังพูดถึงรูปแบบแพ็คเกจที่อยู่ด้านล่าง) อย่างไรก็ตามหลักการตั้งชื่อแพ็คเกจที่ฉันเห็นมีดังนี้:
ฟังก์ชั่น: ตั้งชื่อแพ็กเกจของคุณตามฟังก์ชันสถาปัตยกรรมแทนที่จะเป็นเอกลักษณ์ตามโดเมนธุรกิจ คำอื่นสำหรับสิ่งนี้อาจเป็นการตั้งชื่อตาม "เลเยอร์" ดังนั้นคุณจะมีแพ็คเกจ * .ui และแพ็คเกจ * .domain และแพ็คเกจ * .orm หีบห่อของคุณเป็นชิ้นส่วนแนวนอนแทนที่จะเป็นแนวตั้ง
นี้เป็นมากร่วมกันมากขึ้นกว่าการตั้งชื่อตรรกะ อันที่จริงฉันไม่เชื่อว่าฉันเคยเห็นหรือได้ยินโครงการที่ทำเช่นนี้ แน่นอนว่าสิ่งนี้ทำให้ฉันเบื่อหน่าย (เช่นคิดว่าคุณได้หาวิธีแก้ปัญหา NP) เนื่องจากฉันไม่ฉลาดมากและฉันคิดว่าทุกคนต้องมีเหตุผลที่ดีในการทำแบบที่พวกเขาทำ ในทางกลับกันฉันไม่ได้ต่อต้านคนที่คิดถึงช้างในห้องและฉันไม่เคยได้ยินข้อโต้แย้งที่เกิดขึ้นจริงในการตั้งชื่อแพ็คเกจด้วยวิธีนี้ ดูเหมือนว่าจะเป็นมาตรฐานโดยพฤตินัย
ตรรกะ: การตั้งชื่อแพ็กเกจของคุณตามข้อมูลประจำตัวของโดเมนธุรกิจและใส่ทุกคลาสที่เกี่ยวข้องกับฟังก์ชันการทำงานตามแนวตั้งลงในแพ็กเกจนั้น
ฉันไม่เคยเห็นหรือได้ยินเรื่องนี้อย่างที่ฉันพูดถึงมาก่อน แต่มันสมเหตุสมผลสำหรับฉัน
ฉันมักจะเข้าหาระบบในแนวตั้งมากกว่าแนวนอน ฉันต้องการที่จะพัฒนาระบบประมวลผลคำสั่งซื้อไม่ใช่ชั้นการเข้าถึงข้อมูล เห็นได้ชัดว่ามีโอกาสดีที่ฉันจะแตะชั้นการเข้าถึงข้อมูลในการพัฒนาระบบนั้น แต่ประเด็นก็คือฉันไม่คิดอย่างนั้น แน่นอนว่าสิ่งนี้หมายความว่าอย่างไรก็คือเมื่อฉันได้รับคำสั่งเปลี่ยนแปลงหรือต้องการใช้คุณลักษณะใหม่ ๆ มันจะเป็นการดีที่จะไม่ต้องตกปลาในแพ็คเกจมากมายเพื่อค้นหาคลาสที่เกี่ยวข้องทั้งหมด แต่ฉันดูในแพ็คเกจ X แทนเพราะสิ่งที่ฉันทำเกี่ยวข้องกับ X
จากมุมมองด้านการพัฒนาฉันเห็นว่าเป็นชัยชนะครั้งสำคัญที่จะให้แพคเกจของคุณบันทึกโดเมนธุรกิจของคุณมากกว่าสถาปัตยกรรมของคุณ ฉันรู้สึกว่าโดเมนมักจะเป็นส่วนหนึ่งของระบบที่ยากต่อการสั่นคลอนโดยที่สถาปัตยกรรมของระบบโดยเฉพาะอย่างยิ่ง ณ จุดนี้แทบจะกลายเป็นเรื่องธรรมดาในการนำไปใช้งาน ความจริงที่ว่าฉันสามารถเข้าสู่ระบบที่มีหลักการตั้งชื่อประเภทนี้และทันทีจากการตั้งชื่อแพ็คเกจทำให้รู้ว่ามันเกี่ยวข้องกับคำสั่งซื้อลูกค้าองค์กรผลิตภัณฑ์ ฯลฯ ดูเหมือนจะมีประโยชน์มาก
ดูเหมือนว่าสิ่งนี้จะช่วยให้คุณสามารถใช้ประโยชน์จากตัวปรับการเข้าถึงของ Java ได้ดีขึ้นมาก สิ่งนี้ช่วยให้คุณกำหนดอินเทอร์เฟซในระบบย่อยได้อย่างหมดจดมากขึ้นแทนที่จะเป็นเลเยอร์ของระบบ ดังนั้นหากคุณมีระบบย่อยคำสั่งซื้อที่คุณต้องการคงอยู่อย่างโปร่งใสในทางทฤษฎีคุณสามารถอย่าให้สิ่งอื่นรู้ว่ามันคงอยู่ได้โดยไม่ต้องสร้างอินเทอร์เฟซสาธารณะให้กับคลาสการคงอยู่ในเลเยอร์ dao และบรรจุคลาส dao ไว้ใน มีเฉพาะคลาสที่เกี่ยวข้องเท่านั้น เห็นได้ชัดว่าหากคุณต้องการเปิดเผยฟังก์ชันนี้คุณสามารถจัดเตรียมอินเทอร์เฟซสำหรับมันหรือทำให้เป็นสาธารณะ ดูเหมือนว่าคุณจะสูญเสียสิ่งนี้ไปมากโดยการแบ่งส่วนแนวตั้งของคุณลักษณะของระบบของคุณในหลายแพ็คเกจ
ฉันคิดว่าข้อเสียอย่างหนึ่งที่ฉันเห็นคือมันทำให้การริปเลเยอร์ยากขึ้นเล็กน้อย แทนที่จะลบหรือเปลี่ยนชื่อแพ็กเกจแล้ววางแพ็กเกจใหม่แทนด้วยเทคโนโลยีอื่นคุณต้องเข้าไปเปลี่ยนคลาสทั้งหมดในแพ็กเกจทั้งหมด อย่างไรก็ตามฉันไม่เห็นว่านี่เป็นเรื่องใหญ่ อาจจะมาจากการขาดประสบการณ์ แต่ฉันต้องจินตนาการว่าจำนวนครั้งที่คุณเปลี่ยนเทคโนโลยีออกไปนั้นลดลงเมื่อเทียบกับจำนวนครั้งที่คุณเข้าไปและแก้ไขส่วนคุณลักษณะแนวตั้งภายในระบบของคุณ
ดังนั้นฉันเดาว่าคำถามจะออกไปหาคุณคุณตั้งชื่อแพ็คเกจของคุณได้อย่างไรและทำไม? โปรดเข้าใจว่าฉันไม่จำเป็นต้องคิดว่าตัวเองสะดุดห่านทองคำหรืออะไรที่นี่ ฉันค่อนข้างใหม่สำหรับสิ่งนี้โดยมีประสบการณ์ด้านวิชาการเป็นส่วนใหญ่ อย่างไรก็ตามฉันไม่สามารถมองเห็นช่องโหว่ในเหตุผลของฉันได้ดังนั้นฉันหวังว่าทุกคนจะสามารถทำได้เพื่อที่ฉันจะได้ก้าวต่อไป