PDA

View Full Version : گفتگو: ساخت یک برنامه دفترچه تلفنی به حالت لایه‌ای و استفاده و بنابر اصول.



اَرژنگ
یک شنبه 11 مهر 1389, 17:53 عصر
(این توپیک بنابر نیاز و درخاسهایه شرکت کنندگان حتماً تغییر پیدا میکند.)
در این توپیک به شکل گفتگو یک برنامه دفترچه تلفنی را به شکل لایه‌ای پیاده میکنیم.
نحوه کارکرد ما در این توپیک به شکل مشاوره‌ای است، من سعی میکنم که یک پروژه دفترچه تلفنی را با اصول و روشهایه درست به شکل تدریجی بسازم. دیگران با پیشنهادت و انتقادات خودشان دلایل روشهایه استفاده شده را زیره سوال ببرند و روشهایه متفاوت اراعه بدند. بعد از بررسی نظرات اراعه داده و جواب دادن به انتقادات و سوالات پروژه یک سطح توسعه داده میشه و بعد از جواب دادن به سوالات ، انتقادات و نظرات متفاوت در مورد سطح توسعه داده شده به نکات در مورد سطح بعدی رسیدگی میکنیم و به همین شکل ادامه میدیم.
پروژه را به این شکل پیاده کنیم : (پیشنهادی)
۰ . (لایه صفر )، با بیان اینکه چه اشیایی در دفترچه تلفن باید ازشان استفاده بشه، شروع میکنیم : شخص و شماره تلفن.
در پروژه ضمیمه شده در این پست با استفاده از اینترفیس قابلیتهایی که برایه کار با شئی "شخص" نیاز داریم بیان شده، این اینترفیس را در هر جایی که بخواهیم با "شئی" شخص کار کنیم را باید پشتیبانی کنیم (در مورد چگونگی پشتیبانی فعلاً مورد توجه‌مان نیست).
قسمتهایه بعدی :
۱.لایه کاربر: برایه کار کردن با اشیا "شخص" و "شماره تلفن" هایه "شخص". با استفاده از ویندوز فرمز و وینود داتا بایندینگ (داتاسورس، بایندینگ لیست و کنترلها و اشیایی که برایه نشان دادن و کارکردن بکار بیاند ).

۲.لایه مدیریت منطقی : در این لایه منطق مدیریت برایه جوابگوئی به نیازمندیهایه برنامه را پیاده میکنیم (گرفتن اشیا "شخص" و یا پیدا کردن یک "شخص" در زمانیکه تلفن داده شده بشه ، ...).
۳.لایه نگهداری دائمی : در این لایه با استفاده از روشهایه مختلف ثبت (استفاده از فایل، داتابیس ، فایل اکس ام ال ...) اشیا "شخص" و "شماره تلفن"هایه اشخاص نگهداری و برایه استفاده برنامه بازیابی میشند.
۴. یک پروژه برایه تست قسمتهایه مختلف برنامه.

موارد بالا بنا بر درخاست و نیاز شرکت کنندگان در این توپیک قابل تغییر است.
لطفاً با سوالات ، انتقادات خود به جهت دادن این توپیک کمک کنید.
از کسانی که در املا و دستور زبان فارسی مهارت دارند، عاجزانه درخواست کمک به این توپیک را میطلبم.
مرسی
اَرژنگ(این توپیک بنابر نیاز و درخاسهایه شرکت کنندگان حتماً تغییر پیدا میکند.)
در این توپیک به شکل گفتگو یک برنامه دفترچه تلفنی را به شکل لایه‌ای پیاده میکنیم.
نحوه کارکرد ما در این توپیک به شکل مشاوره‌ای است، من سعی میکنم که یک پروژه دفترچه تلفنی را با اصول و روشهایه درست به شکل تدریجی بسازم. دیگران با پیشنهادت و انتقادات خودشان دلایل روشهایه استفاده شده را زیره سوال ببرند و روشهایه متفاوت اراعه بدند. بعد از بررسی نظرات اراعه داده و جواب دادن به انتقادات و سوالات پروژه یک سطح توسعه داده میشه و بعد از جواب دادن به سوالات ، انتقادات و نظرات متفاوت در مورد سطح توسعه داده شده به نکات در مورد سطح بعدی رسیدگی میکنیم و به همین شکل ادامه میدیم.
پروژه را به این شکل پیاده کنیم : (پیشنهادی)
۰ . (لایه صفر )، با بیان اینکه چه اشیایی در دفترچه تلفن باید ازشان استفاده بشه، شروع میکنیم : شخص و شماره تلفن.
در پروژه ضمیمه شده در این پست با استفاده از اینترفیس قابلیتهایی که برایه کار با شئی "شخص" نیاز داریم بیان شده، این اینترفیس را در هر جایی که بخواهیم با "شئی" شخص کار کنیم را باید پشتیبانی کنیم (در مورد چگونگی پشتیبانی فعلاً مورد توجه‌مان نیست).
قسمتهایه بعدی :
۱.لایه کاربر: برایه کار کردن با اشیا "شخص" و "شماره تلفن" هایه "شخص". با استفاده از ویندوز فرمز و وینود داتا بایندینگ (داتاسورس، بایندینگ لیست و کنترلها و اشیایی که برایه نشان دادن و کارکردن بکار بیاند ).

