سؤال

فكر في تطبيق عادي لطلبات العملاء يعتمد على نمط MVC باستخدام WinForms.لقد زاد حجم جزء العرض كثيرًا (أكثر من 4000 ملف) ويجب تقسيمه إلى ملفات أصغر.


في هذا المثال سنستخدم 3 مشاريع لجزء العرض:

  • رئيسي - لديه تبعيات للمشروعين الآخرين.إنشاء مثيل للنماذج مع القوائم.
  • عملاء - بها نموذجين - قائمة العملاء وتفاصيل العملاء.
  • طلبات - يحتوي على نموذجين - قائمة الطلبات وتفاصيل الطلب.

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

وهذا يعني أننا بحاجة إلى إشارة إلى مشروع الطلبات في مشروع العملاء. (1)

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

وهذا يعني أننا بحاجة إلى إشارة إلى مشروع العملاء في مشروع الطلبات. (2)

من (1) و (2) سيكون لدينا تبعيات دورية بين مشاريع الطلبات والعملاء.


كيف يمكن تجنب ذلك؟ نوع من بنية المكونات الإضافية؟تم تطوير المشروع بالفعل وسيتضمن الحل الأفضل أقل قدر ممكن من التغيير في التعليمات البرمجية.

هل كانت مفيدة؟

المحلول

قم بتغيير نوع واحد على الأقل إلى واجهة.

على سبيل المثال، لديك واجهة ICustomer ونوع العميل الذي ينفذ هذه الواجهة.أضف الآن ICustomer إلى مشروع الطلبات ومن مشروع العملاء قم بتعيين مرجع لمشروع الطلبات حتى تتمكن من تنفيذ الواجهة.يمكن الآن أن يعمل نوع الطلب مقابل نوع ICustomer دون معرفة التنفيذ الفعلي.

ولحل أفضل :-) قم بإنشاء كل من icustomer وواجهة iorder وإضافتها إلى مشروع مكتبة ثالث.وقم بالإشارة إلى هذا المشروع من المشروعين الآخرين واعمل فقط مع الواجهات، وليس مع التنفيذ أبدًا.

نصائح أخرى

إذا كانا مترابطين بإحكام، فربما لا ينبغي تقسيمهما.

قم باستخراج الواجهات ووضعها في مجموعة منفصلة.نظرًا لأنك تستخدم بنية MVC، فلن يكون الأمر صعبًا.قم بإلقاء نظرة على مجموعة تطبيقات Microsoft Composite UI للحصول على أمثلة وممارسات جيدة.

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

من وجهة النظر الفنية، لا أفهم لماذا يجب أن تكون وجهات نظركم على علم بوجود بعضها البعض - وهذا يبدو غريبًا بعض الشيء بالنسبة لي.لن تقوم بتقسيم بياناتك ومنطق عملك، وفي نهاية المطاف فإن المعرف الفريد العمومي (GUID) هو مجرد لسعة يمكنك تمريرها بسهولة باستخدام طرق مختلفة.

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