هل يجب على الخصائص الموجودة في كائن نقل البيانات توسيع المفاتيح الخارجية أو الكشف عن مفاتيحها الأساسية ببساطة

StackOverflow https://stackoverflow.com/questions/5392093

سؤال

لدي EmployDTO الذي يمثل سجل الموظف في قاعدة البيانات.يحتوي جدول الموظف على علاقة بالقسم وعلاقة 1 إلى متعدد بالإذن.

في الكيانات الخاصة بي، يتم تمثيلها كخاصية قسم موسعة بالكامل وقائمة بكائنات الأذونات الموسعة بالكامل.

السؤال هو هل يجب أن يكون لدى DTO خاصية DepartmentDTO موسعة بالكامل لمعرف القسم؟هل يجب أن يكون لدى DTO قائمة بخصائص PermissionDTO الموسعة بالكامل لقائمة PermissionId؟

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

المحلول

تمامًا مثل كل شيء في التصميم ، فهو يعتمد على احتياجاتك.

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

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

يتعامل Entity Framework من Microsoft ، بالإضافة إلى أطر عمل كائنات الأعمال الشائعة الأخرى ، مع هذا المفهوم عن طريق التحميل البطيء - فقط أحضر خاصية الطفل الموسعة الكاملة إذا تم طلبها بواسطة الكود. من المحتمل أن يكون هذا هو الحل الأكثر مرونة ، ولكنه يحتوي على القليل من الحمل / التأخر حيث لا يمكن جلب الخصائص الفرعية في نفس استدعاء قاعدة البيانات مثل الكائن الأصل. هذه بالطبع ليست مجرد DTOs.

نصائح أخرى

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

من الشائع إنشاء حالة DTO واحدة تحتوي على جميع الخصائص الضرورية وكائن DTO واحد أو أكثر يعرض المزيد من الوظائف ويستخدمها بطرق أخرى.على سبيل المثال، لدي BasicUser الطبقة التي تحتوي فقط UserName و DisplayName و انا املك User الذي يحتوي على المزيد بما في ذلك Permissions و يرث من "المستخدم الأساسي".

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