۲.لایه مدیریت منطقی : در این لایه منطق مدیریت برایه جوابگوئی به نیازمندیهایه برنامه را پیاده میکنیم (گرفتن اشیا "شخص" و یا پیدا کردن یک "شخص" در زمانیکه تلفن داده شده بشه ، ...).
۳.لایه نگهداری دائمی : در این لایه با استفاده از روشهایه مختلف ثبت (استفاده از فایل، داتابیس ، فایل اکس ام ال ...) اشیا "شخص" و "شماره تلفن"هایه اشخاص نگهداری و برایه استفاده برنامه بازیابی میشند.
۴. یک پروژه برایه تست قسمتهایه مختلف برنامه.

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

پ.ن: این توپیک بعد از تجدید نظر در توپیک :
نوشتن برنامه با اصول درست
http://barnamenevis.org/forum/showthread.php?t=185062
ایجاد شده، به امید اینکه داشتن حالت گفتگو برایه یادگیری کمک کند نوع توپیک از آموزش به گفتگو تغییر پیدا کرد.
برایه ساده کردن از استفاده از مفاهیم پیشرفته مانند WCF, WPF, Entity Framework (فعلاً) چشم پوشی کردیم.

اَرژنگ
دوشنبه 12 مهر 1389, 01:38 صبح
با قسمت ۰ اشکالی نبود؟ همه چی واضح و جایی برایه توضیح نداشت؟
به هر حال، با این مثال قسمت ۰ را کامل شده تلقی میکنیم. در این مثال "شماره تلفن" و اینکه یک شئی "شخص" چند "شماره تلفن" را میتواند داشته باشد به وسیله اینترفیس علناً بیان شد.
در قسمت بعد (۱) به استفاده از این اینترفیسها برایه پیاده سازی لایه گوئی GUI میپردازیم.

اَرژنگ
دوشنبه 12 مهر 1389, 02:19 صبح
یک توپیک جدید برایه ساخت برنامه مدرسه به شکل گفتگو راه انداخته شد: http://barnamenevis.org/forum/showthread.php?t=251141
، (برایه سادگی میخواستم که فقط با ساخت برنامه دفترچه تلفن قرار بود باشد ولی بعد از دیدن توپیکهایه مربوط به ساخت مدیریت یک مدرسه هم بکار میاد، به خودم گفتم اگر اصولی میشه کار کرد باید بتونیم از پس ۲ برنامه باهم به سادگی در اومد.
در مورد اصولی بودن روشها من مسئولیت را به گردن میگیرم، بقیه هم میتونند با انتقاداتشان و سوالهاشان ما را به اینکه در راه درست پیش بریم کمک کنند. اگر نکاتی از اون توپیک به کار ما در این توپیک کمک کنند ازشان استفاده میکنیم (و بر عکس).

na3er-faraji
دوشنبه 12 مهر 1389, 14:14 عصر
خوب من میخاستم سوال هامو به صورت پیغام خصوصی بپرسم که با مشورت آقا ارژنگ واسه اینکه احتمالا این سوال ها شاید سوال های کسی دیگم باشه اینجا میپرسمشون.
1) اصلا این لایه bo چی هست؟ چرا تو برنامه به کار میره. چون من تو برنامه های سه لایه ندیده بودم و اینکه کدوم لایه ها بهش دسترسی دارند؟(مثال : لایه UI مستقیم نمیتونه به لایه DAL دسترسی داشته باشه)
برداشت من (این لایه مخفف busines object و برای نگهداری اشیا پروژه استفاده میشه . یعنی هر شیی که در برنامه داریم باید در این لایه نگهداری شود. لطفا بگید این برداشت من چقدر درسته و تکمیل ترش کنید )

