PDA

View Full Version : سوال: راهنمایی: ایجاد کدهای پاکیزه



RmeXXXXXXXXX
دوشنبه 10 فروردین 1394, 18:37 عصر
سلام! سوال:
مشغول برنامه نویسی لایه داده پروژه هستم. اکثر موجودیت هایی که دارم یک سری فیلد مشترک دارند! اومدم و برای این سری موجودیت هام یک کلاس انتزاعی تعریف کردم:
کدهام تمیز شدن منتها برای تنظیم در کلاس کانفیگ دچار مشکل شدم.


public abstract class ManagementPolicy
{
protected long _id;
protected DateTime? _dateOfLastUpdate;
protected RecordState _state;
protected User _userInfo;

public long Id { get { return _id; } set { _id = value; } }
public DateTime? DateOfLastUpdate { get { return _dateOfLastUpdate; } set { _dateOfLastUpdate = value; } }
public byte StateId { get { return (byte)_state; } set { _state = (RecordState)value; } }
public RecordState State { get { return _state; } set { _state = value; } }//ignore
public virtual User UserInfo { get { return _userInfo; } set { _userInfo = value; } }
};


میخوام همه ی کلاس های مورد نظرم از یک متد برای تنظیم استفاده کنند! همه سیاست های مرتبط با این اشیاء نیز توی کلاس انتزاعیم تشریح بشن نه توی تک تک کانفیگ ها!

public class Reminder : ManagementPolicy
{
private string _title;
private string _comment;
private int _remindDays;
private DateTime _dateOfCreate;
private DateTime? _dateOfRemind;

public string Title { get { return _title; } set { _title = value; } }
public string Comment { get { return _comment; } set { _comment = value; } }
public int RemindDays { get { return _remindDays; } set { _remindDays = value; } }
public DateTime DateOfCreate { get { return _dateOfCreate; } set { _dateOfCreate = value; } }
public DateTime? DateOfRemind { get { return _dateOfRemind; } set { _dateOfRemind = value; } }
};


چیکار کنم که تنظیمات مربوط به EF هم به طور خودکار تزریق بشن؟ یعنی توی کانفیگ این کلاس کاری به تنظیم فیلدهای کلاس انتزاعی نداشته باشم؟

Hamid2547
سه شنبه 11 فروردین 1394, 15:53 عصر
خوب توی کلاس های abstract متدت میتونه بادی (implementation) هم داشته باید، اون متد مورد نظر رو توی کلاس ابسترکت بنویس، اگر نمیخای از این قابلیت کلاس ابسترکت استفاده کنی خوب چرا خودت رو فقط به ارث بری از یک کلاس محدود کنی و بدبختی های دیگه؟ از اینترفیس استفاده کن، یا میتونی تنظیماتت رو بذاری توی کانستراکتور کلاس ابسترکت و بعد مقدارهاش رو از طریق ساب کلاس ها بفرستی به بیس کلاس مثل این:

public abstract class prog
{
public string Name { get; set; }
public int Birth { get; set; }

public prog(string Name, int Birth)

{

this.Name = Name;

this.Birth = Birth;

}

}

***************

class Program : prog

{

public Program(string Name, int Birth) : base(Name,Birth)

{

}

}

Mani_rf
سه شنبه 11 فروردین 1394, 16:19 عصر
سلام. حتما این مقاله (http://www.codeproject.com/Articles/539179/Some-practices-to-write-better-Csharp-NET-code) رو بخون تا هم پاسخ این سوال رو بگیری و هم با یک سری از استاندارد ها آشنا بشی.