ورود

View Full Version : ساختار برنامه به صورت package یا یک فایل exe



حمیدرضاصادقیان
چهارشنبه 01 خرداد 1387, 19:24 عصر
سلام خدمت اساتید گرام.
میخواستم ببینم در ساختار یک برنامه اگر نرم افزار رو به صورت اینکه هر فرم آنرا داخل یک package قرار بدیم روش خوبیه یا اینکه همه اونها داخل یک فایل exe قرار بگیرند.
اگر مقدور باشه مزایا و معایب هرکدوم رو بگید ممنون میشم.
مثلا بعضی نرم افزارها مانند همکاران سیستم اکثر فرمهاشون رو داخل package ها قرار دادند.
یا بعضی نرم افزارها فقط یک فایل اجرایی دارند و همه فرمها به هم لینک هستند.
ایا در روشهای بالا اگر بخواهیم برنامه رو چند بخش کرده و هرکسی روی یک بخشی کار کنه به مشکلی برنمیخوره؟
بعد برای محدود کردن قسمتهای مختلف برنامه ، مثلا تمایل نداریم همه امکانات برنامه رو به مشتری بدیم.میخواهیم براساس هزینه ای که مشتری پرداخت میکنه بهش امکانات بدیم.
چه راههایی وجود داره و شما کدوم رو پیشنهاد میکنید.

ممنون از راهنماییتون..

hedi
پنج شنبه 02 خرداد 1387, 12:38 عصر
با سلام به شما دوست گرامی

اگر از DLL می خواهید استفاده کنید به این صورت که تمامی فرم های مربوط به نرم افزار خود را به صورت DLL در می آورید و سپس در یک برنامه که صفحه اصلی نرم افزار شما می باشد فقط DLL ها را فراخوانی می کنید. ( البته در صورتی که حجم DLL از نظر اندازه تا حد معقولی باشد)
مزایای این روش :
1-زمانی که شما از DLL استفاده می کنید در اصل تمامی فرم های نرم افزار خود را به صورت DLL در می آورید و به طور مثال اگر 10 تا فرم داشته باشد 10 تا DLL دارید که توسط برنامه اصلی شما هر با که نیاز باشد در حافظه آمده و بعد از استفاده از حافظه خارج می شود. این یعنی صرفه جویی در حافظه RAM ولی اگر تمام فرم ها در یک EXE باشند و به صورت AutoCreate اولا : حجم نرم افزار شما بالا می رود به طور مثال اگر 10 تا فرم هر کدام اندازه 1MB داشته باشند وقتی EXE شما ساخته می شود حجمی به اندازه تقریبا 6MB را می گیرد یا شاید کمتر اما از هر حیث که به این موضوع بنگریم وقتی EXE شما بخواهد در صف پردازشهای سیستم قرار بگیر به دلیل حجم آن سیستم باید در حین اجرای برنامه EXE تمامی Resource ها و منابع را در اختیار نرم افزار شما قرار دهد به همین دلیل این گونه برنامه ها در مقایسه با DLL ها کندتر در حافظه Load می شوند.
2-زمانی که تمامی فرم های شما در یک برنامه EXE است برای هر بار ایجاد یک EXE جدید محکوم به کامپایل کردن تمامی فرم ها هستید یعنی عملا برای تغییر در یک فرم باید دوباره یک EXE بسازید اما زمانی که از DLL استفاده می کنید تنها آن فرم را تغییر می دهید و کامپایل می کنید و همان DLL را در کنار برنامه اصلی قرار می دهید.

نکته : در فراخوانی DLL ها هم باید نکاتی را رعایت کنید چه بسا برنامه نویسانی که بواسطه مزایای DLL از آن استفاده می کنند اما به دلیل ناشی بودن، برنامه آن ها دارای مدیریت حافظه و سرعت مناسبی نیست.

تذکر : در فراخوانی DLL به صورت اتوماتیک تمامی DLL های تعریف شده بلافاصله در حافظه قرار می گیرند و عدم وجود تنها یک DLL باعث این می شود که برنامه اجرا نشود. اما اگر DLL را به صورت دینامیکی لود کنیم (یعنی این که هر وقت نیاز به استفاده از فرمی را داریم آن DLL را فراخوانی و بعد از استفاده حتما آن را از حافظه Unload کنیم .) این بهترین روش استفاده از DLL است به خصوص برای برنامه های تحت شبکه.

البته به این پست هم یک سری بزن خیلی مفیده :
http://barnamenevis.org/forum/showthread.php?t=9185

حمیدرضاصادقیان
پنج شنبه 02 خرداد 1387, 17:59 عصر
سلام.ممنون دوست عزیز. خوب حرفهای شما خیلی کامل و منطقی بودند.برای سوال دومم چه راهی پیشنهاد میکنید؟
برای اینکه قسمتهای مختلف برنامه رو به هرکسی ندهیم وبسته به هزینه ای که مشتری پرداخت میکنه بهش امکانات بدیم.
حالا اگر ما تمامی فرمها رو در یک exe قرار بدیم ولی به صورت دینامیکی اونو صدا بزنیم و هروقت کارمون تموم شد اونو آزاد کنیم بهتره یا بازم نظر اینه که از package ها استفاده بشه.
بازم ممنون.

حمیدرضاصادقیان
دوشنبه 06 خرداد 1387, 09:02 صبح
سلام.اساتید نظری در این مورد ندارند؟

vcldeveloper
دوشنبه 06 خرداد 1387, 19:56 عصر
قبلا درباره اش زیاد بحث شده. تاپیک های قبلی درباره DLL و Package ها را دیدید؟

حمیدرضاصادقیان
دوشنبه 06 خرداد 1387, 21:40 عصر
سلام.بله.مطالب فوق را کامل مطالعه کردم.ولی به جوابی که میخواستم نرسیدم.در اینکه برنامه به صورت package یا dll در بیاد بهتره ، اطمینان پیدا کردم. در مورد اینکه چطور هر قسمتی رو که میخواهیم به هرکسی بدیم میخواستم ببینم نظر اساتید چیه.