PDA

View Full Version : Service Layer , Interface , متد و پروپرتی ویژوال



HOSSEINONLINE7
چهارشنبه 29 مرداد 1393, 22:27 عصر
سلام سورس پروژه ی IRISCMS را مطالعه میکردم چند سوال برام پیش اومده که نتونستم متوجه بشم لطفا راهنماییم کنید :

1. وظیفه ی Service Layer چیه ؟

2. از اینترفیس ها برای الزامی کردن تعریف پروپرتی ها در کلاسها استفاده میشه . این چه مزیتی داره ؟ خوب اینترفیس هم نزاریم مشکلی نیست پروپرتی ها را تو اون کلاسها خودمون تعریف میکنیم .

3. بعضی اکشن ها در کنترلر با Virtual تعریف شده . بعضی پروپرتی ها در کلاسهای EFCode First که Navigation نیستن هم Virtual تعریف شدن .مگه فقط پروپرتی هایی که قرار بود ارتباط ها را برقرار کنن بخاطر لیزی لودینگ Virtual نمیشدن ؟ دلیلش چیه ؟

مثال :

public virtual ActionResult BooksList(int labelId, int page = 0, int count = 8)
{
IOrderedEnumerable<BooksListModel> labelsList =
_postService.GetBooksList(labelId, page, count).OrderByDescending(post => post.CreatedDate);
if (!labelsList.Any())
return Content("no-more");

return PartialView(MVC.Label.Views._BooksList, labelsList);
}




public class Book
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }

[AllowHtml]
public virtual string Description { get; set; }

public virtual string Author { get; set; }
public virtual string ISBN { get; set; }
public virtual string Year { get; set; }
public virtual string Page { get; set; }
public virtual string Language { get; set; }
public virtual string Publisher { get; set; }
public virtual Post Post { get; set; }
public virtual BookImage Image { get; set; }
public virtual byte[] RowVersion { get; set; }
}




4. الگوی Unit Of Work اینه که از دستوراتی برای دریافت اطلاعات در بانک اطلاعاتی استفاده کنیم که تراکنش های زیادی به بانک اطلاعاتی نفرسته ؟ یعنی از لیزی لودینگ استفاده کنیم تا تراکنش ها یکجا ارسال بشه ؟


تشکر

helpsos
پنج شنبه 30 مرداد 1393, 09:52 صبح
شما قسمت نظرات اون مطلب را اگه می خواندی به خیلی از این سوالها جواب داده شده.

HOSSEINONLINE7
جمعه 31 مرداد 1393, 22:45 عصر
شما قسمت نظرات اون مطلب را اگه می خواندی به خیلی از این سوالها جواب داده شده.

در مورد Service Layer مطلبی نبود .

این اینترفیس هایی که در Service Layer تعریف شده و در کنترلر ها پیاده سازی شدن هم متوجه نشدم برای چیه .

پروپرتی های Visual که فهمیدم ولی متدهای ویژوال هم مطلبی در موردش نبود .

HOSSEINONLINE7
شنبه 01 شهریور 1393, 15:02 عصر
این همه برنامه نویس حرفه ایی اینجا هست یکی لطف کنه ما را راهنمایی کنه .

به غیر از سوالات بالا یک سوال ذیگه هم برام پیش اومده :

پروپرتی Virtual برای استفاده از پروکسی ردیابی تغییرات هست که برای همه ی پروپرتی های کلاسها استفاده شده ولی کلاس Post پروپرتی هاش معمولی تعریف شدن ! دلیلش چیه ؟



public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime? ModifiedDate { get; set; }
public string Keyword { get; set; }
public string Description { get; set; }
public string Status { get; set; } // visible hidden draft archive
public bool? CommentStatus { get; set; }
public string Body { get; set; }
public int VisitedNumber { get; set; }
public int Like { get; set; }
public virtual Book Book { get; set; }
public virtual User User { get; set; }
public virtual User EditedByUser { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<Label> Labels { get; set; }
public virtual ICollection<DownloadLink> DownloadLinks { get; set; }
public virtual ICollection<User> LikedUsers { get; set; }
public virtual byte[] RowVersion { get; set; }
}

hakim22
شنبه 01 شهریور 1393, 17:03 عصر
1- جداسازی تعریف(Interface) از پیاده سازی (Implementation) یکی از تکنیکهای مهم برنامه نویسی است که کمک میکند کدهای پاک تری داشته باشید.
2- اینترفیس ها یکی از ارکان IOC هستند و هر پروژه ی بزرگی حتما از یک IoC Container استفاده می کند.
3- اگر پروپرتی Virtual را فهمیده اید پس معلوم است که چرا پروپرتی های کلاس Post نیاز به Virtual ندارند و فقط آنهایی که از جداول دیگر Lazy load میشوند Virtual هستند.

4- متد Virtual در عمل با پروپرتی Virtual کمی فرق دارد. وقتی کلاسی مانند A دارای متد Virtual با نام MyV1 باشد و بعد کلاس B از آن ارث بری کند مانند B:A آنگاه کلاس B می تواند متد MyV1 را Override کند. Override کردم متدهای Virtual در کلاسی وارث نیز اعمال می شود. یعنی بعد از این متد A.MyV1 همان کدی را اجرا می کند که شما در کلاس B برای MyV1 تعریف کرده اید.

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

HOSSEINONLINE7
دوشنبه 03 شهریور 1393, 09:04 صبح
پروپرتی های کلاس Post نیاز به Virtual ندارند و فقط آنهایی که از جداول دیگر Lazy load میشوند Virtual هستند.

تشکر .
فقط یک سوال دیگه :

خوب الان پروپرتی های جدول کامنت همشون ویژوال هستن ولی پست خیر ؟ جدول پست هم با جداول دیگه ارتباط داره !

http://up.vbiran.ir/uploads/1637140894332043279_Untitled.png