اشتراک‌ها
نگاهی به تاریخچه‌ی نگارش‌های مختلف CSS

CSS3 (~2009-2012):

Level 3 CSS specs as defined by the CSSWG. (immutable)

CSS4 (~2013-2018):

Essential features that were not part of CSS3 but are already a fundamental part of CSS.

CSS5 (~2019-2024):

Newer features whose adoption is steadily growing.

CSS6 (~2025+):

Early-stage features that are planned for future CSS.

نگاهی به تاریخچه‌ی نگارش‌های مختلف CSS
اشتراک‌ها
بررسی Blazor United در دات نت 8

ASP.NET Community Standup - Blazor United in .NET 8
The Blazor team shares early thoughts on Blazor United in .NET 8, an effort to create a single unified model for all your web UI scenarios that combines the best of Razor Pages, Blazor Server, and Blazor WebAssembly.
 

بررسی Blazor United در دات نت 8
اشتراک‌ها
ویژگیهای برنامه ریزی شده C# 8.0

In this C# 8 tutorial, I am going to introduce a selection of currently planned features which will most probably end up in the final release. All of the C# 8 features are still early in development and are likely to change. 

ویژگیهای برنامه ریزی شده C# 8.0
مطالب
استفاده از DbProviderFactory
استفاده از DbProviderFactory امکان اتصال به دیتابیس‌های مختلف با یک کد واحد را برای شما فراهم می‌سازد،بطوریکه اگر بخواهید برنامه ای بنویسید که قابلیت اتصال به Oracle و SqlServer و دیگر دیتابیس‌ها را داشته باشد، استفاده از DbProviderFactory ، کار شما را تسهیل می‌نماید.

DbProviderFactory  در Net Framework 2.0. ارائه شده است.برای درک و چگونگی استفاده از DBProviderFactory مثالی را بررسی می‌نماییم.
ابتدا کد زیر را درون یک فرم کپی نمایید:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Common;

namespace DBFactory
{
    public partial class Form1 : Form
    {
        private string _MySQLProvider = "MySql.Data.MySqlClient";
        private string _SQLProvider="System.Data.SqlClient";
        private string _OracleProvider ="System.Data.OracleClient";
        private DbProviderFactory _DbProviderFactory;
        private DbConnection _DbConnection = null;
        private DbCommand _DbCommand = null;
        private DbDataAdapter _DbDataAdapter = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {

             string _SQLconnectionstring = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Test;Data Source=FARHAD-PC";
             string _Oracleconnectionstring = "Data Source=ServiceName;User Id=Username;Password=Password";
             
            _DbProviderFactory = DbProviderFactories.GetFactory(_SQLProvider);
            _DbConnection = _DbProviderFactory.CreateConnection();
            _DbConnection.ConnectionString = _SQLconnectionstring;
            
            _DbConnection.Open();

            if (_DbConnection.State == ConnectionState.Closed)
            {

                MessageBox.Show("اتصال با دیتابیس برقرار نشده است");
            }
            else
            {
                MessageBox.Show("اتصال با دیتابیس با موفقیت بر قرار شده است");
            }
            }
            catch (System.Exception excep)
            {
                MessageBox.Show(excep.Message.ToString());    
            }         

        }
    }
}

برای استفاد از DBProviderFactory می‌بایست از فضای نامی System.Data.Common استفاده نمایید. بعد از اعلان کلاس فرم تعدادی آبجکت تعریف شده است، که سه آبجکت ابتدایی آن، بیانگر Provider دیتابیس‌های MySQL،SQLSERVER و Oracle می‌باشد:
 private string _MySQLProvider = "MySql.Data.MySqlClient";
 private string _SQLProvider="System.Data.SqlClient";
 private string _OracleProvider ="System.Data.OracleClient";
Provider‌های بیان شده، جهت استفاده DBFactory برای تشخیص نوع Database می‌باشد، تا بتواند آبجکت‌های مربوط به دیتابیس را ایجاد و در اختیار برنامه نویس قرار دهد. در این مثال ارتباط با دیتابیس SQLSERVER را امتحان می‌کنیم. بنابراین خواهیم داشت:
_DbProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");

در کد بالا، Provider، دیتابیس SQLSERVER به DbProviderFactory به عنوان ورودی داده شده است، بنابراین آبجکتهای مربوط به دیتابیس SQL Server ایجاد و در اختیار شما قرار می‌گیرد.