2) چرا کلاستون رو به شکل اینترفیس پیاده سازی کردید ؟ اصولا چه موقع باید از اینترفیس ها استفاده بشه؟
چیزی که من راجع به interface شنیدم: interface در حقیقت شکل پیاده سازی یک کلاس است . در حقیقت ما متدهای یک کلاس رو تعریف می کنیم اما شکل واگذاریش رو به کاربر واگذار میکنیم ؟ چقدر درسته ؟ آیا در همه برنامه ها استفاده از interface لازمه؟

3) چرا شماره تلفن رو به صورت یک لیست در نظر گرفتید و مثل نام و نام خانوادگی به صورت یک پراپرتی معمولی در نظر نگرفتین؟ آیا دلیلش به خاطره اینه که هر فرد ممکنه چند شماره تلفن داشته باشه؟ خوب جوابی که شما در پست 2 دادین این بود ؟

"شماره تلفن" و اینکه یک شئی "شخص" چند "شماره تلفن" را میتواند داشته باشد
چرا شما نیومدین تلفن شخص رو جزیی از همون کلاس در نظر بگیرین و براش یک کلاس جداگانه تعریف کردید؟

سعی کنید توضیحاتی راجع به کدهایی که میزارید بدید و یا لینک بدید به سایت های دیگه و مثلا بگید برای اطلاعات بیشتر راجع به فلان فلان جا رو مطالعه کنید(مثلا شما تایپیک 1 رو با اینترفیس پیاده کردید پس یک لینک بدید به چند تا ریفرنس که خودتون مفید میدونید که مثلا کاربری که با اینترفیس آشنایی نداره بتونه درس ها رو درک کنه و خودشو با بقیه بکشه بالا)

amir-yeketaz
دوشنبه 12 مهر 1389, 14:37 عصر
سلام ... با اجازه ی استاد ارژنگ ، جواب چند تا از سوالایه swi عزیز و کنجکاو!!! رو میدم که اگه اشتباهه یا ناقصه که حتما هست!!! تکمیل بفرمایین ...

برداشت من (این لایه مخفف busines object و برای نگهداری اشیا پروژه استفاده میشه . یعنی هر شیی که در برنامه داریم باید در این لایه نگهداری شود. لطفا بگید این برداشت من چقدر درسته و تکمیل ترش کنید )
این که برای نگهداری اشیا باشه!!!! فکر نکنم درست باشه ... همان طور که از اسمش هم پیداس این لایه در واقع یه سری از داده هایی که در لایه UI قرار داره رو اعتبار سنجی میکنه و همین طور یه سری اطلاعات رو از لایه دیتا اکسس میگیره، برا یه سری از عملیاتی که کاربر انجام میده مثه سرچ و حذف و ...
اونی که شما میگین رو میشه اسمشو گذاشت Value object که وظیفش نگهداری فیلد ها و پروپرتی های مرتبطه ...


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

در نهایت یه درخواست از استاد ارژنگ:
امیدوارم کارتون رو با علاقه ادامه بدین (چون که دل خیلی ها رو شاد میکنین:لبخند:)

موفق باشید ...

اَرژنگ
دوشنبه 12 مهر 1389, 15:03 عصر
خوب من میخاستم سوال هامو به صورت پیغام خصوصی بپرسم که با مشورت آقا ارژنگ واسه اینکه احتمالا این سوال ها شاید سوال های کسی دیگم باشه اینجا میپرسمشون.
1) اصلا این لایه bo چی هست؟ چرا تو برنامه به کار میره. چون من تو برنامه های سه لایه ندیده بودم و اینکه کدوم لایه ها بهش دسترسی دارند؟(مثال : لایه UI مستقیم نمیتونه به لایه DAL دسترسی داشته باشه)


با تشکر از شما،
۱. BO, مخفف از Business Objects برایه بیان اینکه با چه گونه موجوداتی (Entity) هایی کار میکنیم استفاده شده. BO در حقیقت لایه نیست، بلکه تعریف قابلیتهایه موجوداتی که در تمام سیستم در زمان کار باید مراعات بشند.

