15
03
در قسمت Core یک فولدر ایجاد می کنیم و نامش را Objects می نامیم. این فولدر مکانی برای domain classes های پروژه هست. یعنی جایی که کلاس ها رو مینویسیم . ما برای پروژمون نیاز به domain classes های زیر داریم : Post، Category و Tag. هر پست مربوط به یک مجموعه یا Category خواهد بود که از تعداد بیشماری تگ ساخته شده است. بین مجموعه و پست ها یک رابطه ی یک به چند قرار دارد. یعنی بی نهایت پست می توانند در یک مجموعه قرار گیرند. بین پست و تگ نیز رابطه ی چند به چند قرار دارد. یعنی بیشمار تگ می توانند در بیشمار پست قرار گیرند. به بیان واضح تر یک یا چند تگ می توانند در یک یا چند پست همزمان استفاده شوند. یعنی مطابق شکل زیر قرار است ما دیتابیس را پیاده سازی کنیم.
خب سریع بریم سراغ کدنویسی کلاس اولمون یعنی Post . روی فولدرObject رایت کلیک می کنیم و یک کلاس جدید ایجاد می نماییم با نام Post
و کدهای زیر را در آن قرار میدهیم.
کدهای کلاس Post
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JustBlog.Core.Objects
{
public class Post
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual string ShortDescription { get; set; }
public virtual string Description { get; set; }
public virtual string Meta { get; set; }
public virtual string UrlSlug { get; set; }
public virtual bool Published { get; set; }
public virtual DateTime PostedOn { get; set; }
public virtual DateTime? Modified { get; set; }
public virtual Category Category { get; set; }
public virtual IList Tags { get; set; }
}
}
وقتی این کلاس را می نویسیم در خطوط آخر ارور مشاهده می کنیم. نگران نباشید. چون کلاس های دیگر ایجاد نشده اند این دو ارور را داریم. یعنی دو کلاس در این کلاس نام برده شده اند ولی دو کلاس وجود نداردند. درباره ی این کدها هم قبلاً در کتاب آموزش MVC.Net5 در یک روز توضیح مفصل داده ام . در اینجا فقط یک توضیح درباره ی یک فیلد می دهم. فیلد UrlSlug برای بهینه سازی وب سایت یا همان سئو نوشته شده است. یعنی موقع نوشتن پست یک فیلد اضافه دارید که می توانید URL را در آن بنویسید تا در مرورگر فراخوانی شود. مثلاً شما یک مقاله دارید می نویسید تحت عنوان " Advanced Linq in C# " و مطمئناً مرورگرها نمی توانند شارپ # را فراخوانی کنند و شما میخواهید از عنوان انگلیسی آن که همان Sharp است استفاده کنید. در تکست باکس UrlSlug می نویسیم “dvanced-linq-in-csharp” و مرورگر نیز با این عنوان مشکل ندارد و حتی یک آدرس بهینه شده نیز می باشد. البته در بخش دوم این مقاله مفصل راجع به سئو و آدرس دهی و روتینگ ها صحبت خواهیم کرد. فیلد Meta نیز برای نگهداری متادیتاهای description استفاده می شود که این فیلد نیز کاربرد سئو دارد. شاید برایتان جالب باشد که چرا ما تمامی فیلد ها را Virtual در نظر گرفته ایم. خب باید بهتون بگم چون ما از NHibernate داریم استفاده می کنیم و NHibernate یک پراکسی در زمان اجرا ( runtime proxy ) برای کلاس می باشد و پراپرتی ها ( یا همان فیلد ها ) را توسط این خصوصیت Virtual می تواند شناسایی کند. یعنی برای شناسادن هر پراپرتی به NHibernate آن پراپرتی باید Virtual باشد .
NHibernate چیست ؟ یک ORM است که تحت پلت فرم دات نت مایکروسافت کار میکند ، و یک Framework را برای کار راحتتر و با پیچیدگی کمتر با database پیشنهاد میکند. در این مدل فیلدهای Database به آبجکتهای معادلی، برای استفاده در محیط دات نت تبدیل (map) میشوند . و با این کار برنامهنویسان از پیچیدگیهای ارتباطی Database ای خلاص میشوند.
NH (NHibernate) یک نرمافزار کدباز ( Open Source ) رایگان است. و قسمتی از java ORMapper Hibernate است که کدی در قالب XML از موجودیتها (Entity) و روابط (Relation) ارائه میکند. و به صورت اتوماتیک برای ذخیره و بازیابی Data ها کد Sql تولید میکند، و شما میتوانید با متادیتاهای (meta data) ذخیره شده در source code کار کنید.
خب حالا بریم سراغ دو کلاس بعدی ؛ Category و Tag که اولی برای مجموعه ها و دومی هم برای تگ های پست استفاده میشه.
کدهای کلاس Tag
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JustBlog.Core.Objects
{
public class Tag
{
public virtual int Id
{ get; set; }
public virtual string Name
{ get; set; }
public virtual string UrlSlug
{ get; set; }
public virtual string Description
{ get; set; }
public virtual IList Posts
{ get; set; }
}
}
کدهای کلاس Category
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JustBlog.Core.Objects
{
public class Category
{
public virtual int Id
{ get; set; }
public virtual string Name
{ get; set; }
public virtual string UrlSlug
{ get; set; }
public virtual string Description
{ get; set; }
public virtual IList Posts
{ get; set; }
}
}
در این کلاس نیز از پراپرتی UrlSlug نیز به همان منظور استفاده شده است. تا اینجای کار سولوشن شما باید شبیه به عکس زیر باشد.
/ پایان گام دوم - بخش اول - طراحی و برنامه نویسی وب سایت خبری /
دسترسی به دیگر مقالات این آموزش
آموزش برنامه نویسی وب سایت خبری توسط MVC.Net - بخش اول گام اول
اگر دوست داشتید به اشتراگ بگزارید