PDA

View Full Version : چطور یک کامپوننت طراحی کنم؟



مهدی رحیم زاده
یک شنبه 21 شهریور 1389, 17:25 عصر
با سلام
در مورد طراحی کامپوننت توی سایت یک سری مطالب بود .حالا من میخوام یک کامپوننت طراحی کنم که Properties ها و Event های مورد نظر من رو داشته باشه .
باید چکار کنم ؟
با تشکر

saeedalg
یک شنبه 21 شهریور 1389, 20:21 عصر
باید توضیح بدی که کامپوننتت میخواد چی کار کنه و خودت چه ایده ای داری،

ولی در حالت کلی
اگه میخوای اصولی بنویسی :
باید یه سری مسایل پایه ای رو رعایت کنی (مثلا اونایی که تو کلاسای دیگه زیاد استفاده میشن و ممکنه مشکل با Refrence call داشته باشن ICloneable رو پیاده سازی کنن، Access Modifierهاتو تا میتونی عمومی ندی و ... ).
یه سری اصولی هم هستن که تو GRASP (http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design))هست و موارد اساسی اون رو باید رعایت کنی.
یه سری اینترفیس هم برای دادن خروجی تعریف کنی و کلاسایی که اونارو Impl کنه. تو این اینترفیس ها خوبه که اکثر رخدادها و Property های خروجی و توابع مورد نیاز رو بدی.

اگه میخوای سریع بنویسی:
بازم کامپوننت خودت رو خوب تعریف کن و اینترفیسای خروجی اون رو مشخص کن و براساس اون پیاده سازیت رو انجام بده، هر جا هم که دیدی تعریفت کمبود داره و با این تعریف به هدفت کامل نمیرسی کاری نداشته باش، پیاده سازیت رو تموم کن، بعد دوباره بیا Scope کارت رو تغییر بده و Refactor کن. (اگر مشکل اساسی داشت بازم سعی کن پیاده سازی رو تا ته پیش ببری).

میتونی هم اینترفیس نذاری یه سری کلاس تعریف کنی برای خروجی اهمیتی نداره فقط بدون میخوای چی بدی.

اگه میخوای هیچ کاری نکنی، بشین کد بزن.

(برنامه نویس شدن کاری نداره با 1 سال کار و کمی هوش آدم برنامه نویس میشه اما Developer شدن حوصله بیشتری میخواد).

مهدی رحیم زاده
یک شنبه 21 شهریور 1389, 20:40 عصر
ببینید بنده می خوام یک کامپوننت برای ارسال اس ام اس بنویسم و رایگان بدمش به دوستان تا این مشکل برای همیشه حل بشه و دوستان عزیز دنبال روش های غیر معمول نیفتن.
بنده خودم این رو توی یک Win Application پیاده سازی کردم . حالا می خوام که اونو به شکل یک کامپوننت برای استفاده عمومی سایر دوستان در بیارم که هم ساده باشه و هم کار آمد .
اما تا به حال کامپوننت طراحی نکردم .
ممنون میشم همراهیم کنید تا تمومش کنم . اگر وقت دارین توضیحات رو کامل تر کنید .
با تشکر

saeedalg
دوشنبه 22 شهریور 1389, 08:24 صبح
خوب پس کدتون رو نوشتید، میخواید همین جا upload کنید، من احتمالا امروز وقت کنم تغییرش بدم، فقط یه Sample هم ازش بذارید که زیاد وقت گیر نباشه. دوباره upload میکنم، خواستید شما یا هر کی دیگه تغییرش بدید و نهاییش کنید.
اما برای ارسال SMS تو سایتا برنامه زیاد هست.

CodeProject (http://www.codeproject.com/KB/IP/Send_and_Read_SMS.aspx)
microsoft (http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/20d91a65-314f-41e7-be74-7ec73361e6c9)

مهدی رحیم زاده
دوشنبه 22 شهریور 1389, 08:37 صبح
اما برای ارسال SMS تو CodeProject برنامه زیاد هست
یکی از مشکلاتی که اونا دارن اینه که اس ام اس چند بخشی رو ارسال و دریافت نمی کنن . بنده این کار رو انجام میدم .فقط توی دریافتش یکمی مورد دارم که اونم ایشالا خیلی زود حل می کنم .

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

ali_autumnal
دوشنبه 22 شهریور 1389, 10:18 صبح
دوستان لطفا ادامه بدید. منم دوست دارم یادبگیرم و خودم کامپوننت طراحی کنم.

saeedalg
دوشنبه 22 شهریور 1389, 12:58 عصر
نگاه کنید من تا اینجا به این نتیجه رسیدم که اینترفیس شما خروجیش باید دو تا تابع داشته باشه که یکی کار ارسال و یکی کار دریافت رو انجام میده و همچنین یه Property به نام Body, Number, و شاید هم پیش شماره کشور مربوطه و مسایل دیگه ای که خودتون بهتر میدونید (با توجه به اینکه تو Context هستید). پس یه کلاس دارید که این واسط رو پیاده سازی کنه.
شما عمل اتصال به پورت کام رو انجام میدید (احتمالا) برای همین ممکنه یه سری پارامترها که برای اتصال به پورت هستن رو پیش فرض بذارید ممکنم هست که از کاربر بخواید در صورت لزوم اونا رو به روز کنه، برای این کار میتونید پارامترای اتصال به پورت رو از یه XML بخونید و یا اینکه (بهتره) یه اینترفیس دیگه برای کاربر بذارید که این پارامترا رو مقدار دهی کنه.
خوب پس اینجوری شد که شما یه کلاس برای اینیت کردن و اتصال به کام دارید، یه کلاس برای ساختن و ارسال SMS یه کلاس هم دارید که این دو تا کلاس رو فراخوانی میکنه و در واقع Controller برنامست و شما تو اینترفیس controller امکان به روز کردن اطلاعات کام و ارسال و دریافت SMS رومیدید، اما . هر چند برنامه سادست ولی بهتره اینجوری بنویسید که عادت کنید تا راحتتر بعدا برنامه های بزرگتر رو بنویسید، کلاس SMS شما اگر میخواد اطلاعات پورت رو بخونه یه شی از کلاس پورت نمیخواد داشته باشه بلکه به کنترلر میگه اطلاعات پورت رو بده
(بازم میگم با توجه به اندازه برنامه اصلا درست نیست که یه کنترلر اینجوری داشته باشین اما برای کمتر کردن ارتباطات مابین اجزا پیشنهاد میکنم که ممکنه در آینده بخواید میل هم بفرستید، یه ایمیل بخونید و sms کنیدش و برعکس و ...، برای گسترش برنامه پیشنهاد میدم یه کنترلر بنویسید که این کارا رو انجام بده و ارتباطات دو بدو برنامه کمتر باشه).



public interface ISMS
{
int Number {get;set;}
int CountryNo {get; set;}
string Body {get; set;}
}

public interface IComPort
{
// Port Properties
bool Connect();
}

public interface IController
{
ISMS CreateSMS(); // Initializes SMS and return new ISMS instance
IComPort CreatePort(); // .......
bool SendSMS(ISMS);
bool SendSMS(ISMS, IComPort);
}


ممکنه خیلی ضعف داشته باشه ولی برداشتها و شناختی که از این مولفه دارم در همین حده.
اینکه برنامتون رو یه کلاس لایبرری هم کنید حتما بلید توضیح نمیدم.