اگر به نام فضای نامی System.Data.Common توجه نمایید،از کلمه Common استفاده شده است و منظور این است که تمامی کلاسهایی را که این فضای نامی ارائه می‌دهد، در هر دیتابیسی قابل استفاده می‌باشد. برای تشخیص، کلاسهای مربوط به این فضای نامی نیز در ابتدای نام آنها از دو حرف DB استفاده شده است. تمامی کلاسهای زیر در فضای نامی System.Data.Common قابل ارائه و استفاده می‌باشد:
DbCommand 
DbCommandBuilder 
DbConnection 
DbDataAdapter 
DbDataReader 
DbException 
DbParameter 
DbTransaction

جهت اطلاع: ممکن است سئوالی در ذهن شما ایجاد شود که دات نت چگونه براساس نام Provider نوع دیتابیس را تشخیص می‌دهد؟
جواب: زمانی که دیتابیس‌های مختلف روی سیستم شما نصب می‌شود، Provider‌های مربوط به هر دیتابیس درون فایل Machine.config که مربوط به دات نت میباشد، درج می‌شود. و دات نت براساس اطلاعات مربوط به همین فایل آبجکت‌های دیتابیس را ایجاد می‌نماید.

امیدوارم مطلب فوق مفید واقع شود.
بازخوردهای دوره
تزریق وابستگی‌های AutoMapper در لایه سرویس برنامه
یک نکته‌ی تکمیلی:
اگر با EF کار می‌کنید و LINQ to Objects نیست، از متد Project To بهتر است استفاده کنید:
ctx.Advertisements.Where(...).Project().To<AdvertisementViewModel>().ToList()
مزیت این روش این است که فقط خواص موجود در ViewModel از بانک اطلاعاتی واکشی می‌شوند؛ برای نمونه در اینجا و این مثال، فقط سه مورد.
اگر ابتدا ToList خود EF را فراخوانی کنید، تمام خواص کلاس Advertisment از بانک اطلاعاتی واکشی خواهند شد و مرحله‌ی بعد LINQ to Objects می‌شود.
اشتراک‌ها
قالب بوت استرپ 3.3.5 به صورت راست به چپ و چپ به راست - همزمان

مزیت این قالب نسبت به بقیه قالب‌های راست به چپ شده اینه که این قالب همزمان هم میتونه راست به چپ کار کنه هم چپ به راست در صورتی که توی پکیج‌های دیگه فقط یا RTL هستن یا LTR برای استفاده فقط کافیه به کانتینر مربوطه یا به تگ body کلاس rtl بدید.

هر مشکلی بود همینجا مطرح کنید در خدمتم.

قالب بوت استرپ 3.3.5 به صورت راست به چپ و چپ به راست - همزمان
اشتراک‌ها
پروژه WebApiProxy

هنگام استفاده از web service یا wcf کلاس‌های proxy فراخوانی سرویس‌ها با استفاده از metadata سرویس تولید می‌شد. بنابراین کار خیلی راحت بود. اما برای webapi قضیه چنین نیست... این پروژه یک بخش سمت سروری دارد که و یک کتابخانه کلاینتی. سمت سرور یک سرویس متادیتا برای تمامی api‌ها ایجاد می‌کند و سمت کلاینت با متصل شدن به آن تمامی کلاس‌های مربوطه را generate می‌کند. این عمل ایضا در سطح javascript هم انجام میشود. مزیت فوق العاده ای است.

پروژه WebApiProxy
نظرات مطالب
نمایش بلادرنگ اعلامی به تمام کاربران در هنگام درج یک رکورد جدید به صورت notification
SqlDependency محدود هست به SQL Server ضمن اینکه تنظیم آن هم فقط در سمت برنامه نیست. یعنی شخص استفاده کننده باید دسترسی مدیریتی به سرور SQL داشته باشه تا بتونه اون رو تنظیم کنه. ولی زمانیکه با یک ORM کار می‌کنید، تا زمانیکه از API همون ORM استفاده می‌کنید، با عوض کردن پروایدر اون، می‌تونید یک روز از SQL Server و یک روز از اوراکل یا سایر بانک‌های اطلاعاتی استفاده کنید. اینجا است که عدم نیاز به دسترسی مدیریتی و همچنین عمومی‌تر شدن راه حل یک مزیت مهم خواهد شد.
نظرات مطالب
اجرای وظایف زمان بندی شده با Quartz.NET - قسمت اول

یک جدول طراحی کنید به نام mass mail که در آن یک Content به علاوه فیلد IsDone وجود داره. مدیر سیستم متن خودش رو به صورت معمول در این جدول ثبت کنه. در وظیفه‌ی پس زمینه، رکوردهایی را که IsDone آن‌ها false است یکی یکی یافته و پردازش کنید. بعد از اتمام کار، IsDone هر رکورد را true کنید.

مزیت این روش اینه که دو ترد کاملا مجزای رابط کاربری و ترد وظیفه‌ی پس زمینه، هیچ تداخل و تماسی با هم نخواهند داشت تا سبب کرش برنامه شوند.