PDA

View Full Version : آپدیت دو طرفه و شی گرای Front End و Back End



JaguarXF
پنج شنبه 01 مرداد 1388, 04:50 صبح
چونکه سی شارپ یک زبان شی گراست میخوام برنامه نویسی شی گرا انجام بدم باهاش.
مساله رو با مثالی مطرح میکنم. گرچه قبلا هم مسائل مشابهی مطرح کردم که آخرش یک جواب شی گرا کسی به من نداد. آدم کم کم شک میبره نکنه هنوز دارند روش ماژولار رو به اسم کلاس و سی شارپ مینویسند!:قهقهه:

مثال:
فرمی داشته باشم با یک اجرایی مثلا گرید . تولبار . لیست باکس و ...
مثلا گرید اطلاعاتش شامل سفارشات یک قلم کالا باشه . ( بدیهیست که کالا یک شی تعریف میشه) و داره اونها رو نمایش میده .
حالا مثلا یکی از سفارشات رو کنسل کنم . بنابراین باید تغییراتی هم در front end هم در back end رخ بده . مثلا تراکنشی انجام بشه . تولباری فعال بشه . پیغامی نمایش داده بشه . لیست باکسی رفرش بشه و ...

خب ! یک طراحی شی گرا برای این چی میتونه باشه؟ اینکه مثلا برم بنویسم Toolbar1.disabled !!! که نشد برنامه نویسی شی گرا!!!

اگر پاسخی به نظرتون میرسه بیان کنید تا بررسی کنیم.

پینوشت: شاید بشه از یکی از الگوهای طراحی رفتاری استفاده کرد مثل State . این یک ایده خامه و بررسیش نکردم .

amateur.programmer
پنج شنبه 01 مرداد 1388, 13:53 عصر
سلام دوست عزيز
با برداشتي كه من از صورت مسئله داشتم به نظر خيلي ساده مياد. و فكر مي كنم نداشتن تسلط كامل به كد نويسي در NET. مشكل شما باشه.
اگه خواستي يه سناريو كامل تر از مسئله بگو تا واست انجام بدم.

Open-Source
پنج شنبه 01 مرداد 1388, 19:19 عصر
چونکه سی شارپ یک زبان شی گراست میخوام برنامه نویسی شی گرا انجام بدم باهاش.
مساله رو با مثالی مطرح میکنم. گرچه قبلا هم مسائل مشابهی مطرح کردم که آخرش یک جواب شی گرا کسی به من نداد. آدم کم کم شک میبره نکنه هنوز دارند روش ماژولار رو به اسم کلاس و سی شارپ مینویسند!:قهقهه:

مثال:
فرمی داشته باشم با یک اجرایی مثلا گرید . تولبار . لیست باکس و ...
مثلا گرید اطلاعاتش شامل سفارشات یک قلم کالا باشه . ( بدیهیست که کالا یک شی تعریف میشه) و داره اونها رو نمایش میده .
حالا مثلا یکی از سفارشات رو کنسل کنم . بنابراین باید تغییراتی هم در front end هم در back end رخ بده . مثلا تراکنشی انجام بشه . تولباری فعال بشه . پیغامی نمایش داده بشه . لیست باکسی رفرش بشه و ...

خب ! یک طراحی شی گرا برای این چی میتونه باشه؟ اینکه مثلا برم بنویسم Toolbar1.disabled !!! که نشد برنامه نویسی شی گرا!!!

اگر پاسخی به نظرتون میرسه بیان کنید تا بررسی کنیم.

پینوشت: شاید بشه از یکی از الگوهای طراحی رفتاری استفاده کرد مثل State . این یک ایده خامه و بررسیش نکردم .


فکر میکنم شما معنی شی ء گرایی رو درست نمیدونید(شایدم بلعکس).
سی شارپ یه زبون 100 درصد شی گراء نیست ولی شی گرایی به وضوح درش معلومه.
:متفکر::متفکر::متفکر::متفکر:

JaguarXF
جمعه 02 مرداد 1388, 07:02 صبح
داستانش به این سادگی نیست که یک گرید رو به یک جدول وصل کنم و بعد چند تا دکمه هم برای کنسل کردن سفارشات و غیره!

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

حتی ساده ترین حالتش که کنسل کردن یک سفارش باشه رو هم کمی دوراندیشی! کنیم به همین سادگی نیست. یک خط کد بنویسم که کنسل بشه؟ بعد یک خط هم بنویسم که فلان دکمه غیرفعال بشه ؟ یک خط هم یک جای دیگه بنویسم که فلان گرید رفرش بشه ؟ بعد این میشه شی گرا یا ماژولار؟!؟!؟! ..... حالا دو سال بعدش یه تیم دیگری بخواد برنامه دیگه ای بنویسه که از قسمت سفارشات من هم استفاده میکنه ... اونوقت باید بیان دربدر داخل هزاران خط بگردند تا ببینند یا نبینند! کنسل کردن یک سفارش چه تاثیراتی روی سایر موارد باید داشته باشه؟!؟! یا اینکه نه ! یک design pattern براش ازبین الگوهای موجود پیدا کنم یا اینکه خودمون بنویسیم که بیاد این موارد رو به زیبایی! داخل اون کلاس Orders پیاده سازی کنه و همه کاری که اونها باید انجام بدهند استفاده از کلاس Orders و الگوی طراحیش در برنامه خودشون باشه .

