أفضل الممارسات للصور في نموذج مع قلعة activerecord / monorail
-
19-09-2019 - |
سؤال
يحتاج نموذج "المستخدم" الخاص بنا إلى صورة ملف تعريف صغير على ذلك، وأنا لست متأكدا تماما من كيفية التعامل معها. بالطبع يمكننا فقط حفظه إلى مجلد على القرص وتخزين المسار / اسم الملف إلى قاعدة البيانات، لكنني أعتقد أنني أفضل أن يتم تخزينها في DB نفسه.
كان من الفكر الأول هو الحصول على ممتلكات على النموذج مثل هذا:
[Property]
public byte[] ProfilePicture
{
get;
set;
}
ولكن من المؤكد أن أشعر وكأنني سأضطر إلى الذهاب إلى طريق طويل للحصول عليه في العمل بهذه الطريقة - الحصول على صفيف بايت من قاعدة البيانات، ثم تحويلها إلى صورة مع نوع من المعالج.
هل شاهد أي شخص تعليمي جيد حول كيفية التعامل مع هذا النوع من الأشياء؟ يبدو أنه سيكون من المتطلبات الكافية التي أجدها شيئا محددا، لكن أبحثي حتى الآن قد ظهرت فارغة.
المحلول
حول تخزين الصور في قاعدة البيانات أو الملفات، انظر هذا السؤال.
إذا قررت تخزينها على DB، فإن الشيء الأكثر أهمية هو أنك لا استرداد byte[]
في كل مرة تقوم فيها باستفسارك للمستخدم، يمكن أن يكون ذلك الكثير من البيانات ومشكلة Perf. للقيام بذلك يمكنك إما تخزين الصورة في طاولة أخرى أو خريطة byte[]
إلى كيان آخر مع نفس الجدول (على افتراض أن المستخدم يمكن أن يكون له صورة واحدة فقط):
[ActiveRecord("users")]
public class UserWithoutPicture {
[PrimaryKey]
public virtual int Id {get;set;}
...
[BelongsTo]
public virtual UserProfilePicture ProfilePicture {get;set;}
}
[ActiveRecord("users")]
public class UserProfilePicture {
[PrimaryKey]
public virtual int Id {get;set;}
[Property]
public virtual byte[] Image {get;set;}
}
سيكون هذا بعض السلوكيات غير تقليدي رغم ذلك. وبعد على سبيل المثال، لأي مستخدم معين، ProfilePicture
لن تكون أبدا فارغة. لن تقوم بالفعل بإدراج أو حذف UserProfilePicture
لأنه في الواقع المستخدم، بدلا من ذلك ستحديث دائما. وسوف تتحمل انضمام إضافي، وعليك أن تكون على علم حدد N + 1. وبعد هذا فقط خارج الجزء العلوي من رأسي، غير مختبر تماما.
الخلاصة: تخزين الصور في طاولة أخرى أكثر مرونة.
إذا كنت تريد راحة التعامل مع Image
بدلا من الخام byte[]
, ، ينفذ IUserType
. وبعد ولكن تذكر أن الصورة تعتبر مثيرة، وسوف يكون صعب جدا للتخلص من ذلك في الوقت المناسب.
تنفيذ جهاز تحكم مونوراكي يعيد صورة واضحة للغاية ... فقط استخدم [ARFetch]
للحصول على UserProfilePicture
بواسطة معرف والكتابة إلى دفق الاستجابة مع نوع المحتوى المناسب.