C# Programming Guide
193 subscribers
113 photos
9 videos
14 files
102 links
سلام دوستان در این کانال نکاتی در مورد مسائل پیشرفته در سی شارپ ارائه میشه که مربوط به بیش از 15 سال تجربه ی کاری من هست.
ممنون از اینکه دنبال میکنید.
اگر نکات خاصی به ذهنتون رسید با ادمین در میون بذارید
تماس با ادمین:
@Ali_Visual_Studio
Download Telegram
دقت و معماری در برنامه نویسی مخصوصا در برنامه نویسی Back-End خیلی مهمه اگر برنامه ای نوشتید که با درست کردن بخشی از اون برنامه بخش دیگری خراب میشه و این روند همینطور ادامه داره بی تردید یه جای کار میلنگه و اون کم تجربگی برنامه نویس رو میرسونه.
یه برنامه نویس حرفه ای کاملا میدونه که چطوری بخش ها رو از همدیگه جداسازی کنه و مخلوط کردن لایه ها چه پیامد های بدی داره. ممکنه گاهی اوقات پیش خودمون یه سری مقایسه هایی کنیم مثلا بین برنامه های بزرگ و برنامه های کوچیکی که مینویسیم و برای برنامه های کوچیک توی معماری ها اهمیتی قائل نشیم بگیم مثلا اینو دو روزه تمومش میکنم نیازی نیست الکی معماری بچینم و لایه ها رو از هم جدا کنم.این کار اشتباه هست و اگر عادت کنید که برنامه های کوچیک رو درست لایه بندی کنید برنامه های بزرگ رو همیشه لایه بندی خواهید کرد.برنامه نویسی کاری هست که مو لای درزش نمیره یعنی اگر یه جا مشکلی باشه هرگز مشکل غیر منطقی نیست و قابل رفعه پس نظم توی این سیستم بسیار بسیار مهمه هرچند کار کوچیک و ناچیز باشه.
لایه های مدل و منطق رو از دیتابیس جدا کنید.لایه های سرویس رو لایه های اجرایی، به صورت Cross Platform به لایه ها نگاه کنید.یعنی حتی بخش هایی که فکر میکنید فقط مخصوص ویندوز هست رو از بخش هایی که فکر میکنید توی لینوکس و ویندوز جواب میده جدا کنید.جداسازی لایه ها پیچیدگی و به وجود اومدن باگ ها رو کم میکنه و هرچی مخلوط بودن و وابستگی ها کمتر پیچیده باشه در نتیجه با رفع مشکل در یک قسمت مشکل جدیدی در قسمت دیگه بوجود نخواهد اومد.
در انتخاب بین Xamarin Forms و Xamarin Classic من Forms رو پیشنهاد میکنم. توی برنامه نویسی موبایل برای کلاسیک شما باید رابط های کاربری برای اندروید و ios و ویندوز فون رو جداگونه پیاده سازی کنید.ولی توی Xamarin forms تنها یک رابط کاربری طراحی میکنید و توی هر سه سیستم عامل خروجی میگیرید و براحتی هم میتونید همونطوری که توی کلاسیک رابط کاربری رو کاستومایز کنید و محدودیتی ندارید توی Forms هم نخواهید داشت.قبلا یه سری محدودیت ها و باگ هایی وجود داشت ولی الان دیگه نیست و روزبروز هم داره بروز رسانی میشه.
#Xamarin
در نسخه ی جدید SignalGo قابلیت درج سرویس از طریق منوی راست کلیک اضافه شده که تمامی مدل ها و کلاس ها،سرویس ها و توابع مورد نیازتون رو از سرور میگیره و توی کلاینت اضافه میکنه
C# Programming Guide
در نسخه ی جدید SignalGo قابلیت درج سرویس از طریق منوی راست کلیک اضافه شده که تمامی مدل ها و کلاس ها،سرویس ها و توابع مورد نیازتون رو از سرور میگیره و توی کلاینت اضافه میکنه
با یک افزونه اضافه شده که با استفاده از اون میشه تمامی مدل ها وسرویس ها و کلاس های مورد نیاز کلاینت با پیاده سازی INotifyPropertyChanged برای مدل ها بدون دستکاری مدل های سرور رو برای کلاینتتون فراهم کنید.قابلیت جالبی که این سیستم داره اینه که میتونید مدل های جنریت شده رو با یک قابلیت تغییراتی توش ایجاد کنید که با بروز رسانی سرویس از سرور اون تغییرات از بین نرن مثلا چند تا پروپتری به کلاس یک مدل اضافه کنید.
نصب افزونه از:
https://marketplace.visualstudio.com/items?itemName=AliVisualStudio.SignalGoExtension