در مورد دسترسی ما باید یک فرقی بین دسترسی در زمان کد نویسی و دسترسی در زمان اجرا قائل بشیم.
پروژه BO, برایه بیان کنتراکتهایی که در کل پروژه در زمان برخورد با چیزهایی که پروژه بر حصبشان بنا شده هست. در زمان اجرا BO نه به لایه‌ای و نه لایه‌ای به BO برخورد نمیکنه. بله در تمام لایه‌ها ما به شکل علنی اینکه ما کلاسهایی که از BO پیروی میکنند را پیاده میکنیم.
در حال حاضر درک این موضوع اگر سخت باشد بعد از پیاده سازی روشنتر خاهد بود.



برداشت من (این لایه مخفف busines object و برای نگهداری اشیا پروژه استفاده میشه . یعنی هر شیی که در برنامه داریم باید در این لایه نگهداری شود. لطفا بگید این برداشت من چقدر درسته و تکمیل ترش کنید )


بله کاملاً درست است و مقصود هم همان بود، منتها به جایه اینکه ما انتظارات را پیاده کنیم، انتظارات را فقط بیان میکنیم و هر چی که با تعریفهایه ما جور باشد برایه استفاده در هر لایه‌ای آزاد است.
برایه یک مثال به استفاده از عددها و جبر نگاه بندازید. اگر ما بگیم "۲" چیزه جالبی نیست، ولی اگر بگیم اکس به توان ۲ میشه ۴ و هر چی که قابلیت را دارد قابل قبول است، "۲" میشه فقط یک شکل خاص از جوابهایی که ما میتونیم قبول کنیم. "۲-" میشه یک جواب دیگر.
در حالت اول ما داشتن انواع جوابها را صلب میکنیم ولی اگر فقط انتظارات را بیان کنیم (اکس به توان ۲ میشه ۴)، قابلیت وجود جوابهایه بیشتر را هم دارا میشیم. فرق بین استفاده از اینترفیس و کلاس هم همین است. کلاس ما را به اینکه با چه چیز بخصوصی کار کنیم محدود میکنه، در حالتی که اینترفیس هیچ محدویتی برایه نوعی که جواب بده ایجاد نمیکنه، و هر چی که انتظارات را ارضا کند قابل قبول میدانه.



2) چرا کلاستون رو به شکل اینترفیس پیاده سازی کردید ؟ اصولا چه موقع باید از اینترفیس ها استفاده بشه؟
چیزی که من راجع به interface شنیدم: interface در حقیقت شکل پیاده سازی یک کلاس است . در حقیقت ما متدهای یک کلاس رو تعریف می کنیم اما شکل واگذاریش رو به کاربر واگذار میکنیم ؟ چقدر درسته ؟ آیا در همه برنامه ها استفاده از interface لازمه؟


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

در هیچ برنامه‌ای استفاده از اینترفیس لازم نیست، ولی مثل این میمونه که بگیم داشتن شمع احتیاجی به داشتن برق نمیزاره.

mostafa_shoakry
دوشنبه 12 مهر 1389, 21:57 عصر
با تشکر از شما،
با عرض پوزش، از خستگی جواب دادن به این قسمت را لطفاً به بعداً موکول کنیم؟

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

C Sharp
سه شنبه 13 مهر 1389, 10:54 صبح
خوشحالم از اینکه جناب آرژنگ کار پسندیده ای مثل این رو شروع کردن :تشویق:
امیدوارم در کنار هم بتونیم سطح دانشمون رو بالا ببریم .:چشمک:

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

اَرژنگ
سه شنبه 13 مهر 1389, 14:02 عصر
3) چرا شماره تلفن رو به صورت یک لیست در نظر گرفتید و مثل نام و نام خانوادگی به صورت یک پراپرتی معمولی در نظر نگرفتین؟ آیا دلیلش به خاطره اینه که هر فرد ممکنه چند شماره تلفن داشته باشه؟ خوب جوابی که شما در پست 2 دادین این بود ؟

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

سعی کنید توضیحاتی راجع به کدهایی که میزارید بدید و یا لینک بدید به سایت های دیگه و مثلا بگید برای اطلاعات بیشتر راجع به فلان فلان جا رو مطالعه کنید(مثلا شما تایپیک 1 رو با اینترفیس پیاده کردید پس یک لینک بدید به چند تا ریفرنس که خودتون مفید میدونید که مثلا کاربری که با اینترفیس آشنایی نداره بتونه درس ها رو درک کنه و خودشو با بقیه بکشه بالا)
۳.بله، همانطوری که شما گفتید فرض در طراحی بود که هر کسی ممکن است چند تا شماره تلفن داشته باشد. و به این شکل در کد ما این را صریحاً بیان کردیم (پیاده نکردیم).

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

