درخواست همزمان گزارش
در FlushInBrowser ، نام فارسی دارای فاصله را صحیح اعمال نمیکند.
مثال:
"گزارش عملکرد کارکنان" میشود " گزارش "
متدهای الحاقی تمیز سازی رشتهها
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); } } }
توضیحاتی در مورد سیستم Identity پروژه
در این مورد که فرمودید
"به صورت پیش فرض بهتره یک نقش کلی و سیستمی تحت عنوان مدیران ارشد درج شود و بعد از توزیع پروژه، این امکان وجود خواهد داشت که این افراد گروههای کاربری جدید ایجاد کنند و دسترسی به بخشها رو همانطور که متوجه شدید برای گروه درج شده اعمال کنند. "کاملا درسته و به عبارتی با توجه به ساختار پروژه شما این گروه سیستمی میباشد.
و در این مورد :
چون در این سیستم شما نقش هارو پویا کردید مدیر ارشد به راحتی میتونه گروه کاربری درست بکنه که فرضا هیچ اشتراکی نداشته باشن ولی هدف من از طرح این "درخواست راهنمایی" نقش هایی هستند که وجه مشترک دارن . لطفا مثال زیر رو ببینید :موردی رو در نظر بگیرید که اصلا هیچ اشتراکی بین دو گروه کاربری از نظر دسترسیها نباشد ، اون موقع چه کار خواهید کرد؟ اینکه مدیر ارشد ما به چه شکل با سیستم کار میکند خود مختار است.
کل مجوزها : A و B و C و D و E و ...
گروه 1 با مجوزهای A و B
گروه 2 با مجوزهای B و C
( مجوز B بین هر دو مشترکه )
حالا مدیر ارشد میخواد گروهی تشکیل بده که به مجوز A و C نیاز داره. برای این کار بهتره که یک گروه 3 ایجاد کنه که مجوزهای A و C روداشته باشه. ( دقیقا چیزی که فرمودید یعنی ساخت گروه هایی که نقطه مشترکی ندارن )
حالا شرایطی رخ میده که مدیر ارشد میخواد گروهی تشکیل بده که به مجوزهای A و B و C نیاز داشته باشه. به نظرتون باید گروه 1 و گروه 2 رو به کاربران مورد نظر اختصاص بده یا اینکه فرضا یک گروه تشکل بده که این 3 مجوز رو داشته باشن و این گروهرو به کاربران اختصاص بده ؟
با توجه به سیستم طراحی شده شما ، مدیر ارشد میتونه هر دو روش رو طوری که دوست داره پیاده سازی بکنه. که یا یک گروه جدید بسازه یا اینکه هر دو گروه رو به کاربر بده. که این پویا بودن کار رو نشون میده ولی یک سوال برای من پیش اومده اونم اینه که فرض کنید مدیر ارشد گروه 1 و گروه 2 رو به یک کاربر اختصاص بده حالا بعد از مدتی میخواد مجوز B رو از این کاربر بگیرن. با این شرایط باز هم مجبورن از هر دو گروه صرفه نظر کنن چون هر دو گروه مجوز B رو دارن.
در کل هدف من اینه اگر فقط اجازه انتخاب یک نقش برای کاربر رو بدیم آیا این روش مناسب هست یا خیر ( منظورم اینه برنامه نویس اجازه بده مدیران ارشد فقط یک نقش به کاربر بدن و نه چند نقش) ؟ چون اگر این کارو بکنیم باز هم مدیر ارشد میتونه هرکاری که دوست داره بکنه و گروههای زیادی برای خودش اونطوری که دوست داره بسازه با مجوزهای مختلف و به کاربران خاصی نقشهای خاصی بده و در کل جلوی چند نقش دادن به یک کاربر رو بگیریم.
using System.Collections.Generic;
using BLL = DotNetTipsBLLLayer;//نام مستعار برای فضای نام using EmployeeDomain = DotNetTipsBLLLayer.Employee;//نام مستعار برای یک نوع داده
using (var sqlConnection = new SqlConnection()) { //کد }
using static System.Console; using static System.Math; namespace dotnettipsUsingStatic { class Program { static void Main(string[] args) { Write(" *** Cal Area *** "); int r = int.Parse(ReadLine()); var result = Pow(r, 2) * PI; Write($"Area is : {result}"); ReadKey(); } } }
enum Gender { Male, Female }
تا قبل از سی شارپ 6 برای استفادهی از نوع داده شمارشی بدین شکل عمل میکردیم:
var gender = Gender.Male;
و اکنون بازنویسی استفادهی ازEnum به کمک ویژگی جدید static using statement :
در قسمت معرفی فضاهای نام بدین شکل عمل میکنیم:
using static dotnettipsUsingStatic.Gender;
و در برنامه کافیست مستقیما نام اعضای Enum را ذکر کنیم .
var gender = Male;//تخصیص نوع داده شمارشی WriteLine($"Employee Gender is : {Male}");//استفاده مستقیم از نوع داده شمارشی
استفاده از ویژگی using static و متدهای الحاقی :
تا قبل از ارائه سی شارپ 6 اگر نیاز به استفادهی از یک متد الحاقی خاص همچون where در فضای نام System.Linq.Enumeable داشتیم میبایستی فضای نام System.Linq را به طور کامل اضافه میکردیم و راهی برای اضافه کردن یک فضای نام خاص درون فضای نام بزرگتر وجود نداشت.
اما با قابلیت جدید اضافه شده میتوانیم بخشی از یک فضای نام را اضافه کنیم:
متدهای استاتیک و متدهای الحاقی در زمان استفاده از ویژگی using static:
فرض کنید کلاس static ای بنام MyStaticClass داشته باشیم که متد Print1 و Print2 در آن تعریف شده باشند:
public static class MyStaticClass { public static void Print1(string parameter) { WriteLine(parameter); } public static void Print2(this string parameter) { WriteLine(parameter); } }
برای استفاده از متدهای تعریف شده به شکل زیر عمل میکنیم :
//فراخوانی تابع استاتیک Print1("Print 1");//روش اول MyStaticClass.Print1("Prtint 1");//روش دوم //فراخوانی متد الحاقی استاتیک MyStaticClass.Print2("Print 2"); "print 2".Print2();
ویژگیهای جدید ارائه شده در سی شارپ 6 برای افزایش خوانایی برنامهها و تمیزتر شدن کدها اضافه شدهاند. در مورد ویژگیهای ارائه شده در مقالهی جاری این نکته مهم است که گاهی قید کردن نام کلاسها خود سبب افزایش خوانایی کدها میشود .
ارتباطات بلادرنگ و SignalR
چند وقت پیش برای کار مصاحبه دادم و توی اون مصاحبه مطالعه در زمینه SignalR و angularJS بهم پیشنهاد شد.
خیلی وقت بود فرصت نمیکردم توی نت درباره این مورد سرچ کنم (مطلب انگلیسی خوشم نمیاد).
تا اینکه به دنبال سرچ درباره MVVM به این سایت عالی برخورد کردم.
واقعا کارتون یکه ....
تازه فهمیدم که اطلاعاتم خیلی قدیمیه و باید سریع بروزش کنم.
با تشکر از مقاله عالیتون.
خدا قوت
یا حق
آشنایی با الگوی Adapter
در زبان انگلیسی derived به معنای مشتق شده هست و به نظر در اینجا منظور اصلی همین بوده؛ چون derived هم برای اینترفیس و هم در ارث بری، هر دو بکار برده میشه. به کلاسی که یک اینترفیس رو پیاده سازی میکنه، derived class هم میگن. مثلا: Because interfaces must be implemented by derived classes and structs, they define a contract