أفضل الممارسات للصور في نموذج مع قلعة activerecord / monorail

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

سؤال

يحتاج نموذج "المستخدم" الخاص بنا إلى صورة ملف تعريف صغير على ذلك، وأنا لست متأكدا تماما من كيفية التعامل معها. بالطبع يمكننا فقط حفظه إلى مجلد على القرص وتخزين المسار / اسم الملف إلى قاعدة البيانات، لكنني أعتقد أنني أفضل أن يتم تخزينها في 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 بواسطة معرف والكتابة إلى دفق الاستجابة مع نوع المحتوى المناسب.

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