دوره سه ساعته آموزش Blazor
00:00:00 Introduction
00:03:07 Blazor Project Structure
00:12:14 How Blazor Works
00:20:28 What is an Inventory Management System
00:23:47 Introduction to Clean Architecture
00:30:58 Null Reference Type in .NET 6
00:36:44 Write the View Inventories Use Case
00:45:16 Implement the View Inventories Use Case
00:59:27 Create a Plugin with Dependency Injection
01:08:45 Inject the Use Case in Razor Component
01:17:35 Dependency Injection in Blazor
01:28:08 Page Component - Create the Inventory List Page
01:34:34 SPA Components Best Practice
01:38:07 Databinding and EventCallback in Search Inventory Component
01:52:59 Component Parameters in Inventory List Component
02:03:52 Null Checks
02:06:07 Extract the Inventory List Item Component
02:09:45 Add Inventory Use Case
02:12:10 Implement Add Inventory Repository Methods
02:15:34 NavigationManager
02:17:56 EditForm and Data Validation
02:30:09 Edit Inventory Use Case
02:35:12 Implement Edit Inventory Repository methods
02:43:00 Receive Routing Parameters
02:50:09 Implement Edit Inventory Component
03:03:06 Why we are using Async everywhere
On over-engineering; finding the right balance
A big debate among developers is whether to write code for today’s problem or to build a general-purpose solution for future needs. Both approaches have their pros and cons. Specific-purpose code can quickly become messy. But overly general code can add unnecessary complexity. This post, obviously opinionated, argues for a middle ground. That’s the sweet spot, as always.
CREATE TABLE tableName ( jsonData CHAR(250) -- or VARCHAR, TEXT, BLOB ); INSERT INTO tableName VALUES ( '{ "name": "User1", "age": 41}' ); SELECT * FROM tableName; { "name": "User1", "age": 41}
SELECT * FROM tableName WHERE jsonData REGEXP 'User1';
CREATE TABLE tableName ( jsonData JSON ); INSERT INTO tableName VALUES ( '{ "name": "User1", "age": 41, "name": "User2"}' ); SELECT * FROM tableName; {"age": 41, "name": "User2"}
- ابتدا بررسی خواهد شد که سند JSON معتبر باشد؛ در غیر اینصورت ذخیرهسازی با مشکل مواجه خواهد شد.
- از فیلدهایی که کلید تکراری دارند، صرفنظر خواهند شد. در مثال بالا دوبار فیلد name را مقداردهی کردهایم. در اینجالت key/value دوم لحاظ شدهاست. البته میبایستی اصل first key wins لحاظ میشد، اما این مورد به عنوان یک باگ گزارش شدهاست و در نسخههای 8 به بعد رفع شدهاست (https://forums.mysql.com/read.php?3,660500,660500 - https://bugs.mysql.com/bug.php?id=86866).
- فاصلههای اضافی بین کلیدها حذف شدهاند.
- برای جستجوی بهتر، کلیدهای آبجکت JSON به صورت مرتب شده ذخیره شدهاند.
{ "id": "1", "sku": "asdf123", "name": "Lorem ipsum jacket", "price": 12.45, "discount": 10, "offerEnd": "October 5, 2020 12:11:00", "new": false, "rating": 4, "saleCount": 54, "category": ["fashion", "men"], "tag": ["fashion", "men", "jacket", "full sleeve"], "variation": [ { "color": "white", "image": "/assets/img/product/fashion/1.jpg", "size": [ { "name": "x", "stock": 3 }, { "name": "m", "stock": 2 }, { "name": "xl", "stock": 5 } ] }, { "color": "black", "image": "/assets/img/product/fashion/8.jpg", "size": [ { "name": "x", "stock": 4 }, { "name": "m", "stock": 7 }, { "name": "xl", "stock": 9 }, { "name": "xxl", "stock": 1 } ] }, { "color": "brown", "image": "/assets/img/product/fashion/3.jpg", "size": [ { "name": "x", "stock": 1 }, { "name": "m", "stock": 2 }, { "name": "xl", "stock": 4 }, { "name": "xxl", "stock": 0 } ] } ], "image": [ "/assets/img/product/fashion/1.jpg", "/assets/img/product/fashion/3.jpg", "/assets/img/product/fashion/6.jpg", "/assets/img/product/fashion/8.jpg", "/assets/img/product/fashion/9.jpg" ], "description": { "shortDescription": "Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur.", "fullDescription": "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?" } }
SELECT JSON_PRETTY( JSON_EXTRACT(data, "$.category") ) FROM experiments.productMetadata; /* [ "fashion", "men" ] [ "fashion", "women" ] [ "fashion", "men" ] */
JSON_EXTRACT(data, "$.tag[1]") JSON_EXTRACT(data, "$.description.shortDescription")
SELECT JSON_EXTRACT(data, "$.*.shortDescription") FROM experiments.productMetadata;
SELECT JSON_KEYS(data) FROM experiments.productMetadata; -- ["id", "new", "sku", "tag", "name", "image", "price", "rating", "category", "discount", "offerEnd", "saleCount", "variation", "description"] -- ["id", "new", "sku", "tag", "name", "image", "price", "rating", "category", "discount", "saleCount", "variation", "description"]
SELECT JSON_KEYS(data, "$.description") FROM experiments.productMetadata; -- ["fullDescription", "shortDescription"] -- ["fullDescription", "shortDescription"]
SELECT JSON_CONTAINS(data, "10", "$.discount") FROM experiments.productMetadata; -- 1 -- 0
SELECT JSON_CONTAINS_PATH(data, "one", "$.description", "$.address", "$.website") FROM experiments.productMetadata;
SELECT JSON_SEARCH(data, 'one', 'fashion') FROM experiments.productMetadata; -- "$.tag[0]" -- "$.tag[0]"
Windows 10 has something called Windows Subsystem for Linux and this something enables us to run Linux applications on Windows 10 using Linux without need for Hyper-V or other virtual machines. When building multi-platform applications like my open-source TemperatureStation solution then having Linux right there for testing comes very handy. This blog post shows how to get Linux running on Windows, how to install .NET Core and how to run web applications on Linux.
انتشار پیش از موعد NET Core 2.1.
در مورد افزونه YSlow افزونه Firebug فایرفاکس پیشتر صحبت شد. این افزونه پس از آنالیز یک سایت، پیشنهاداتی را نیز جهت بهبود سرعت، ارائه میدهد.
همانطور که در شکل بالا مشخص است، عناصری مانند css و js ، قسمت expires اشان (تاریخ منقضی شدن کش آنها در سمت کلاینت) خالی است و پیشنهاد داده که به هر کدام از این عناصر، هدر مخصوص مشخص سازی مدت زمان کش شدن در سمت کلاینت اضافه شود.
ASP.Net در مورد کش کردن اطلاعات صفحات پویا به اندازهی کافی امکانات در اختیار برنامه نویس قرار میدهد اما در مورد اضافه کردن این هدر جهت یک فایل css غیر پویا شاید نتوان مطلب خاصی را یافت.
در IIS7 امکانات ویژهای برای این منظور در نظر گرفته شده که نحوه استفاده از آن در ASP.Net به صورت زیر است:
فایل وب کانفیگ سایت را باز کرده و به قسمت system.webServer چند سطر زیر را اضافه کنید:
<staticContent>
<clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires" />
</staticContent>
این مورد فقط مختص به IIS7 است و بر روی نگارشهای پایینتر کار نمیکند.
با این کار، تاریخ منقضی شدن هر آنچه که توسط موتور ASP.net سرو نمیشود به سال 2020 تنظیم خواهد شد. (کلیه محتوای غیرپویای سایت، اعم از تصاویر، فایلهای css ، js و غیره)
پس از این تنظیم مجددا YSlow را اجرا کرده و Performance Grade ایی را که نمایش میدهد بررسی نمائید.
بدیهی است اگر یکی از فایلهای css یا js شما تغییر کند، کلاینت، اطلاعات جدیدی را تا سال 2020 دریافت نمیکند. برای حل این مشکل یک کوئری استرینگ ساده به انتهای لینک مربوط به css یا js خود اضافه کنید تا URL جدید با URL قبلی آن یکسان نباشد (این کوئری استرینگ تاثیری روی محتوای ایستای ما ندارد). به این صورت این آدرس جدید، مجددا دریافت شده و تا سال 2020 کش خواهد شد.
نکته:
اعمال تنظیم فوق، در IIS7 ویندوز سرور 2008 مجاز است؛ اما در IIS7 ویندوز ویستا قفل شده است و قابل override نیست. برای تغییر آن، فایل زیر را پیدا کنید:
open %systemroot%\System32\inetsrv\config\applicationHost.config
<section name="staticContent" overrideModeDefault="Deny" />
<section name="staticContent" overrideModeDefault="Allow" />
مآخذ:
YSlow: Add expires header to images in IIS 7
IIS7: How to set cache control for static content?
در این قسمت قصد داریم از امکانات جدید اعتبار سنجی تعریف شده در فضای نام استاندارد System.ComponentModel.DataAnnotations استفاده نمائیم. از سیلورلایت سه به بعد امکان استفاده از این فضای نام به سادگی در برنامههای سیلورلایت میسر است (همچنین در برنامههای ASP.Net MVC)؛ اما برای کار با آن در WPF نیاز به تعدادی متد کمکی میباشد...
فهرست مطالب:
فصل 5- تعیین اعتبار ورودی کاربر و الگوی MVVM
- مقدمه
- معرفی برنامه فصل
- مدل برنامهی فصل
- ViewModel برنامه فصل
- View برنامه فصل
دریافت قسمت پنجم
دریافت مثال قسمت پنجم
تعدادی از منابع و مآخذ مورد استفاده در این سری:
2. Model View ViewModel
3. DataModel-View-ViewModel pattern
4. 5 Minute Overview of MVVM in Silverlight
5. A Field Guide to WPF Presentation Patterns
6. An attempt at simple MVVM with WPF
7. WPF: If Heineken did MVVM Frameworks Part 1 of n
8. Modal dialogs with MVVM and Silverlight 4
9. How do I do… With the Model-View-ViewModel pattern
10. Intro to WPF MVVM
11. Introduction to MVVM pattern in WPF
12. Learning WPF M-V-VM
13. Binding Combo Boxes in WPF with MVVM
14. Model-View-ViewModel Pattern
15. Unit Testable WCF Web Services in MVVM and Silverlight 4
16. MVVM Part 1: Overview
17. Which came first, the View or the Model?
18. Stackoverflow's questions tagged with MVVM
19. WPF: MVVM (Model View View-Model) Simplified
20. WPF and MVVM tutorial 01, Introduction
21. WPF patterns : MVC, MVP or MVVM or…?
22. Silverlight, MVVM and Validation Part III
23. DotNetKicks.com - Stories recently tagged with 'MVVM'
24. DotNetShoutout - Stories tagged with MVVM
25. MVVM Light Toolkit
26. MVVM screen casts
27. What’s new in MVVM Light V3
28. Using RelayCommands in Silverlight 3 and WPF
29. WPF Apps With The Model-View-ViewModel Design Pattern
30. WPF MVVM and Showing Dialogs