9 تصمیم اساسی در طراحی نرم افزار تحت ویندوز
طراحی و توسعه نرمافزار های تحت ویندوز برای سالها بر جهان چیره بود. اما با پیشرفت اینترنت، برنامههای تحت وب با سرعت زیادی از نرمافزارهای دسکتاپ سبقت گرفتند. با محبوبیت گوشیهای هوشمند، تقاضا برای نرمافزارهای موبایل بسیار زیاد شد و بنابرین برنامههای دسکتاپ به رتبه سوم سقوط کردند.
ممکن است گفتههای بالا برای شروع حقیقت داشته باشد اما همچنان حجم عظیمی از توسعه نرمافزاری در زمینه برنامههای تحت دسکتاپ اتفاق میافتد. برنامههای Excel ، Adobe Photoshop و Chrome را در نظر بگیرید.
در کنار این برنامههای هیولا، دلایل خوب زیادی برای توسعه برنامههای دسکتاپ جدید وجود دارد:
- برنامه نیازی به اتصال اینترنتی ندارد
- سازنده برنامه تعامل بهتری با کاربر دارد. برنامههای تحت وب در محیطی ایزوله و محدود اجرا میشوند و جلوی بسیاری از تعاملات را میگیرند.
- برنامههای دسکتاپ عملکرد بهتری از برنامههای تحت وب دارند.
- اجرای الگوریتمهای سنگین در سمت کلاینت ممکن است اما در برنامههای تحت وب بسیار مشکلتر است.
- گاهی برایتان مهم نیست که برنامه وب باشد یا دسکتاپ؛ اما تیم شما با تکنولوژیهای دسکتاپ آشناتر است
توسعه برنامه دسکتاپ به دلایلی عالی است. شما با تکنولوژیهای بالغ و کاملی سر و کار دارید که آزمون زمان را با موفقیت گذراندهاند. اشکالزدایی نیز به همان اندازه عالیست. مسلماً برنامههای دسکتاپ پیچیدگی کمتر و توسعه آسانتری دارند. بهصورت خلاصه: شما خوش شانسید!
مثل همه نرمافزارها، راههای زیادی برای توسعه نرمافزارهای دسکتاپ وجود دارد. این راه ها شامل زبانهای مختلف برنامه نویسی، فریمورک و معماری برنامه میشود. همه اینها به نیازهای منحصر بفرد محصول شما بستگی دارند.
در این مطلب 9 مورد مهم را که باید ابتدای توسعه نرمافزارهای دسکتاپ در نظر بگیرید، معرفی می کنیم.در نظر گرفتن این موارد میتواند شما را از کدنویسی دوباره نجات دهد، تکنولوژی شما را دو برابر کند و باعث شود شما چیزی را انتخاب کنید تا بعدا که دیگر راه برگشت ندارید، حسرت آن را نخورید.
1. انتخاب تکنولوژی توسعه رابط کاربری (UI Development Technology)
اولین نیاز کسب و کار شما انتخاب یک تکنولوژی UI است. تعداد زیادی UI Framework برای ویندوز وجود دارد که هرکدام مزایا و معایب خود را دارد. بیشتر این تکنولوژیها شما را محدود به استفاده از یک زبان برنامه نویسی بخصوص میکند که باید این موضوع را بصورت جدی با توجه به تواناییهای گروهتان در نظر بگیرید.
برترین تکنولوژیهای حاضر اینها هستند:
- UWP – جدیدترین تکنولوژی مایکروسافت در زمینه برنامههای دسکتاپ. مانند WPF بر اساس XAML است ومیتوانید با C# , VB.Net وC++ بنویسید اما بیشتر برنامهها با C# نوشته شدهاند. موارد کلیدی در UWP:
- برنامه در محیط ایزوله (Sandbox environment) کار میکند لذا در تعامل با PC محدودیت دارید.
- فقط در ویندوز 10 کار میکند
- انتشار فقط از طریق Microsoft Store انجام میگیرد. مایکروسافت 30% از سود شما را برای خودش برمیدارد.
- UWP منحنی یادگیری نسبتاً سرازیری دارد
- WPF – یک تکنولژی بالغ و محبوب از مایکروسافت بر اساس XAML. میتوانید به زبانهای C# یا VB.Net بنویسید.
- WPF قابلیتهای قدرتمندی در زمینههای Templating, Styling, Binding دارد که مناسب برنامههای بزرگ هستند.
- WPF منحنی یادگیری نسبتاً سرازیری دارد
- روی هر ویندوزی قابل اجراست
- یک تکنولوژی بالغ که از 2006 در دسترس است
- WinForms – یک تکنولوژی قدیمیتر باز هم از مایکروسافت که پیش از WPF بسیار محبوب بود.برعکس WPF و UWP، Winforms به رابط Drag&Drop مربوط به Visual Studio Designer متکی است.
- Drag&Drop Designer باعث میشود که WinForms برای برنامههایی که سفارشیسازی بخصوصی نداشته و رابط کاربری Responsive دارند، بسیار کارآمد است.
- یادگیری آسان
- روی هر ویندوزی کار میکند
- Electron – یک فریمورک که اجازه توسعه برنامههای دسکتاپ را با استفاده از تکنولوژیهای وب (HTML/CSS/JavaScript) میدهد. جادوی Electron اینجاست که از Node.Js و Chromium برای ایجاد Web View در پنجرههای دسکتاپ استفاده میکند. Electron برای مدتی محبوب شد و تعدادی برنامه بزرگ توسط آن توسعه داده شده است مانند Slack, Github Desktop و Visual Studio Code.
- Electron کراس پلتفرم است
- حافظه زیادی اشغال میکند، حتی برای یک برنامه ساده ‘Hello World’
- مصرف سنگین CPU
- روی ویندوز 7 یا قدیمیتر اجرا میشود
- تعامل آن با PC بسیار کمتر از دیگر تکنولوژیها است. البته این امر با Slim API یا فراخوانی مستقیم فایلهای .dll با Node.js امکانپذیر است.
- JavaFX و Swing – دو UI Framework از شرکت Oracle. هردو کراس پلتفرم هستند. JavaFX جدیدتر است و Oracle پیشنهاد کرده که از آن به عنوان جایگزین Swing استفاده شود، اما مقبولیت نسبتا کمی دارد. در سمت دیگر، Swing، قدیمیتر است و بیشتر استفاده میشود اما همچنان محبوبیتی کمتر از WPF و WinForms در برنامههای ویندوز دارد. یکی از برنامه نمونه که با Swing نوشته شده JetBrain از شرکت IntelliJ است.
-
- هردو کراس پلتفرم هستند
- هردو تحت Java نوشته شدهاند لذا کاربر نهایی باید JRE را نصب کرده باشد
- Qt – یک فریمورک کراس پلتفرم و تحت زبان C++. شما میتوانید UI Object را بصورت کد بنویسید یا از QML استفاده کنید که زبانی اخباری شبیه JSON است. نمونه برنامه ای که با Qt نوشته شده Maya است.
برای کمک به انتخاب شما، میتوانید به پرسشنامه سایت Telerik در سال 2016 نگاهی بیاندازید که از توسعه دهنده ها پرسیده بود: «از کدام تکنولوژی برای ساخت برنامههای ویندوز دسکتاپ استفاده میکنید؟». نتایج به شکل زیر است:
با توجه به این نتایج، WPF و Winforms کاملا بر بازار چیره هستند. بسیار جالب است که بعد از اینهمه سال همچنان WinForms اینقدر محبوب است.
پرسشنامه Telerik ممکن است تمام بازار را تحت پوشش قرار ندهد زیرا اکثر مشتریهایش در فضای کنترل .NET هستند. همچنین این نظرسنجی مقداری قدیمی است. لذا راه دیگری برای بررسی محبوبیت، چک کردن سایت StackOverflow است.ما Tag همه تکنولوژیها را جستجو و مقایسه کردیم و این نتایج بدست آمد:
برای مثال، WPF تعداد 145K سوال در کل، 23.5K بیننده و 259 سوال در این هفته دارد. در طرف دیگر، Electron تعداد 6.1K سوال در کل، 2.5K بیننده و 45 سوال در این هفته داشته. اطلاعات دقیق از اینجا قابل مشاهده است.
ممکن است استدلال کنید که تعداد سوالها بیانگر میزان محبوبیت یک فریمورک نیست زیرا ممکن است یک فریمورک با API آسان وجود داشته باشد که سوالات کمی دارد. اما عقیده من این است که در واقعیت، تعداد سوالات به خوبی نشان دهنده میزان استفاده از آن محصول است. با توجه به این، پر واضح است که WPF ستاره راک است و UWP و Electron دارای کمترین محبوبیت اند. تنها قافلگیری برای من، محبوبیت نسبی Qt بود.
خیلی قانع کننده است که یک تکنولوژی محبوب انتخاب کنیم؛ تعداد توسعه دهندههای باتجربه برای استخدام زیاد است، ابزارها و مستندات و Libraryهای شخص ثالت بیشتر. علاوه بر این، شانس بیشتری وجود دارد که بخاطر شایستگی اینقدر محبوب شده.
شخصاً طرفدار پروپاقرص WPF هستم. مزایای زیادی دارد از جمله بهترین مکانیزم Binding و بهترین زیربنای Templating ای که تابحال با آن کار کرده ام.
بنا به این گفته ها، نکات خیلی زیادی برای در نظر گرفتن حین انتخاب تکنولوژی وجود دارد:
- وقتی قصد ساخت کراس پلتفرم داریم، تنها گزینه ها Electron, Qt, Swing, JavaFX هستند.
- اگر محصول تحت وب دارید، Electron را در نظر داشته باشید تا بتوانید از کدی فعلی دوباره استفاده کنید.
- اگر تیم شما متمایل به وب است، Electron را در نظر داشته باشید.
- اگر تیم شما متمایل به جاوا است، Swing و JavaFX انتخاب اندکی بهتر هستند.
- WPF و UWP دارای شیب منفی یادگیری بیشتری هستند تا WinForms (اما اگر برنامه شما به اندازه کافی بزرگ است ارزشش را دارد)
- در Electron شما میتوانید از مزیت تعداد بسیار زیاد web library ها و control ها بهره ببرید.
- ضمن اینکه C++ در مقایسه با C# و Java پرحاصل به حساب نمی آید، قانع کننده است از Qt استفاده کنید وقتیکه برنامه شما بشدت در حال تعامل با لایه محلی C++ میباشد. به یاد داشته باشید امکان استفاده از .NET با یک لایه C++ توسط Pinvoke یا C++/CLI وجود دارد، اما تلاش بیشتری میطلبد.
2. انتخاب استراتژی استقرار
نقشه شما برای رساندن برنامه به دست مشتری چیست؟ این یک تصمیم بیزینسی است پیش از اینکه به گزینههای تکنولوژی فکر کنید. محدودیت ها را در برابر بهینه ترین تجربه کاربری بسنجید.
برای مثال، مرورگر Chrome یک برنامه دسکتاپ است که آپدیت اتوماتیک دارد بدون اینکه حتی کاربر متوجه شود. این ویژگی برای یک Consumer App (اپ مصرف کننده) ممکن است عالی باشد، اما کاربران یک Enterprise App (اپ سازمانی) ممکن است نسبت به آپدیت ها بسیار حساس باشند و بخواهند از زمان ارایه آپدیت ها و تغییرات جدید آپدیت باخبر باشند.
بعضی مصرف کنندگان ، مثل برنامههای دستگاههای نظامی، ممکن است بطور کلی به اینترنت دسترسی نداشته باشند و آپدیت از طریق فلش درایو انجام شود.
منظور من این است که استقرار برنامه در درجه نخست یک تصمیم بیزینسی است و سپس یک تصمیم تکنولوژیک. حالا که مشخص شد، ببینیم که چه گزینه هایی داریم:
- یک راه، Windows Store است. کار انتشار و ارایه آپدیت را برایتان سهل میکند. اگر با بیزینس شما همخوان است و با محدودیتهای آن کنار می آیید، گزینه بسیار خوبی است (محدودیت هایی نظیر اینکه فقط در 8.x+ Windows قابل استفاده است، محیط ایزوله و …). در ابتدا فقط برنامههای UWP مجوز انتشار در Windows Store داشتند. اما مایکروسافت با ارائه Desktop App Converter که کارش تبدیل برنامههای WinForms و WPF به UWP است، این مشکل را حل کرد.
- ClickOnce راهکاری از طرف مایکروسافت است برای استقرار برنامه WPF شما (و نه UWP). ClickOnce کار بسته بندی، نصب و آپدیت برنامه شما را به عهده میگیرد. در بین برنامه نویسان ، ClickOnce کمی بدنام است و من در انتخاب این تکنولوژی محتاط عمل میکنم.
- Squirrel – نصبکننده و آپدیت کننده دیگری مانند ClickOnce. در حقیقت شعار این برنامه این است: «شبیه ClickOnce است، ولی کار میکند» چیزهای خوبی درباره اش شنیده ام و ارزش تحقیق کردن را دارد، شاید مناسب کار شما بود.
- Chocolatey – راهکاری جذاب برای توزیع و آپدیت آسان برنامه. لازم است که کاربرChocolatey را روی PC نصب کند و سپس از خط فرمان برای نصب و آپدیت برنامه شما استفاده کند. بنظر کاربر پسند نمی آید ولی در واقع خیل باحال است. بیشتر مناسب مشتریانی است که خودشان توسعه دهنده اند.
- راهکار سفارشی: از یک نصبکننده استفاده کنید و خودتان مکانیزم آپدیت را بنویسید. طبق تجربه شخصی، این راه حلی است که بسیاری شرکتها ترجیح میدهند.ایده این است که فایلهای نصب ورژن برنامه خودتان را در یک مکان معین در شبکه قرار دهید تا برنامه دسکتاپ آن محل را دایما query کند. البته لازم است که تعدادی مسایل را خودتان به عهده بگیرید، نظیر فایلهای مانیفست و تاییدیه گواهی و …
3. انتخاب نصبکننده
نصبکننده (Installer) بخشی از پروسه استقرار است، اما بطورمستقل به آن میپردازیم چون بخش بزرگی است.
وظیفه نصبکننده این است که برنامه شما را در قالب یک نصبکننده بستهبندی کند. این نصبکننده میتواند یک فایل setup.exe یا .msi باشد. موقع استقرار، کاربر یا برنامه شما، برنامهی نصب را اجرا میکند که بدنبال آن، برنامه بسته بندی شما به PC کپی میشود و تعدادی کاردیگر نیز انجام میگیرد: تغییر رجیستری، شورتکاتهای منوی استارت و همگامسازی (associate) فایلها با برنامه شما. برنامههای ClickOnce وSquirrel بصورت پیشفرض نصبکننده خودشان را دارند.
تعدادی از نصبکننده های عالی:
- InstallShield – ادعا می کند که سازنده استاندارد صنعت برای برنامههای ویندوز است. خب، یکجورهایی هست. در قابلیت بسیار غنی است و همیشه با جدیدترین تکنولوژیها آپدیت است. میتواند بستههای نصب در قالب MSI, EXE, UWP بسازد. میتوانید با یک استودیوی توسعه کار کنید و تمام وظایفی را که نصبکننده باید انجام دهند انتخاب کنید. همچنین دارای زبان اسکریپت نویسی خاص خود است که به نام InstallScript که با آن وظایف سفارشی نوشته میشود. گران است، تقریبا 700$ برای پلنهای ساده.
- Inno Setup – یک نصبکننده رایگان. من از آن استفاده کردم و بسیارراضی بودم. در واقع یک فایل نوشتاری (.iss) درست میکنید که حاوی تنظیمات و اسکریپهای مورد نظر شما برای نصبکننده است.اسکریپت ها در زبان پاسکال نوشته میشوند. دارای مستندات خوب است و جامعه ای با اندازه مناسب است. گرچه فقط EXE تولید میکند نه MSI. در زمان آپدیت، ورژن قبلی را uninstall و ورژن جدید را نصب میکند.
- Wix – نصبکننده محبوب و رایگان. شیب سرازیری یادگیری تند تری نسبت به InstallShield و Inno Setup دارد، اما توان تولید فایلهای MSI هم دارد که میتواند مزیت بزرگی باشد.
- Advanced Installer – از نرم افزار هم استفاده کردم و بسیارراضی بودم ، قالب های متفاوت و امکاناتی که ارائه می دهد بسیار خوب است.
4.تنظیم ادغام و استقرار مداوم (CI/CD)
راه اندازی خط لوله CI/CD برای پروسه توسعه سالم بسیار مهم است.
ایده پشت این مفاهیم این است که یک گردش کار خودکار برای برنامه نویسی خود بسازیم. این گردش خودکار بر اساس تقاضا یا زمانی که کد وارد میشود، فعال میگردد. این کارها را میتواند انجام دهد:
- بیرون کشیدن آخرین کدها از مخزن (Repository)
- کامپایل کد و بررسی خطاها
- اجرای Unit Test ها
- ساخت بستهی نصبی
- استقرار برنامه شما در صورت لزوم
نکات فوق فقط مثال هستند. هر پروژه ای جریان خودکار متفاوتی دارد.
ابزارهای اتوماسیون زیادی در بازار وجود دارند مثل Jenkins و Azure DevOps (همان VTST سابق).
5. گزارش و رفع ایراد
گزارشگیری از سیستم دسکتاپ بسیار متفاوت از گزارشگیری سرور است زیرا شما به رایانه مشتری خود دسترسی ندارید، چندین راهکار برای گزارشگیری و اشکال زدایی وجود دارد که شما میتوانید (و باید) در برنامه دسکتاپی خود پیاده سازی کنید :
- گزارشگیری استاندارد در فایل. Libraryهای زیادی برای گزارشگیری وجود دارد، مانند Log4net و NLog. ذخیره گزارش در فایل بسیار موثر است زیرا دسترسی به فایل آسان آسان است و میتوان هر موقع که خواست گزارش ها را بدست آورد. احتمالا لازم خواهد بود که شما از مشتری بخواهید گزارش بگیرد و فایل آنرا هر موقع که مشکلی وجود داشت برای شما بفرستد. بنابراین مهم است که این پروسه را تا جایی که ممکن است آسان کنید.
- گزارشدهی مستقیم در Windows Events راه سریع و قابل اعتماد دیگری است، البته یک مقداری بدست آوردن گزارش ها سخت تر خواهد بود. Log4net و NLog هردو توانایی ارایه گزارش در Windows Events را دارند.
- گزارش مشکل (Problem Reporting) – مکانیزمی عالی برای نظارت بر برنامه دسکتاپ. پس از شناسایی یک اختلال یا کرش، میتوانید فایلهای log و جزییات اختلال را به یک سرور معین بفرستید. بعضی برنامهها از کاربر اجازه اینکار را میگیرند و بعضی دیگر در سکوت اینکار را میکنند.
- ذخیره Dump – یک روش استاندارد دیگر این است که فایل Dump را بصورت خودکار هنگام Crash (یا Hang) برنامه ذخیره کنید. همانطور که یک عکس بهتر از هزاران کلمه است، یک Dump هم بهتر از هزاران log میباشد. شما میتوانید Dump را به مکانیزم “گزارش یک مشکل” برنامه خود پیوست کنید.
6. تنظیم ظاهر برنامه (Theming)
با توجه به سابقه زیادی که در این موضوع دارم، پیشنهاد میکنم که ساخت تم برنامه را در اولویت قرار دهید.
دو سناریوی معمول در theming برنامه وجود دارد:
- وقتی دارید یک برنامه B2B میسازید، مشتری ها ممکن است درخواست برندینگ تم خودشان را داشته باشند. مثلاً اگر دارید برنامه ای برای صندوقدار مکدونالد مینویسید، ممکن است از شما بخواهند که از رنگهای زرد و قرمز مکدونالد استفاده کنید.
- در برنامههایی که برای مصرف کننده (consumer app) مینویسید، ممکن است بخواهید گزینه هایی برای تغییر ظاهر برنامه توسط کاربر، تعبیه کنید. مثلاً تغییر رنگ و دکمه ها و غیره.
اگر لازم است که ظاهر برنامه را مطابق خواستههای بیزینسیتان بسازید، لازم است که برنامه را مطابق همان بیزینس معماری کنید، بخاطر داشته باشید که بعضی Control Suites ها (قسمت بعدی مطلب ) از بعضی تمهای محبوب مثل Material Design پشتیبانی می کنند.
7. خرید کنترلها
بسته به برنامهتان، ممکن است نیاز داشته باشید که یک مجموعه کنترلی بخرید.
کمپانی هایی مثل Telerik, DevExpress, Xceed, SyncFusion, Infragistics مجموعههای از پیش آماده ای از کنترل ها را با عملکردهای پیشرفته دارند که نیازی نیست کدشان نوشته شود. این مجموعه ها شامل DataGrids, Charts, Carousels, TreeViews و … میشود.
ممکن است عاقلانه باشد که بعضی مجموعه ها را بخرید زیرا نوشتن آنها میتواند سخت و زمانبر باشد. مخصوصا اگر بعضی قابلیتهای پیشرفته را بخواهید.
من وقتی تصمیم به خرید کنترلهای شخص ثالث دارم، این فاکتورها را در نظر میگیرم:
- چقدر آن کنترل باید سفارشی شده باشد؟ اگر تیم محصول شما واقعا نیاز به کنترلهای بسیارسفارشی دارد، شاید بهتر باشد آنها را خودتان بسازید به جای اینکه یک کنترل شخص ثالث بخرید و سپس مطابق میلتان ویرایشاش کنید.
- تیم شما چقدر تجربه دارد؟ اگر باتجربه نیست، قادر به ساخت این کنترل ها نخواهد بود (برای زمان و تلاش مناسب) و شما راهی ندارید.
- قیمت. مجموعههای کنترل قیمتی حدود 1000$ به ازای هر کاربر توسعه دهنده دارند. محاسبه کنید که چقدر زمان و هزینه خواهد برد اگر خودتان کنترل را بنویسید. آیا میارزد بخریم یا خیر؟ مجموعههای رایگان هم وجود دارند. مثلاً Xceed این toolkit را رایگان ارایه میدهد.
- چقدر زمان برای برنامه نویسی دارید؟ خرید کنترلهای شخص ثالث به شما کمک میکند که زمان بیشتری بر روی توسعه خود برنامه بگذارید.
8.انتخاب MV * Framework
به تناسب تکنولوژی UI که انتخاب کرده اید، معمولا یک الگوی طراحی متناسب وجود دارد. در WPF، این الگو MVVM است. در WinForms، MVP است. Library های بسیار خوبی تعبیه شده است که این الگوی طراحی را اجرا میکنند و توصیه میشود از یکی از آنها استفاده کنید. برای WPF و UWP ، محبوب ترین فریمورک ها MVVM light, Prism, Caliburn.Micro هستند. اگر دارید یک برنامه سبک میسازید، MVVM lightقابلیتهای ابتدایی MVVM را در اختیارتان میگذارد. Prism یک غول با امکانات زیاد است، بنابراین برای برنامههای بزرگ سازمانی مناسبتر است. Caliburn.Micro مبتنی بر قرارداد است و شبیه جادوگر میماند. این یک سلیقه شخصی است. من با این فریمورک کار نکردم ولی چیزهای خوبی درباره اش شنیده ام.
در طرف دیگر WinForms سرراست تر است، بنابراین هیچ فریمورکی بطور گسترده استفاده نمیشود.
برنامههای Electron تحت وب هستند و شما میتوانید از Angular, React, Vue.js مانند یک برنامه وب معمولی استفاده کنید.
بیشتر این فریمورک ها عالی هستند و انتخاب آنها بیشتر به سلیقه شخصی و تجربه گروه شما ارتباط دارد. برای مثال اگر تیمتان در Caliburn.Micro تجربه دارد و عاشقش هستید، دلیلی ندارد عوضش کنید.
9. مجوز (Licensing)
اگر برنامه را با Windows Store منتشر نمی کنید و برنامهتان پولی است، پس شما نیاز به نوعی سیستم Licensing دارید.
به طور کلی 4 نوع سیستم صدور مجوز وجود دارد که شما میتوانید یکی یا تلفیقی از آنها را انتخاب کنید:
- Product Key – مشتری به شما پول میپردازد و در ازای آن یک کد متنی دریافت میکند. این کد در برنامه وارد شده، برنامه قانونی میشود و همه چیز به درستی کار خواهد کرد.بنظر آسان می آید اما دنیایی از پیچیدگی در آن است. تعدادی از نکات کلیدی بشرح زیر است:
-
- آیا Product Key بصورت local فعال میشود یا روی یک سرور شبکه؟
- آیا مجوز دایمی است یا زمان محدودی دارد؟
- چگونه مانع از این میشوید که یک Product key توسط چندین نفر استفاده نشود؟
- Login – یک سیستم جدیدتر licencing این است که از ورود به کاربر به برنامه استفاده شود. مثال ورژنهای جدید Visual Studio است که نیاز است که کاربر با اکانت مایکروسافت وارد برنامه شود تا بتواند از آن استفاده کند.این روش حتی از قبلی هم سادگی کمتری دارد.
-
- لازم است نوعی سرور احراز هویت (Identity Provider) بسازید.
- بهتر است از پروتوکل تعیین هویت استاندارد استفاده کنید، مثل OAuth.
- میتوانید دیتابیس کاربری خودتان را تعبیه کنید یا از identity provider هایی مثل Google, Facebook, Microsoft برای لاگین کاربران استفاده کنید. دو روش برای تلفیق با identity provider ها استفاده از Auth0 و IdentityServer است.
- چگونه جلوی وارد شدن چند نفر به یک اکانت را میگیرید؟
- Licencing Dongle – روش سوم که کمتر رایج است استفاده از USB License Dongle است. این یعنی شما به مشتریان خود یک فلش USB میدهید که کار license را انجام میدهد. این روش مناسب برنامههای سازمانی است که نیاز به امنیت فوقالعاده دارند. شاید در دولت و سازمانهای امنیتی. مزیت این روش این است که شرکت ارایه دهنده این دانگل یک راه حل نرمافزاری جامع در اختیار شما میگذارد تا در برنامه خودتان بگنجانید. معمولا بسیار ساده تر از این است که خودتان سیستم licensing را بسازید.
- License Key سختافزاری – اگر این امتیاز را دارید که به همراه نرمافزار، سختافزار هم بفروشید، میتوانید یک کد شناسایی منحصر بفرد (license key یا Mac Address) را در سختافزار حک کنید. این باعث می شود که کار شما راحت تر شود زیرا نیازی به وادار کردن چندین مشتری نیست که از product key یکسان استفاده نکنند.
جمع بندی
مثل هر راه حل نرمافزاری دیگر، توسعه برنامههای دسکتاپ برای ویندوز پر از پیچیدگی است. ما مهمترین تصمیماتی را که معماری برنامه باید در نظر گرفته شوند را پوشش دادیم، اما نکات دیگری نظیر محلی سازی، تست، تنظیمات کاربر و دیتابیس و… هم وجود دارند.
من عاشق برنامههای دسکتاپ هستم چون بنظر من چالشهای جالبتری نسبت به توسعه وب دارد. در یک برنامه تحت وب، با دیتابیس ها ، ORM Frameworks ، identity و Authorization سر و کار دارم. برنامههای دسکتاپ معمولی منطقی تر (logical) هستند، مسایل الگوریتمی و موضوعات چند رشته ای هستند و مقادیر زیادی کار UI وجود دارد.
مترجم: علیرضا میر – تیم لرن سایت
منبع : michaelscodingspot.com
عالی بود ممنون از زحمات شما