در صورتی که براتون سوال ایجاد شده چطوری از این سیستم استفاده کنید به گروه سیگنالگو سر بزنید:
https://t.iss.one/joinchat/CVPIBkMqzRIlK5SGpwKblQ
یکی از خوبی هایی که برنامه نویسی اندروید برای برنامه نویسان سی شارپ داره اینه که علاوه بر اینکه میتونن از تمامی داکیومنت های برنامه نویسی سی شارپ برای زامارین استفاده کنند بلکه میتونن از تمامی داکیومنت های جاوا برای اندروید هم استفاده کنند، چون علاوه بر وجود اکثر کامپوننت های قابل استفاده دات نت توی زامارین تمامی کامپوننت های جاوا قابل استفاده برای سی شارپ هم وجود داره.بنابراین اگر خواستید مشکلی رو حل کنید یا قابلیتی رو اضافه کنید مثلا حذف کردن یک فایل حتما لازم نیست توی گوگل برای زبان سی شارپ جستجو کنید، میتونید برای زبان جاوا جستجو کنید و چون کدهای جاوا بسیار به سی شارپ نزدیکه به راحتی تبدیلش کنید به سی شارپ.
برای مثال برای حذف یک فایل توی دات نت (ویندوز،مک،لینوکس،اندروید،ios و ...) از کد زیر استفاده میکنیم:
System.IO.File.Delete("fileaddress");

این کد توی اندروید کار میکنه و فایل رو حذف میکنه.ولی جاوا کار ها اینطوری حذف میکنن توی اندروید:
File dir = getFilesDir();
File file = new File(dir, "my_filename");
boolean deleted = file.delete();

توی سی شارپ برای اندروید علاوه بر روش اول که گفتم اینطوری هم میشه یعنی تبدیل کد بالا به کد زیر:
 Java.IO.File dir = new Java.IO.File("folder address");
Java.IO.File file = new Java.IO.File(dir, "my_filename");
bool deleted = file.Delete();

نکته:توی کد بالا من using ها رو هم گذاشتم که بدونید کامپوننت های اندروید جاوا با دات نت با هم فرق دارن.
اگر یک برنامه نویس کراس پلتفرم باشید برای حذف فایل از روش اول یعنی کامپوننت دات نت استفاده میکنید تا توی هر سیستم عامل کد جداگونه ای رو براش ننویسید (دوباره نویسی نکنید)
@csharptips
با استفاده از پکیج اپن سورس Telegram.Bot در سی شارپ براحتی برای تلگرام ربات بسازید
مدیریت تبادل اطلاعات در سیگناگو چیست؟
دو اتریب برای این قسمت ساخته شده با نام های CustomDataExchanger و Bind. اتریب Bind در واقع ارث برده از CustomDataExchanger برای خلاصه سازی و استفاده ی سریع
این دو اتریب در واقع برای سرور و کلاینت مدیریت میکنن که چه چیزی باید از کابل شبکه ی شما رد بشه و از کلاینت به سرور برسه یا از سرور به کلاینت برسه.بدون اینکه تغییراتی در مدل ها و کلاس هاتون ایجاد کنید و خودتون رو درگیر این کنید که باید مدل جدیدی بسازید و نگران این باشید که همه ی پروپرتی ها ارسال میشن یا نه (مثل WCF) و یا در برخی توابع چیزهایی که نمیخواهید ارسال کنید سمت کلاینت رو به صورت دستی null کنید.
چه وقتهایی این سیستم مورد استفاده ی برنامه نویسان سرور قرار میگیره؟
1.شما نمیخواهید ارسال/دریافت کنید چند مشخصه (Properties) یا یک نوع (Type) از یک یا چند کلاس رو به/از کلاینت.
2.شما میخواهید سرعت تبادل اطلاعات بین کلاینت و سرورتون رو گسترش بدید به این گونه که با محدود کردن مشخصه ها و انواع کلاس ها اون مقادیر به کلاینت ارسال نمیشن در نتیجه اطلاعات کمتری دانلود یا اپلود خواهد شد.و همچنین پهنای باند کمتری استفاده میشه و اصلا هم لازم نیست مشخصه های مدل هاتون رو تغییر بدید یا یک مدل جدید بسازید.
3.اگر شما میخواهید امنیت رو در سرورتون بالا ببرید.برای مثال شما اصلا نمیخواهید در هیچ صورتی مشخصه ی پسورد به کلاینت ارسال بشه ولی نمیخواهید هم توی هر تابعی که دارید کلاس User رو به کاربر ارسال میکنید همش پسورد رو null کنید (در صورتی که نیاز داشتید Select کنید).همچنین اگر شما دارید یک مدل رو از سوی کلاینت دریافت میکنید جهت ویرایش با این سیستم میتونید به سرور بگید که فقط مشخصه های 1 و 2 و 3 رو دریافت کن و بقیه رو چشم پوشی کنید.در این حال هر کلاینتی حتی اگر به وسیله ی هک کردن، اگر اون مشخصه ها رو بفرسته سیستم چشم پوشی میکنه و توی مدل شما ریخته نمیشه.

