input = input.PadLeft(10, '0'); if (!Regex.IsMatch(input, @"^\d{10}$")) return false;
یک جدول طراحی کنید به نام mass mail که در آن یک Content به علاوه فیلد IsDone وجود داره. مدیر سیستم متن خودش رو به صورت معمول در این جدول ثبت کنه. در وظیفهی پس زمینه، رکوردهایی را که IsDone آنها false است یکی یکی یافته و پردازش کنید. بعد از اتمام کار، IsDone هر رکورد را true کنید.
مزیت این روش اینه که دو ترد کاملا مجزای رابط کاربری و ترد وظیفهی پس زمینه، هیچ تداخل و تماسی با هم نخواهند داشت تا سبب کرش برنامه شوند.
ترد اجرایی یک وظیفهی پس زمینه با ترد اجرایی یک درخواست وب یکی نیست. بنابراین نمیتونید به اشیاء رابط کاربری در تردی دیگر دسترسی داشته باشید. در برنامههای دسکتاپ اگر اینکار را انجام بدید، برنامه آنی کرش میکنه. در وب هم فرقی نمیکنه؛ اصول یکی هست.
کاری که میخواهید انجام بدید کلا نباید از این طریق انجام بشه. اگر هدفتون مثلا پیاده سازی auto-save هست که در بعضی از سایتها دیدید که هر از چند ثانیه یکبار متن رو ذخیره میکنند، این رو با یک تایمر جاوا اسکریپتی سمت کاربر و Ajax انجام میدن و نه با یک وظیفهی پس زمینه.
خود EF متدی به نام AddOrUpdate داره: http://msdn.microsoft.com/en-us/library/hh846520%28v=vs.103%29.aspx
در اصل تک مسئولیتی، مسئولیت به دلیل تغییر یک کلاس ترجمه میشه. بنابراین در این اصل میگن که یک کلاس باید فقط یک دلیل برای تغییر داشته باشه. برای مثال کلاسی که هم اطلاعات گزارشی رو تهیه میکنه و هم اون رو پرینت میکنه، دو مسئولیت رو به عهده گرفته که میشه از هم جداشون کرد. اما در اینجا یک مسئولیت به روز رسانی اطلاعات یک موجودیت خاص بیشتر در کار نیست. دلیل دومی برای تغییر کلاس نداریم. وابستگی خارجی دومی نداره.
در مطلب استفاده مستقیم از عبارات SQL در EF Code first بحث شده. از متد جنریک db.Database.SqlQuery باید استفاده کنید.
- کاری که میخوای، منطقا زیر سؤاله. هم قرار نال پذیر باشه. هم کاربر باید اجبارا پرش کنه! یعنی چی اینکار؟!
- در مورد ویژگیهای اعتبار سنجی سفارشی و مدیریت کدهای سمت کلاینت اونها مطلب در سایت موجوده:
طراحی ValidationAttribute دلخواه و هماهنگ سازی آن با ASP.NET MVC