PDA

View Full Version : اصول لایه ها در ASP.NET MVC



jaykob
یک شنبه 18 خرداد 1393, 11:53 صبح
سلام


من یکسری لایه ها با مواردی رو که در زیر مجموعه خودشون دارند آماده کردم که می خواهم درست یا غلط بودنشون رو سوال کنم . به فرض این لایه ها مرتبط با یک سیستم مدیریت محتوا تقریبا بزرگ است .

1 - آیا تمامی زیر مجموعه ها صحیح و کامل است ؟
2 - چه لایه ای باید وجود داشته باشد که دیده نشده در اینجا ؟
3 - ماژول ها و کنترلر های ما در پروژه اصلی باشد مشکلی نیست ؟
4 - اگر یک لایه به نام Security داشتیم چه چیزهایی در آن قرار می گرفت ؟



DataLayer
· Context Class
· Migration Class

DomainClasses
· All Model For Ef Code First

ServiceLayer
· All Repository Class
· All Interface Class For DI
· DI Container Config File

Models
· All Model For Controller and View


خیلی ممنون

ali_autumnal
جمعه 23 خرداد 1393, 16:43 عصر
بله بدرستی نوشته شده.

در پروژه اصلی فقط لایه اینترفیس قرار می گیره. در واقع هر درخواستی از سمت سرور به پروژه اصلی ارجاع داده میشه و کنترلر مربوطه فرآخوانی میشه در کنترلر اعتبارسنجی میشه در صورت صحت به لایه سرویس ارجاع داده میشه.

فرض کنیم می خواهیم در فیس بوک کامنتی درج کنیم (به سرور ارسال کنیم):
ViewModel مربوطه میتونه بشرح زیر باشه:




public class CommentCreateModel
{
[Required(ErrorMessage = "محتوای نظر خالی می باشد.")]
[DataType(System.ComponentModel.DataAnnotations.Dat aType.MultilineText)]
[StringLength(3999, ErrorMessage = "محتوای دیدگاه حداکثر 4000 حرف می تواند باشد")]
public string Content { set; get; }

[Required]
public long ParentId { set; get; }

[Required]
public long NewsId { set; get; }
}

بخشی از مدل فوق در سمت کلاینت توسط کاربر تکمیل میشود بخشی مانند NewsId و ParentId توسط سیستم تکمیل خواهد شد. مدل مربوطه با فشردن اینتر به سرور ارسال میشه. پس از مسیریابی به کنترلر مربوطه ارجاع داده میشه. کنترلر مربوطه اعتبارسنجی های لازم را انجام خواهد داد. در MVC کافیه ModelState اعتبار داشته باشه (true باشد). درصورت اعتبار به سرویس مربوطه ارجاع داده میشه.

در سرویس مربوطه مدلی از نمونه اصلی (domainclass) ایجاد خواهد شد

مدل اصلی میتونه بشرح زیر باشه:




public class Comment
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
public long CommentId { set; get; }

[Required]
public DateTime CreateDate { set; get; }

[Required]
public string Content { set; get; }

[Required]
public bool IsActive { set; get; }

[Required]
public int LikeCount { set; get; }

[Required]
public long ParentId { set; get; }

[Required]
public int UserId { set; get; }
public virtual UserProfile UserProfile { get; set; }

[Required]
public long NewsId { set; get; }
public News News { get; set; }
}

مقادیر مربوطه از ViewModel خوانده شده و نمونه اصلی مقداردهی خواهد شد. سپس به CommentService ارجاع داده میشه. CommentService نمونه دریافت شده را در دیتابیس Insert خواهد زد.

حالا: سوال اینجاست چرا این همه کار باید انجام بشه تا یک رکورد ناقابل ذخیره بشه؟؟؟؟
کاملترین پاسخ بنظرم میتونه این باشه: فقط واسه راحتی برنامه نویس و ساده شدن اصلاحات (تغییرات، توسعه نرم افزار) مورد نیاز در آینده نزدیک.