using Common.GuardToolkit; using Entities; using Microsoft.AspNetCore.Mvc; using Services.Contracts; using ViewModels; namespace web.Controllers { public class ProductController : Controller { private readonly IProductService _ProductService; public ProductController(IProductService ProductService) { _ProductService = ProductService; _ProductService.CheckArgumentIsNull(nameof(ProductService)); } public IActionResult Add() { return View("ProductAdd"); } [HttpPost] public IActionResult Add(ProductAddModel model) { var product = new Product() { Name = model.Title, Price = 1, CategoryId = 1}; _ProductService.AddNewProduct(product); return Json(model); } } }
برای مثال یادم هست زمانیکه سیلورلایت 5 بتا ارائه شد (چند وقت قبل)، همان روز حدود بالای 30 مقالهی بلند بالا در مورد تازههای محصولی که دقیقا همان روز در یک کنفرانس برای اولین بار معرفی شده، مطلب منتشر شد. خوب ... این یک لشگر سازماندهی شده است. رقابت کردن با اینها سخت است.
شما فکر میکنید کسانی که کتابهای بعدی سیلورلایت 5 را منتشر میکنند از کجا مطالب خودشون رو تامین میکنند؟ همین 30 تا مقاله رو کنار هم قرار میدهند با نگارش خودشون منتشر میکنند. راحت میشه نصف یک کتاب.
NHibernate هم به همین صورت، این لشگر مستند ساز رو نداره. به علاوه خیلی اشتباه است اگر تصور کنید NHibernate همان Hibernate جاوا است. خیلی اضافات در NHibernate به دلیل پیشرفتهای زبانهای دات نتی وجود دارد که در Hibernate نیست (همین مباحث static reflection ، lambda expression ، LINQ و غیره). خلاصه اینکه NHibernate فقط یک معادل یک به یک، یکی از کتابخانههای معروف جاوا نیست. شاید نگارش اول آن اینطور بوده.
ضمنا فعلا شما همین کتاب EF 4.1 رو بخرید! اگر به چاپ دوم رسید یعنی میشود به انتشار کتابهای مشابه امیدوار شد!
در این ویدیوی آموزشی، شما با مفاهیم و تکنیکهای کلیدی برنامهنویسی با زبان پایتون آشنا میشوید. در فقط 3 ساعت، از مبانی تا پیشرفتهترین قسمتهای این زبان برنامهنویسی محبوب و قدرتمند را بیاموزید.
مباحث:
00:00:00 مقدمه
00:04:14 نصب پایتون
00:17:06 vscode آموزش استفاده از
00:26:13 آموزش استفاده از جوپیتر نوت بوک
00:37:12 متغیرهای متنی
00:47:39 متغیرهای عددی
00:54:22 لیست، تاپل، ست
01:15:44 دیکشنری
01:24:29 شرط ها
01:37:46 پروژه اول-ساخت ماشین حساب ساده
01:44:15 حلقه ها
01:55:06 توابع
02:11:59 خواندن و نوشتن فایلها
02:22:11 استفاده از پکیجها
02:34:10 استفاده از محیط مجازی
02:45:20 کلاسها و آبجکتها
03:03:08 پروژه دوم- ساخت بازی کوئیز
1.Pocket Guide to Writing SVG 2.Speaking JavaScript 3.Adaptive Web Design 4. 27 Page Type Classification eBook 5. 11 Things to Do with Every New WordPress Install 6. Building Web Apps with Go 7. Go Mobile With WordPress 8. HTML Canvas Deep Dive 9. 10 Keys to Great Landing Pages 10. Book of Speed 11. A Practical Guide to Designing for the Web 12. PHP: The Right Way 13. Essential Career Advice for Developers 14. So You Want To Be A Freelancer? 15. Magic of CSS
C# 6 - The nameof Operator
عملگر nameof در C# 11، اندکی بهبود یافتهاست و اینبار میتواند در ویژگیها (attributes) نیز به نام پارامترهای متدها، دسترسی پیدا کند. چند مثال:
الف) امکان دسترسی به نام پارامتر متد، در حالت اعمال به متد
[MyAttr(nameof(parameter))] void Method(string parameter) { }
ب) امکان دسترسی به نام نوع پارامتر جنریک متد، در حالت اعمال به متد
[MyAttr(nameof(T))] void Method<T>() { }
ج) امکان دسترسی به نام پارامتر متد، در حالت اعمال به پارامتر
void Method([MyAttr(nameof(parameter))] int parameter) { }
یکی از کاربردهای آن، بهبود تعاریف متادیتای nullable reference types و عدم نیاز به کار با رشتهها به صورت مستقیم است:
[return: NotNullIfNotNull(nameof(path))] public static string? GetUrl(string? path) => !string.IsNullOrEmpty(path) ? $"https://localhost/api/{path}" : null;
متدی برای بررسی صحت کد ملی وارد شده
میتونین چک کنین فکر نکنم معتبر باشه
کد جاوا اسکریپت تشخیص صحت کد ملی، منبعش این سایته
function checkCodeMeli(code) { var L=code.length; if(L<8 || parseInt(code,10)==0) return false; code=('0000'+code).substr(L+4-10); if(parseInt(code.substr(3,6),10)==0) return false; var c=parseInt(code.substr(9,1),10); var s=0; for(var i=0;i<9;i++) s+=parseInt(code.substr(i,1),10)*(10-i); s=s%11; return (s<2 && c==s) || (s>=2 && c==(11-s)); return true; }
متدی برای بررسی صحت کد ملی وارد شده
public static bool IsValidIranianNationalCode(string input) { input = input.PadLeft(10, '0'); if (!Regex.IsMatch(input, @"^\d{10}$")) return false; var check = Convert.ToInt32(input.Substring(9, 1)); var sum = Enumerable.Range(0, 9) .Select(x => Convert.ToInt32(input.Substring(x, 1)) * (10 - x)) .Sum() % 11; return sum < 2 && check == sum || sum >= 2 && check + sum == 11; }
متدی برای بررسی صحت کد ملی وارد شده
public static bool IsValidIranianNationalCode(string input) { // input has 10 digits that all of them are not equal if (!System.Text.RegularExpressions.Regex.IsMatch(input, @"^(?!(\d)\1{9})\d{10}$")) return false; var check = Convert.ToInt32(input.Substring(9, 1)); var sum = Enumerable.Range(0, 9) .Select(x => Convert.ToInt32(input.Substring(x, 1)) * (10 - x)) .Sum() % 11; return sum < 2 && check == sum || sum >= 2 && check + sum == 11; }
React 16x
- قسمت 1 : معرفی و شروع به کار
- قسمت 2 : بررسی پیشنیازهای جاوا اسکریپتی - بخش 1
- قسمت 3 : بررسی پیشنیازهای جاوا اسکریپتی - بخش 2
- قسمت 4 : کامپوننتها - بخش 1 - کار با عبارات JSX
- قسمت 5 : کامپوننتها - بخش 2 - نمایش لیستها و مدیریت رویدادها و حالات
- قسمت 6 : کامپوننتها - بخش 3 - یک تمرین
- قسمت 7 : ترکیب کامپوننتها - بخش 1 - ارسال دادهها، مدیریت رخدادها
- قسمت 8 : ترکیب کامپوننتها - بخش 2 - مدیریت state
- قسمت 9 : ترکیب کامپوننتها - بخش 3 - Lifecycle Hooks
- قسمت 10 : ترکیب کامپوننتها - بخش 4 - یک تمرین
- قسمت 11 : طراحی یک گرید - بخش 1 - کامپوننت صفحه بندی
- قسمت 12 : طراحی یک گرید - بخش 2 - فیلتر کردن اطلاعات
- قسمت 13 : طراحی یک گرید - بخش 3 - مرتب سازی اطلاعات
- قسمت 14: طراحی یک گرید - بخش 4 - پویاسازی تعاریف ستونها
- قسمت 15 :مسیریابی - بخش 1 - تعریف و تنظیم مسیریابیها
- قسمت 16 : مسیریابی - بخش 2 - پارامترهای مسیریابی
- قسمت 17 : مسیریابی - بخش 3 - یک تمرین
- قسمت 18 : کار با فرمها - بخش 1 - دریافت ورودیها از کاربر
- قسمت 19 : کار با فرمها - بخش 2 - اعتبارسنجی ورودیهای کاربران
- قسمت 20 : کار با فرمها - بخش 3 - بهبود کیفیت کدهای فرم لاگین
- قسمت 21 : کار با فرمها - بخش 4 - چند تمرین
- قسمت 22 : ارتباط با سرور - بخش 1 - برپایی تنظیمات
- قسمت 23 : ارتباط با سرور - بخش 2 - شروع به کار با Axios
- قسمت 24 : ارتباط با سرور - بخش 3 - نکات تکمیلی کار با Axios
- قسمت 25 : ارتباط با سرور - بخش 4 - یک تمرین
- قسمت 26 : احراز هویت و اعتبارسنجی کاربران - بخش 1 - ثبت نام و ورود به سیستم
- قسمت 27 : احراز هویت و اعتبارسنجی کاربران - بخش 2 - استخراج و نمایش اطلاعات JWT و خروج از سیستم
- قسمت 28 : احراز هویت و اعتبارسنجی کاربران - بخش 3 - فراخوانی منابع محافظت شده و مخفی کردن عناصر صفحه
- قسمت 29 : احراز هویت و اعتبارسنجی کاربران - بخش 4 - محافظت از مسیرها
- قسمت 30 : React Hooks - بخش 1 - معرفی useState و useEffect
- قسمت 31 : React Hooks - بخش 2 - مقایسه حالتهای مختلف مدیریت حالت با useState Hook
- قسمت 32 : React Hooks - بخش 3 - نکات ویژهی برقراری ارتباط با سرور
- قسمت 33 : React Hooks - بخش 4 - useContext Hook
Redux
- قسمت اول : Redux چیست؟
- قسمت دوم : بررسی توابع Redux
- قسمت سوم : روش اتصال Redux به برنامههای React
- قسمت چهارم : انجام اعمال async با Redux
- قسمت پنجم : Redux Hooks
- قسمت ششم : MobX چیست؟
- قسمت هفتم : بررسی مفاهیم Mobx
- قسمت هشتم : تنظیمات پروژههای React برای کار با Mobx decorators
- قسمت نهم : مثالی از کتابخانهی mobx-react
- قسمت دهم : MobX Hooks و اعمال Async در Mobx
- ساخت یک مثال Todo با MobX و React
- روش یکی کردن پروژههای React و ASP.NET Core
- آپلود فایلها توسط برنامههای React به یک سرور ASP.NET Core به همراه نمایش درصد پیشرفت
- روش کار با فایلهای ایستا در برنامههای React
- روش کار با فایلهای پویای ارائه شدهی توسط یک برنامهی ASP.NET Core در برنامههای React
- استفاده از قالب مخصوص Redux Toolkit جهت ایجاد پروژههای React/Redux
- تبدیل یک قالب HTML معمولی به قالب React
- React component lifecycle
- React reconciliation
معماری میکروسرویسها
- از آنجایی که ارتباط بین سرویسها در بستر شبکه انجام میشود، انتظار کندی عملکرد سرویسها دور از ذهن نیست. (اتفاقا بخاطر توزیع برنامه بر روی چند سیستم در زمانی که بار زیادی بر روی سیستم هست پاسخ گویی به کاربر میتونه خیلی بسرعت انجام بپذیره و اتفاقا یکی از مزایای اون هست)
- به دلیل ارتباطات شبکهای، احتمال آسیب پذیریهای امنیتی در این نوع برنامهها بیشتر است. (البته بیشتر این توزیع در server farm انجام میشه ،یعنی پشت فایروال و کسی جز سرورها در این شبکه خصوصی وجود ندارد، نمیگم نیست ولی خیلی نیست)
- نوشتن سرویسهایی که در بستر شبکه با سایر سرویسها در ارتباط هستند سختی و مشکلات خود را دارد. برنامهنویس در این شرایط، درگیر برقراری ارتباط، رمزگذاری دادهها در صورت نیاز و تبدیل آنها میشود.(همان موارد بالا)
- به دلیل مجزا بودن بخشهای مختلف برنامه، مانیتور کردن و ردیابی عملکرد سرویسها، یکی از کارهای اصلی توسعه دهنده یا استفاده کننده از برنامه است. (اینم خودش یک فایده است و طبق اصل SRP و تفاوت MicroServic با SOA بیشتر بر همین نکته تاکید داره که یک میکرو سرویس کاملا مستقل میباشد و راحتتر قابل مانیتور کردن و ردیابی عملکرد سرویس میباشد
- در مجموع سرعت برنامههای نوشته شده با معماری Microservices کندتر از برنامههای نوشته شده با معماری Monolithic است. دلیل آن محیط اجرایی برنامهها است. برنامههایی با معماری Monolithic بر روی حافظه سرور پردازش میشوند. (باز تاکید که اصل استفاده از میکرو سرویس برای سیستم هایی با تراکنش بالا میباشد ،هدف توسعه راحتر و بدون تاثیر بر بقیه سرویسها و حتی بدون توقف آنها میباشد، همچنین امکان horizontal Scalability نرم افزار و بالا بردن تعداد سرورهای ارائه دهنده سرویس براحتی بوجود خواهد امد ، پس میتونه سرعت رو خیلی بالا ببره و مشکل توقف سرویس که در خیلی از سامانههای ایرانی میبینیم رو از بین میبره )