مثال ها و جزئیات بیشتر رو در اموزش بخش DataExchanger در گیتهاب مطالعه کنید:
https://github.com/SignalGo/SignalGo-full-net/wiki/CustomDataExchanger-and-Bind-%28Attribute%29

هر گونه سوال و پرسش در مورد سیگنالگو رو هم در گروه زیر مطرح کنید:
https://t.iss.one/joinchat/CVPIBkMqzRIlK5SGpwKblQ
Forwarded from Agrin (Ali Yousefi ˢᵒᶠᵗʷᵃʳᵉ ᴰᵉᵛᵉˡᵒᵖᵉʳ)
سلام.
یه توصیه در مورد حریم خصوصی بدم، دوستان عزیز دقت کنند، حریم خصوصی توی نرم افزار دقیقا مثل حریم شخصی توی خونه ی شما یا هرچیزی که فقط و فقط مربوط به خود شما میشه هست.یعنی چیزی که الان توی ذهن منه فقط و فقط به من مربوط میشه و کسی حق نداره اونو بزور ازم بگیره. آیا اگر امروز دختر یا همسر یا مادر من توی خونه لباس خونگی بر تن داشته باشه من باید اجازه بدم سازمان اطلاعات یا دولت یا هر بشری همینطور سرشو بندازه پایین و وارد حریم خونه ی من بشه؟ خیر. دقیقا پاسخی که میدیم اینه:صبر کن خانواده آماده بشن بعد شما بفرمایید.
توی نرم افزار هم همینه اگر من اطلاعات شخصیم رو توی نرم افزاری دارم حفظ میکنم اون اطلاعات مربوط به من و کاملا شخصی هست بنابراین اگر کسی بخواد شنود کنه یا اون اطلاعات رو دریافت کنه باید قبلش از من اجازه بگیره تا من رمز و راز های خودم رو مراقبت کنم.
بنابراین دوستان توصیه میکنم به هیچ عنوان نرم افزاری رو نصب نکنید که از نوع برخورد اون درمورد حریم خصوصی اطلاع ندارید، میخواد نرم افزار خارجی باشه یا ایرانی.حریم خصوصی خیلی مهم و فقط و فقط متعلق به خود شماست برای همین اسمش حریم خصوصی هست نه عمومی.پس از نرم افزار هایی که حریم خصوصی شما رو حفظ نمی کنند استفاده نکنید ایرانی و خارجیش مهم نیست، مهم حمایت شما برای بزرگ کردن اینجور نرم افزار هاست.
با آروزی موفقیت، یوسفی.
سلام.
دوستان WPF کار از نسخه ی آخر ویژوال استادیو استفاده کنن، توی نسخه ی 2017 دیگه نیازی به استپ کردن نرم افزار جهت انجام تغییرات توی بخش UI نیست، به صورت انلاین XAML رو تغییر میدید و رابط کاربری تغییر میکنه.مثل صفحات وب.حتی بایندیگ ها و ... هم تغییر خواهد کرد.
اگر مردد هستید که برای دیتابیس سمت سرور از Entity Framework Core استفاده کنید یا Entity Framework من پیشنهاد میکنم از EF Core استفاده کنید.توی ریلیز های اخرش تقریبا همه ی امکانات EF رو داره.برای دیتابیس های سبک و کلاینت هم پیشنهادم LiteDB هست که پکیجش رو براحتی میتونید از توی Nuget پیدا و نصب، این دیتابیس کوچیک هم سبکه و هم سرعت خوبی داره و هم مالتی پلتفرم هست یعنی توی گوشی و ویندوز و مک و لینوکس هرجا خواستید میتونید ازش استفاده کنید.
تفاوت EF Core و EF در مالتی پلتفرم بودنش هست و EF فقط برای Sql و ویندوز طراحی شده ولی EF Core برای انواع دیتابیس ها بکار میره و کاملا مالتی پلتفرم ساخته شده علاوه بر اون قابلیت استفاده در سیستم عامل های دیگه جهت استفاده ی سرور رو داره.
من هر دوش رو تست کردم و واقعا Entity framework و core تحولی بزرگ در دنیای دیتابیس برای برنامه نویسان سی شارپ بودن.براحتی میتونید از طریق Linq در سی شارپ کوئری در دیتابیس بزنید.
همراه با بسته شدن تلگرام تمامی سرویس های مایکروسافت و سایت هایی که به سرویس های مایکروسافت متصل بودند فیلتر شدند. سایت microsoft.com و stackoverflow.com و github.com و nuget و ... البته این شاید هنوز برای همه ی ISP ها اعمال نشده باشه.
This media is not supported in your browser
VIEW IN TELEGRAM
نسخه ی جدید ویژوال استادیو 15.7 و تغییرات در بخش XAML زامارین
این سایت هایی که میگن همراه زامارین باید virtual box هم نصب کنید دقیقا شمارو توی موقعیتی قرار میدن که کلی وقتتون گرفته میشه تا مشکلی که بعدش بوجود میاد رو حل کنید.
بعد از نصب ویژوال استادیو هی چیز دیگه ای نیاز به نصب نیست.ویژوال استادیو حتی emulator و sdk های اندروید رو خودش نصب میکنه و شما نیازی نیست کاری انجام بدید، بعد از نصب موفق همه چیز روبراست برای برنامه نویسی مگر اینکه استثنایی رخ بده.
لیست های Lazy لیست هایی هستند که مواقعی به کمک شما میان که آیتم های زیادی داشته باشید ولی نمیخواهید اون آیتم ها در لحظه توی حافظه ایجاد بشن در عوضش میخواید هر وقت بهش احتیاج پیدا کردید در حافظه ایجاد بشن.Lazy ها در دیتابیس ها هم کاربرد دارن ولی کاربردشان وقتی هست که شما میدونید سریع به جواب میرسید، چون توی بحث دیتابیس Lazy ها مشکلی که ایجاد میکنن اینه که هر بار یک آیتم بخوان از لیست کوئری دریافت کنن باید مجدد برن و کوئری بزنن و دیتا رو به شما برگردونن پس بسیار کند عمل میکنن.
اما در حافظه اینطور نیست و عمل و سرعت بسیار بالایی در کار باهاشون میتونید پیدا کنید در واقع این هنر شماست که بدونید چه وقتی به Lazy ها نیاز دارید.

