سؤال

أبدأ مشروعًا جديدًا على الويب Java يستخدم Hibernate وبنية MVC قياسية. لقد بدأت للتو في تخطيط هيكل المشاريع ، وبينما كنت أقوم بذلك ، بدأت في النظر حولها لمعرفة ما إذا كانت هناك أي معايير في هذا المجال ، حول المكان الذي يجب أن يذهب فيه وحدات التحكم بشكل عام أفضل طريقة لوضع كل شيء. ومع ذلك لم أجد أي إرشادات.

إذن ما أشعر بالفضول لمعرفته هو

  • هل يدرك أي شخص أي إرشادات أفضل الممارسات لتخطيط مشروع الويب Java؟
  • هل لدى أي شخص مجموعة معينة من القواعد الصعبة التي يتبعها دائمًا لأنواع مختلفة من المشروع؟
  • هل يميل الناس إلى تقسيم الحزم حسب الطبقات المختلفة مثل العرض التقديمي والأعمال والتطبيق؟
هل كانت مفيدة؟

المحلول

لمواصلة إجابتي السابقة ، لدي العديد من مشاريع الويب. في كل منهم الهيكل تحت SRC هو أكثر أو أقل كما هو. يتم فصل الحزم تقريبًا إلى 3 طبقات منطقية.

الأول هو طبقة العرض التقديمي ، كما قلت ، للمستمعين والمستمعين للتطبيقات والمساعدين.

ثانياً ، هناك طبقة لطبقة وصول النموذج/ديسيبل. الطبقة الثالثة لمنطق العمل. ومع ذلك ، في بعض الأحيان لا تكون الحدود بين هذه الطبقات واضحة. إذا كنت تستخدم Hibernate للوصول إلى DB ، فسيتم تعريف النموذج بواسطة فئات Hibernate ، لذا أضعها في نفس منطقة كائنات DAO. على سبيل المثال com.sample.model يحتفظ بكائنات بيانات hibernate و com.sample.model.dao عقد كائنات DAO.

إذا كنت تستخدم JDBC المستقيم (عادةً مع الربيع) ، فأنا أحيانًا أجد أنه من المناسب أن تضع كائنات البيانات أقرب إلى طبقة منطق العمل بدلاً من طبقة الوصول إلى DB.

(تقع بقية الأشياء عادة تحت طبقة العمل).

نصائح أخرى

يعتمد الأمر حقًا على إطار الويب الخاص بك.

على سبيل المثال ، إذا كنت تستخدم WICTET ، فإن ملفات Java وصفحات الويب تتعايش في نفس الدليل بينما في معظم الأطر الأخرى ، تكون الصفحات (ملفات .jsp أو أي شيء آخر محرك العرض التقديمي) والأشياء الرمزية (ملفات Java) منفصلة تمامًا.

لذا اقرأ الوثائق التي تأتي مع إطار عملك (Spring MVC ، Struts ، JSF إلخ).

اقتراح جيد آخر هو استخدام نماذج Maven لإنشاء هيكل عظمي لإطارك المحدد. تحتوي بعض أطر عمل الويب (مثل Seam) على أداة توليد الكود الخاصة بها التي تضع الأسس لمشروع الويب الخاص بك.

اقتراحي الجيد الوحيد (لم يذكره Yoni) لدليل SRC هو جعل الحزم وفقًا لغرض العمل وليس وفقًا للنوع/الطبقة

هذا يعني حزم ل

  • com.mycompany.myproject.customers
  • com.mycompany.myproject.departments
  • com.mycompany.myproject.billing
  • com.mycompany.myproject.reports
  • com.mycompany.myproject.admin

و لا

  • com.mycompany.myproject.entities
  • com.mycompany.myproject.tables
  • com.mycompany.myproject.graphs
  • com.mycompany.myproject.dialogs
  • com.mycompany.myproject.servlets

الهيكل الثاني عام للغاية ، ويميل إلى حل حول حزم ضخمة بأشياء غير ذات صلة ومن الصعب الحفاظ عليها.

أولاً ، لمتابعة الهيكل التقليدي لـ IDE الشهيرة ، ALA Eclipse ، NetBeans ، إلخ. في Eclipse ، على سبيل المثال ، يتم ترتيب كل شيء بالفعل باستخدام مجلدات ويب وميثا ، لذلك من السهل. يتم نسخ رمز مصدر الفئات (عادةً ضمن SRC) تلقائيًا إلى فئات الويب/الفئات. هناك بعض الاعتبارات الأخرى:

  1. إذا كنت تستخدم MVC ، فمن الممكن أنك لا تحتاج إلى الوصول إلى JSPs مباشرة. إذا كان الأمر كذلك ، فاحتفظ برمز مصدر JSP ضمن Web-INF/JSP ، لأسباب أمنية.
  2. وبالمثل ، احتفظ بملفات العلامات المخصصة ضمن علامات الويب/العلامات.
  3. حافظ على ملفات JavaScript في مجلد JS ، وملفات CSS في مجلد النمط ، وما إلى ذلك.
  4. من الجيد فصل التعليمات البرمجية الخاصة بك في الحزم وفقًا للطبقات. من الواضح أن daos السبات لا تحتاج إلى أن تكون في نفس الحزمة مثل servlets.
  5. إذا انتهى بك المطاف مع الكثير من servlets في نفس الحزمة ، ففكر في التعبئة الفرعية الخاصة بها للوظائف ، ولكن من الجيد أن يكون لديهم حزمة سلف مشتركة - فهي تساعد في قابلية القراءة.

استخدم ال Maven Webapp Type Type Layout.

project
|-- pom.xml
`-- src
    `-- main
        |-- java
        `-- webapp
            |-- WEB-INF
            |   `-- web.xml
            `-- index.jsp

لقد أدرجت java المجلد في المثال هنا ، ربما كان واضحًا ، ولكن تم تركه في الرابط أعلاه لسبب ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top