PDA

View Full Version : مقایسه ی دو design pattern



younesdoost
دوشنبه 13 آبان 1392, 12:02 عصر
با سلام.
در سدد ساخت یک فریم ورک برای شرکت می باشیم.
مسئولیت ساخت این فریم ورک به عهده ی بنده و فرد دیگری می باشد.
برای شروع کار در انتخاب دو design pattern به مشکل بر خوردیم.بنده با Façade کار می کنم و فرد دیگر با Repository.
مسئله اینجاست که اساسا به دنبال انتخاب یکی از این دو هستیم.می خواستم بدونم کسی اینجا هست که بتونه یک مقایسه ی خوبی از این دو رو نسبت به پروژه ی ما شرح بده؟
پروژه ی ما یک فریم ورک و کد ژنراتوری هستش که اساس کارش اینه که دست برنامه نویس رو تا حد ممکنه ببنده تا از داشتن کدهای جور وا جور جلوگیری بشه.هدف یکدست سازی است.
همچنین در اینکه کد ژنراتور ما به ساخت پروژه های باز یا بسته بپردازه در شک هستیم.اگر قرار باشد مثلا لایه ی Business را بسته بسازیم پس دیگر اسم آن Business Logical Layer نمی تواند باشد!
جمع بندی:
اگر دوستان لطف کنند و نظراتشون رو راجع به design pattern های نام برده شده بدهند و آن ها را به چالش بکشند و همچنین در مورد کلیات ساخت یک فریم ورک اطلاعاتی بدهند بسیار سپاس گذار می شوم.

cups_of_java
دوشنبه 13 آبان 1392, 18:38 عصر
مسئله اینجاست که اساسا به دنبال انتخاب یکی از این دو هستیم

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

Facade یک مجموعه کلاس یا متد جمع شده هست که بعضی جزییات و متد های داخلی فریم ورک رو می پوشونه و کارهای کلی ای که کاربر می تونه انجام بده رو تو خودش به عنوان متد های مختلف میاره.
Repository یک لایه اضافی بین Data Mapping و لایه Domain Model شماست. طوریکه که کلاس های Business یا Domain رو از جزییات Persistence و نحوه نگهداری و Query کردن جدا می کنه.

younesdoost
سه شنبه 14 آبان 1392, 07:45 صبح
ممنون.
میشه یه مثال ساده هم بزنید از هر کدوم.
من الان لایه ی Repository رو هم در سطح پایین پروژه هام دارم.یعنی تو ارتباط با پایگاه داده که هر کلاسش (که مسئول ریختن یک مدل در دیتابیس یا برعکسش هستش) از اینترفیس مخصوص به اون مدل ایمپلمنت میشه.این یعنی من دارم Facade و Repository رو با هم به کار می بندم؟

cups_of_java
سه شنبه 14 آبان 1392, 09:57 صبح
Repository بین کلاس هایی که دیتا رو توی دیتابیس می نویسن و کلاس های منطق برنامه شما قرار میگیره و یه شکل مستقل از دیتابیس برای دسترسی و بازیابی کلاس های داده ای شما به کلاس های منطق برنامتون میده. این در لایه های نزدیک به دیتابیس هست
اما Facade برعکسه. یعنی تو لایه بیرونی برنامه شماست. یعنی جایی که قرار هست یکسری کلاس و متدهاشون دیده نشه توسط فراخواننده ای که می خواد یه کاری رو توسط اون مجموعه انجام بده! Facade اصولن توی مرز بیرونی سیستم گذاشته میشه. ایندو ربطی به هم ندارن. گوگل کنی نمونه هاشون رو می تونی ببینی.

younesdoost
سه شنبه 14 آبان 1392, 10:50 صبح
ممنونم.
پس میشه گفت Facade یک سری کلاس هستند که به صورت dll وجود دارند و برای ما یک سری کارها رو انجام میدن.

cups_of_java
سه شنبه 14 آبان 1392, 12:30 عصر
پس میشه گفت Facade یک سری کلاس هستند که به صورت dll وجود دارند و برای ما یک سری کارها رو انجام میدن.

نه!‌Facade یک یا چند کلاس هستند که تو هر متدشون از کلاس ها و متدهای اوی کلاس ها استفاده می کنن تا یه کاری رو برای کاربر راحت تر انجام بدن. خود Facade چیزی رو انجام نمیده به تنهایی بنابراین!
Facade مث این می مونه که تو یه سری فایل رو بزاری توی یه فولدر و از طریق فولدر یه کاری رو همشون بکنی. یا مثلن مثل اینکه یه متد شرت کات واسه کاربر تعریف کنه که کاربر خودش نره تک نک کلاس ها و متدهاشونو صدا کنه تا یه کاری انجام بشه. ربطش به dll چیه رو نفهمیدم!

cups_of_java
سه شنبه 14 آبان 1392, 12:31 عصر
شاید dll رو به خاطر این مثال زده باشی که میدیمش به کلاینت تا متد هایی که توشه رو استفاده کنن! در واقع همون Interface بیرونیه برنامه!‌اگه منظورت این بوده آره شبیه هستش

younesdoost
سه شنبه 14 آبان 1392, 13:14 عصر
آره.یه همچین چیزی تو ذهنم بود که رفتم سمت dll.دستت درد نکنه.حالا متوجه شدم که چرا قابل مقایسه نیستن.
چون مثلا مقایسه ی سیب با پرتقال می مونه.2 تا مفهوم متفاوتن که میشه هر دوش توی یه پروژه باشن که نمی دونما ولی به نظرم اتفاقا وجود هر دوشون قوی تر می تونه باشه تا وجود تکیشون.