من سوالهای ساده تری هم پرسیده بودم که جواب خوبی نگرفتم. واسه همینه میگم شک دارم که کسی داره برنامه شی گرا مینویسه!
مثلا :» http://barnamenevis.org/forum/showthread.php?t=167488
یا این یکی : که آخرش به Model View Controller براش نوشتم و حالا میتونم بگم برنامه شی گرا دارم .
http://barnamenevis.org/forum/showthread.php?t=154276

meysam_pro
جمعه 02 مرداد 1388, 09:51 صبح
سی شارپ یه زبون 100 درصد شی گراء نیست ولی شی گرایی به وضوح درش معلومه.
دوست عزیز #C یک زبان Pure object oriented هستش، این نظر رو از رو چی میگین؟
این حرف رو میشه واسه جاوا گفت(نوع داده ای int یه مثال نقضه). در مورد abstract data type ها در جاوا سرچ بزنید.

JaguarXF:
در اول توصیه میکنم در مورد RUP مطالبی بخونید، تا کارتون راحت پیش بره.
از روی یک سناریو فرضی(Use-case): یک آبجکت basket دارم که لیستی از LineItem ها رو داره(لیست از نوع Hashtable). آبجکت های LineItem من ، آبجکتی است که از Stuff به ارث رسیده و یک فیلد تعداد خرید و متدی به اسم SubTotalPrice داره. این متد تعداد رو * قیمت فی میکنه و بر میگردونه(تخفیف رو لحاظ نکردم). در آبجکت Basket متدی دارد به اسم AddStuff برای اضافه کردن یک قلم کالا و متدی به اسم RemoveStuff برای حذف کالا.
خب حالا سناریو شما: تو فرم، Basket رو Instantiate میکنم.چند تا تکسباکس دارم که مقادیر ورودی رو از GUI می خونه و با اونها از کلاس Stuff یدونه می سازه و به basket اضافه میکنه. خب حالا میخایم یدونه پاک بکنیم چی؟
من فرض می کنم که تو یه فرم دیگه موجودی های سبد رو نشون میدم تا حذف بکنیم یا قیمت کل(و درنهایت فاکتور و ...) رو انجام بدیم. واسه این کار آبجکت سبد رو از فرم قبلی پاس میدیم به فرم فعلی. یه متد به سبد اضافه میکنیم به اسم GetList که مقدار برگشتیش از نوع Datatable هستش، این متد رو تو فرم لود به Gridview وصل می کنیم. یک Label هم میزاریم واسه نوشتن مجموع قیمت و متدی تو سبد اضافه میکنم به اسمtotalPrice. تو این متد از لیست کالاهایی که اضافه شده متد subTotalPrice رو فراخوانی میکنم و جمع میزنم.
خب حالا میخوایم یکی رو حذف کنیم: یک نمونه از LineItem با اطلاعات خونده شده از Datagrid درست می کنم و متد RemoveStuff سبد رو باهاش فراخوانی میکنم. همین.

در مورد Design Pattern های هم Facade حتما لازمه و یک دوتا از الگوهای Creational هم لازم میشه.
موفق باشید.

JaguarXF
شنبه 03 مرداد 1388, 05:25 صبح
ممنون. باید یکی دو مرتبه دیگه جوابتون رو فکر کنم روش تا نظر بدم یا تکمیلش کنیم.

ولی در مورد الگوهای لازم : Observer بیشتر به کار ما نمیاد؟ یعنی Orders این الگو رو داشته باشه

meysam_pro
شنبه 03 مرداد 1388, 08:00 صبح
ببینید، استفاده از الگو یه چیزه اجباری نیست، بسته به تعامل آبجکتها و تطابقشان با یکی از الگوها، میشه از یکی استفاده کرد.
توصیه میکنم کتاب معروف لارمن به اسم Applying UML and Patterns رو بخونید(در مورد OOAD هستش) علاوه بر اون کتاب Judith bishop به اسم(اگه اشتباه نکنم) design patterns in c# 3.0 رو هم بخونید.
در ضمن اینکه از کدوم الگو اینجا استفاده بکنیم هم باید بگم که من اینرو از رو یه سناریوی فرضی نوشتم. شما یک UseCae کامل از سیستم در یک تاپیک جدید ایجاد کنید تا مراحل بعدی(Domain model diagram و ...) رو در بیاریم.

Ali_Mor
شنبه 03 مرداد 1388, 12:06 عصر
فرمی داشته باشم با یک اجرایی مثلا گرید . تولبار . لیست باکس و ...
مثلا گرید اطلاعاتش شامل سفارشات یک قلم کالا باشه . ( بدیهیست که کالا یک شی تعریف میشه) و داره اونها رو نمایش میده .
حالا مثلا یکی از سفارشات رو کنسل کنم . بنابراین باید تغییراتی هم در front end هم در back end رخ بده . مثلا تراکنشی انجام بشه . تولباری فعال بشه . پیغامی نمایش داده بشه . لیست باکسی رفرش بشه و ...

چیزی که به ذهن من میرسه:
وقتی سفارشی کنسل میشه، متدی از سفارش که مسئول کنسل نمودن است، یک event رو مبنی بر کنسل شدن سفارش Raise کند. حال در رویدادی از فرم که این اونت رو هندل می کنه، عناصری که حالاتشون وابسته به وضعیت سفارش هست(مثل تولبار و ...) رو تغییر حالت بدید