ورود

View Full Version : سوال: ساخت نرم افزار با wpf



maktab
سه شنبه 13 دی 1390, 01:49 صبح
سلام
من می خوام یه نرم افزار طراحی کنم که با win app هم میشه ساخت ولی برای اینکه می خوام ظاهری بهتری داشته باشه مجبورم از برخی کامپوننت های آماده استفاده کنم (مثل جانوس و...). ولی وقتی امکانات wpf را دیدم فکر کردم بهتر باشه این نرم افزار را با wpf درست کنم. ولی سوالی که برام پیش آمده اینه که نکنه سرعت برنامم پایین تر بیاد!
در کل اگر برنامه ای مثلا تجاری بشه با win forms app ساخته بشه (حتی بدون ابزار آماده). شما مناسب می دونید که با wpf ساخته بشه؟ (بیشتر سرعت برنامه برای من مهمه - چون ممکنه بر روی سیستم های سطح پایین اجرا بشن)

Amir Oveisi
سه شنبه 13 دی 1390, 10:36 صبح
در مورد اين سوال شما به اندازه كافي بحث شده تو اين تالار و تالارهاي ديگه. كاش جستجو مي كرديد قبل از ايجاد تاپيك.
در كل اگه بخوام جواب بدم به سوالتون بايد بگم كه اين نكته رو در نظر داشته باشيد كه سويچ كردن روي wpf بدون آگاهي كامل از اون و آشنايي كافي باهاش ممكنه براتون مشكل ساز باشه چون wpf فقط ساخت ظاهر زيبا نيست كارش بلكه كلا يه library جدا و مستقل از win form ها هست و داراي ساختار متفاوتيه و به خاطر همين تفاوت، مفاهيم كاملا جديدي توش معرفي شدند كه قبلا نبوده تو win form ها (و ممكنه نيار به آموزش تيم يا خودتون باشه). اين يك طرف قضيه است كه حتما قبل از شروع بايد در موردش فكر كنيد و تصميم بگيريد.
طرف دوم قضيه سرعت برنامه هاي wpf هست كه بنده بر اساس تجربه ميگم براي برنامه هاي تجاري (در هر مقياسي كه دات نت اجازه ميده) سرعتش از win form بيشتره. البته به اين نكته هم توجه داشته باشيد كه از هر سيستم سخت افزاري بايد در حد خودش انتظار داشته باشيد. در ضمن وجود كارت گرافيكي مستقل (onboard نباشه) ميتونه خيلي سرعت برنامه هاي wpf رو بالا ببره مخصوصا در برنامه هايي كه تعداد كنترل ها روي پنجره ها (فرم ها) زياد باشه. چرا كه سيستم rendering در wpf با استفاده از directx انجام ميشه و به خوبي از hardware accelerator بهره مي بره.

در آخر تصميم گيرنده شما و سياست هاي شما يا شركت شما خواهد بود.

موفق باشيد

maktab
سه شنبه 13 دی 1390, 12:25 عصر
گفته های شما در مورد اختلاف های زیاد نحوه پیاده سازی win app با wpf کاملا درسته. ولی علت این سوالم بخاطر همینه! من که با win app کار کردم اگر برای شروع دقیقا با همان روش های win app بیام و با wpf برنامه بسازم. و از برخی امکانات که در win app نداشتم (مثل زیباسازی فرم ها) در wpf استفاده کنم. آیا به صرفه است؟ یا بهتره از همان کامپوننت های آماده استفاده کنم؟

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

Amir Oveisi
سه شنبه 13 دی 1390, 12:39 عصر
من که با win app کار کردم اگر برای شروع دقیقا با همان روش های win app بیام و با wpf برنامه بسازم.
در اكثر موارد اصلا نميتونيد اين كار رو انجام بديد.


آیا به صرفه است؟
اين رو بايد خودتون به نتيجه برسيد

maktab
سه شنبه 13 دی 1390, 13:37 عصر
در اكثر موارد اصلا نميتونيد اين كار رو انجام بديد.


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

البته این چیزی که گفتم برای شروعه. بعد کم کم به روش های خود wpf روی میارم (پس از یادگیری)

Amir Oveisi
سه شنبه 13 دی 1390, 16:38 عصر
خوب این مثالتون یه چیزی هست که کلی و مفهومیه و تقریبا با هر تکنولوژی و زبانی قابل اجراست. منظور من از حرفم این بود که مثلا شما اگر یاد گرفتید که برای Datagrid Manipulation تو win form ها یک روشی رو به کار ببرید این روش ها دیگه تو wpf app قابل استفاده نخواهد بود. یا مثلا ممکنه جایی لازم بشه که حتما برای انجام یه کاری از Routed Event ها استفاده کنید و دیگه CLR Event به درد نخوره برای اون کار؛ بنابراین اگر Routed Event‌ ندونید چیه و به چه درد میخوره و چجوری میشه ازش استفاده کرد ممکنه به روش هایی دست بزنید که کل کارتون رو به هم بریزه و دچار مشکل کنه.
استفاده از EF تو هر دو یکسانه (به شرطی که زبانتون یکی باشه مثلا هر دو #C). معماری سه لایه هم تو هر دو قابل پیاده سازیه ولی اگر میخواید بالاترین کارایی و سرعت رو تو wpf app داشته باشید باید از استاندارد ها و روش های مختص خود اون برای انجام کارهاتون استفاده کنید. و مسلما هر تکنولوژی دیگه ای هم بود باید اینطور می بود.
در مورد این که می صرفه یا نه قبلا هم عرض کردم که خودتون باید تصمیم نهایی رو بگیرید. من اگر در شرایط شما بودم و اطلاعات و تسلط کافی در مورد wpf نداشتم یک کار تجاری رو به هیچ وجه باهاش شروع نمی کردم چون ریسک خیلی بالایی داره تو fail شدن کل پروژه و اگر هم fail نشه به احتمال زیاد کارایی محصول به دلیل استفاده از روش های اشتباه برای حل مساعل (همزه نداره keyboard ام!) بسیار پایین تر از حد انتظارتون خواهد بود.


البته این چیزی که گفتم برای شروعه. بعد کم کم به روش های خود wpf روی میارم (پس از یادگیری)
بهتره برای شروع یک کار تستی و غیر تجاری انجام بدید و بعد از یادگیری برید سراغ پروژه های تجاری.

موفق باشید