سؤال

نحن نعمل على مشروع جديد (إعادة كتابة التطبيق الحالي) ، وأنا أواجه مشكلات في تصميم طراز / مستودع النطاق الخاص بي.

فيما يلي إصدار (مبسط) من جزأين رئيسيين في نموذج المجال الخاص بنا:

alt text

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

لدي أيضًا مفهوم تجريدي لـ موقع, من الواضح أنها أشياء مثل الشوارع والمدن والأحياء ، إلخ.

الآن ، بدا هذا بشكل طبيعي كجذرين إجماليين واضحين.

لذلك قمت بإنشاء مستودعين ، واحد يسمى postrepository, ودعا آخر الموقع.

كان كل هذا يعمل بشكل جيد ، يمكنني إضافة/الحصول على أي نوع من المنشورات (أو التعليق) ، وإضافة/الحصول على أي نوع من المواقع عبر أحد هذين المستودعين.

لكن الآن في سيناريو "صفحة مقصودة" للمدينة (على سبيل المثال).

في هذه الصفحة ، أحتاج إلى إظهار "جميع المنشورات لهذا الموقع" بشكل أساسي.

كيف يتم تعريف ذلك؟ حسنًا ، يمكن تمييز المنشور (اختياريًا) في الموقع. تفاصيل التنفيذ ، لذلك لا أريد أن أذهب بعمق في البيانات (لأن هذا ليس ما يدور حوله DDD) ، ولكن هناك في الأساس الذكاء الجغرافي المكاني للتعرف على المنشورات الموجودة في موقع معين بواسطة ملف شكل الموقع ، وخط العرض/خط الطول من المنشور الموسومة.

ولكن كيف يمكنني استرداد هذه المعلومات دون عبور الحدود؟

ما هو المستودع الذي أستخدمه؟ هل أحتاج إلى واحدة جديدة؟

إذا كان الأمر مهمًا (أو من أجل الفضوليين) ، فهذا تطبيق ويب (ASP.NET MVC) ، مع قاعدة بيانات SQL Server 2008 و Entity Framework 4.0.

إذا كنت بحاجة إلى أي توضيح ، فأخبرني بذلك.

تعديل

نستخدم حاليًا نسخة معدلة من نمط المواصفات لاسترداد نماذج المجال.

على سبيل المثال ، هذا هو الرمز في BLL لدينا لاسترداد جميع المراجعة حيث SCORE> = 4:

var reviews = postRepository // GenericRepository<Post>
      .Find() // IQueryable<Post>
      .OfType<Review>() // IQueryable<Review>
      .Where(x => x.Score >= 4)
      .ToList(); // List<Review>

لكن الآن أحتاج إلى بعض الرمز مثل هذا:

var reviews = postRepository
    .Find()
    .OfType<Review>()
    .Where( //lat long, or Locations FK )
    .ToList();

المشكلة هي أنني لا أعرف كيفية القيام بالاستعلام أعلاه دون إضافة وسيط انضمام للانضمام (موقع الموقع - لأنه كثير للكثيرين) ، وأضف FK إلى نموذج المجال بعد ذلك.

لكن من خلال القيام بذلك ، أعبر الحدود الكلية - أليس كذلك؟

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

المحلول

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

خلق:

var p = new Post(latitude, longitude);
var locations = locationRepository.FindByCoordinates(latitude, longitude);
foreach (var l in locations)
{
    l.AssociatePost(p);
}
session.Save(p);

استرجاع:

var associatedPosts = postRepository.FindByLocation(locationId);
foreach (var p in associatedPosts)
{
    Display(p);
}

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

امل ان يساعد.

نصائح أخرى

لماذا هذه مشكلة؟ وفقًا لإيفانز في كتابه ، قد يشير أحد AR إلى AR آخر. (قد لا تشير إلى عنصر طفل في AR من AR آخر)

أيضا ، هل المواقع حقا جذور تجميع؟ تعريف الجذر الكلي هو أنه يعمل كحدود للتراكم. هل هذا يتناسب مع تعريف الموقع؟ أود أن أقول أن الموقع هو كائن قيمة.

يوجد معسكرين هنا فيما يتعلق بالمستودعات وجمعيات AR:

واحد يقول أن كل الجذور الإجمالية يجب أن يتم جلبها من خلال مستودع كل منها ، ويجب على AR استخدام العلاقات الناعمة ، على سبيل المثال معرف بينهما

وتلك التي تقول أن الجذور الإجمالية قد تجلب جذورها الإجمالية المرتبطة الأخرى وأن المستودع هو مجرد وسيلة لإيجاد جذور إجمالية.

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

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