مثال:
Lazy<Orders> _orders = new Lazy<Orders> () => new Orders(100));

همونطور که میدونید Lambada ها در لحظه اجرا نمیشن و در زمانی که فانکشن صدا زده بشه اونا اجرا میشن بنابر این کد زیر در لحظه ای اجرا میشه که شما لیست رو foreach کنید یا از طریق linq فراخونی کنید:
() => new Orders(100)

توضیحات و مثال های بیشتر رو در سایت مایکروسافت بخونید:

https://docs.microsoft.com/en-us/dotnet/framework/performance/lazy-initialization
ویژوال استادیو 2017 رو سعی کنید افلاین نصب کنید و آپدیت، توی سایت مایکروسافت روشی هست که به شما آموزش میده چطوری فایل ستاپ آفلاین از ویژوال استادیو بسازید، اگر کل پکیج های ویژوال استادیو آفلاین رو بخواید حدود 40 گیگ میشه.اما اگر بخواید آنلاین نصب کنید باید فیلتر شکن روشن کنید چون یه سری فایل ها رو از اینتل و گوگل دانلود میکنه برای همین موقع نصب با خطا مواجه خواهید شد و دردسر زیادی برای نصب آپدیت های سنگین میکشید.گاهی وقتا هم از طرف خود ایران مسائلی به وجود میاد که باعث کندی اینترنت میشه و ستاپ هنگ میکنه و چیزی رو دانلود نمی کنه و باید ساعت ها صبر کنید تا به جایی برسه که از اول مراحل نصب رو انجام بدید.بنابراین من نصب و آپدیت آفلاین رو پیشنهاد میکنم.

https://docs.microsoft.com/en-us/visualstudio/install/install-vs-inconsistent-quality-network
C# Programming Guide
Photo
سلام، دوستان اگر مشهد هستید و دوست دارید سی شارپ یاد بگیرید من قراره آموزش سی شارپ رو از صفر + WPF توی آموزشگاه شرکت خودمون آموزش بدم و مدرسش هم خودم هستم، اگر مشتاق یادگیری در این زمینه هستید به سایت https://edu.atitec.ir مراجعه و ثبت نام کنید، همچنین اگر در زمینه های دیگه ای میخواید آموزش ببینید همکاران من در خدمت شما هستند.