در مورد کدهایه روشی که استفاده شده:
استفاده از اینترفیس اجباری نیست، بله میشه با کلاس شروع کرد ولی میخواستم که بیشترین مقدار انعطاف پزیری از همان اول داشته باشیم. با ستفاده از اینترفیسها ما قابلیتهایی را که باهشان کار خواهیم کرد از کلاسهایی که اون قابلیتها را پیاده میکنند جدا نگه میداریم.
به این شکل ما تبعیض نوعی قائل نمیشیم، بلکه هر نوع کلاس که اینترفیسها را پیاده کرده باشد برایه ما قابل قبول برایه کار است.
در مورد روش استفاده شده، این روش از فصل ۵ کتاب
Microsft .Net : Architecting Applications for the Enterprise
با استفاده از
( DTO (Data Transfer Objects دارد پیاده میشه.
در مورد کسانی هم که از اینترفیس خبر ندارند باید بگم که این آموزش زبان سی‌شارپ نیست، به اندازه کافی در مورد کلاس و اینترفیسها در همین تالار و یا اینترنت مقاله وجود دارد. من فقط روش استفاده ازشان را تحت عنوان برنامه‌نویسی لایه‌ای و پیاده کردن یک برنامه بخصوص نشان میدم.
همانطوری که یک نجار زمان یاد دادن میخ را تعریف نمیکنه، ما هم حداقل فرض میکنیم که این موضوع برایه کسانی است که از کلاس ، اینترفیس یا اطلاع دارند و یا میتونند بدست بیارند، ولی نشان دادن اینکه با اون مباحث چطوری یک برنامه لایه‌ای را پیاده کنند بر عهده این این توپیک است.

اَرژنگ
سه شنبه 13 مهر 1389, 14:10 عصر
خوشحالم از اینکه جناب آرژنگ کار پسندیده ای مثل این رو شروع کردن :تشویق:
امیدوارم در کنار هم بتونیم سطح دانشمون رو بالا ببریم .:چشمک:

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

اتفاقاً اشیایی که ساخته میشند باید قابلیت اینکه مقدار عوض بشد را داشته باشند ولی اینکه چگونگی عوض شدن مقدار را میشه مدیریت کرد بحث جداگانه ایست که بهش خاهیم رسید :چشمک:.

C Sharp
چهارشنبه 14 مهر 1389, 08:13 صبح
مشکل اینجاست که در اینصورت ما کلاسها رو مجبور میکنیم چیزی رو که نیاز نیست، پیاده سازی کنن ، از طرفی client ها هم انتظار دارن با set کردن این پراپرتی ها مقدار فیلد عوض بشه !
وقتی میشه به همین سادگی نشون داد که نمیشه این پراپرتی رو set کرد ، چرا باید این مسئله رو تو حاله ای از ابهام فرو برد ؟
شاید به بررسی بیشتری نیاز داره و تحقیق بیشتر (برای من):چشمک:

اَرژنگ
چهارشنبه 14 مهر 1389, 08:55 صبح
مشکل اینجاست که در اینصورت ما کلاسها رو مجبور میکنیم چیزی رو که نیاز نیست، پیاده سازی کنن ، از طرفی client ها هم انتظار دارن با set کردن این پراپرتی ها مقدار فیلد عوض بشه !
وقتی میشه به همین سادگی نشون داد که نمیشه این پراپرتی رو set کرد ، چرا باید این مسئله رو تو حاله ای از ابهام فرو برد ؟
شاید به بررسی بیشتری نیاز داره و تحقیق بیشتر (برای من):چشمک:

http://en.wikipedia.org/wiki/Data_Transfer_Object

C Sharp
چهارشنبه 14 مهر 1389, 09:25 صبح
اگه ممکنه بیشتر توضیح بدین ، چون متوجه ارتباط بین نحوه استفاده درست از Set با DTO نشدم !

اَرژنگ
پنج شنبه 15 مهر 1389, 00:58 صبح
اگه ممکنه بیشتر توضیح بدین ، چون متوجه ارتباط بین نحوه استفاده درست از Set با DTO نشدم !
چشم،
ببینید ما داریم از اینترفیس برایه بیان ساخمانی برنامه استفاده میکنیم.
من فکر کردم که استفاده از پترن DTO به این قابلیت نیاز دارد. (شاید هم نیاز ندارد، و ما ین موضوع را امتحان میکنیم).
در مورد این نقطه : "مشکل اینجاست که در اینصورت ما کلاسها رو مجبور میکنیم چیزی رو که نیاز نیست، پیاده سازی کنن "
۲ سوال را باید جواب داد تا دلیل روشن بشه:
۱.چه کلاسهایی مجبور هستند که پیاده سازی کنند؟
۲. "چیزی را که نیاز نیست"، نصبت به کی ؟ برایه کی نیاز نیست؟
ما در اینترفیس چیزی را که برایه کار ما لازم هست بیان میکنیم، یعنی اینکه شما علناً اعلان میکنید که اگر شما این اینترفیس را پیاده کنید ما میتونیم با شما کار کنیم. پس این اینترفیس برایه کار ما نه اینکه فقط مورد نیاز هست، بلکه ضروره هم هست، ما بر وجود داشتنش حساب میکنیم.

اگر هم که در مورد داشتن set من نتونستم جواب قانع کننده بدم، در مرحله بعدی این اشیا باید تحت داتا بایندینگ قابل دسترسی باشند.

ولی حالا خود من هم برایه امتحان این پروژه را ۲ شاخه میکنم، یکی با داشتن set و یکی بدونه داشتنش. با نداشتن set ، ما نمیتونیم رویه اون قابلیت حساب کنیم، ببینیم به چه مشکلهایه برمیخوریم، شاید هم اصلاً به هیچ اشکالی برنخوردیم و طراحیمان ساده تر شد، فکر کنم بهترین کار اینه که به جایه دلیل آوردن هر دو روش را با هم امتحان کنیم و با هم مقایسه کنیم.
با تشکر از نظرتان، این پروژه ۲ شاخه شد :)
اگر کسی دیگری هم نظری دارد لطفاً برمایند این پروژه را ما به شکل چند شاخه جلو ببریم.
اگر هم که خیر، تا دوشنبه ۲ تا پروژه که مرحله GUI ایش پیاده شده را میفرستم.

C Sharp
پنج شنبه 15 مهر 1389, 08:43 صبح
با صحبتهاتون کاملا موافقم و ممنونم از حوصله ای که بخرج میدین:بوس:.

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

اَرژنگ
پنج شنبه 15 مهر 1389, 11:26 صبح
با صحبتهاتون کاملا موافقم و ممنونم از حوصله ای که بخرج میدین:بوس:.

ولی حرفم اینه که تا وقتی واقعا نیاز به استفاده از set نیست ازش نکنیم.
حالا نکته که تو جمله بالا دیده میشه واژه نیاز هست و هم خانوادهاش نیازمندی ، نیاز سنجی و ... :لبخند:
یعنی استفاده از set و .... به این بستگی داره که آیا نیاز سیستم این رو میطلبه یا نه ، اگر نطلبید هرگز استفاده نشه.
در مورد این پروژه (دفترچه تلفن) به نظرم ما (بجز شما آرژنگ عزیز) هنوز نمیدونیم این سیستم چه نیازهایی براش تعریف شده .
هدف از این تاپیک آموزش توسعه نرم افزار از صفر نبوده وگرنه بنظرم خوب بود از ابتدای راه یعنی بدست آوردن نیاز مندیها ، تحلیل و طراحی و ... شروع کنیم
تنها جوری که میتونیم مطمعن باشیم اینه که امتحان کنیم :) بقول انگلیسیها :
The proof of pudding is eating it.
پروژج را ۲ شاخه میکنیم ببینیم چی میشه :)
اگر در شیمی و فیزیک آزمایش وجود دارد چرا در برنامه نویسی نباشد؟

تنها نیازهایی که الان میدانیم :
قابلیت ثبط و ویرایش "شخص" و "شماره تلفنهاش" است.
و هر نیازمندیهایی که فرستاده بشند را بعد از توافق پیاده میکنیم.

na3er-faraji
شنبه 24 مهر 1389, 15:04 عصر
ما همچنان منتظر ادامه این پروزه هستیم

na3er-faraji
سه شنبه 27 مهر 1389, 20:10 عصر
فک کنم دیگه تو تالار سی شارپ هیچ موجوده زنده ای فعالیت نمیکنه؟؟؟