وبلاگها و سایتهای ایرانی
Visual Studio
ASP. Net
طراحی وب
اسکیوال سرور
Nhibernate
عمومی دات نت
ویندوز
متفرقه
- JavaFX 1.0 منتشر شد. (بحث داغ این هفتهی مجامع جاوا بود)
اجازه بدهید قبل از هر چیزی به دو مفهوم اصلی در IIS بپردزیم :
1. Worker Process
2. Application Pool
پروسههای کارگر w3wp.exe وظیفهی اجرای برنامههای asp.net را در IIS ، به عهده دارند. این پروسهها مسئولیت پردازش تمامی درخواست و پاسخها از/به کلاینت را دارند. هر کاری که باید در asp.net انجام بشود، توسط اینها صورت میگیرد. به بیان سادهتر این پروسهها قلب برنامههای ASP.Net بر روی IIS هستند .
Application Pool:این پولها در واقع ظرفی یا در برگیرنده ای برای پروسههای کارگر به حساب میآیند. این پولها پروسههای کارگر را از هم جدا و دسته بندی میکنند تا قابلیت اعتماد، امنیت و در دسترس بودن بدهند. موقعی که یک پروسه یا حتی یک پول دچار مشکل میشود، این اطمینان داده میشود که تاثیری بر دیگر پولها یا پروسههای کارگر، ندارد. یعنی موقعی که یک web application دچار مشکل شود، هیچ تاثیری بر اجرای web applicationهای دیگر ندارد. به یک application pool با چند پروسه کارگر web garden میگویند.
WAS در قسمت سوم این مقاله توضیح داده خواهد شد.
در این مقاله قصد داریم اطلاعات مفیدی را در مورد طراحی دیتابیسهای چند زبانه، در اختیار شما بگذاریم. مدتی قبل به طراحی دیتابیسی که چند زبانه بودن توضیحات کالا را برای مشتریانی از کشورهای مختلف پشتیبانی میکرد، نیاز داشتم. وقتی شروع به پیاده سازی طرح دیتابیس کردم، جواب سرراست نبود. زمانیکه در وب برای بهترین راه جستجو میکردم، با نظرات و روشهای زیادی مواجه شدم. در ادامه بعضی از روشهای محبوب را بیان میکنم.
ستون اضافی : این سادهترین راه است و به ازای هر ستونی که نیاز به ترجمه داشته باشد، ستون اضافی در نظر میگیریم.CREATE TABLE app_product ( Id Int IDENTITY NOT NULL, Description_en Text, Description_pl Text, PRIMARY KEY (Id) );
مزایا :
معایب :
CREATE TABLE ref_language ( Code Char(2)NOT NULL, Name Varchar(20) NOT NULL, PRIMARY KEY (Code) ); CREATE TABLE app_translation ( Id Int IDENTITY NOT NULL, PRIMARY KEY (Id) ); CREATE TABLE app_translation_entry ( TranslationId Int NOT NULL, LanguageCode Char(2) NOT NULL, Text Text NOT NULL, FOREIGN KEY (TranslationId) REFERENCES app_translation(Id), FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code) ); CREATE TABLE app_product ( Id Int IDENTITY NOT NULL, Description Int NOT NULL, PRIMARY KEY (Id), FOREIGN KEY (Description) REFERENCES app_translation(Id) );
مزایا :
معایب :
CREATE TABLE ref_language ( Code Char(2)NOT NULL, Name Varchar(20) NOT NULL, PRIMARY KEY (Code) ); CREATE TABLE app_product ( Id Int IDENTITY NOT NULL, PRIMARY KEY (Id) ); CREATE TABLE app_product_translation ( ProductId Int NOT NULL, LanguageCode Char(2) NOT NULL, Description Text NOT NULL, FOREIGN KEY (ProductId) REFERENCES app_product(Id), FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code) );
مزایا :
معایب :
سه مثال نشان داده شده در بالا به ما ایده میدهند که چگونه روشهای مختلف ممکن است استفاده شوند. البته اینها همه گزینههای ممکن نیستند، فقط محبوبترین روشها هستند و شما میتوانید آنها را ویرایش کنید؛ به عنوان مثال با تعریف View های اضافی که join های پیچیده شما را در کدها، ذخیره میکنند. راه حلی که شما انتخاب میکنید به نیازمندیهای پروژه وابسته است. اگر شما به سادگی نیاز دارید و مطمئن هستید تعداد زبانهای پیشتیبانی کم و ثابت است، میتوانید راه حل اول را انتخاب کنید. اگر به انعطاف پذیری بیشتری نیاز دارید، میتوانید join های ساده در کوئریهای چند زبانه را انتخاب کنید. راه حل سوم انتخاب مناسبی است.
منبع :
http://fczaja.blogspot.com/2010/08/multilanguage-database-design.html
var numbers = new List<int> { -7, 1, 5, -6 };
var sortedNumbers1 = numbers.OrderBy(n => n); var sortedNumbers2 = numbers.OrderByDescending(n => n);
public static IOrderedEnumerable<TSource> OrderBy<TSource,TKey>( [NotNull] this IEnumerable<TSource> source, [NotNull] Func<TSource,TKey> keySelector)
var sortedNumbers3 = numbers.Order(); var sortedNumbers4 = numbers.OrderDescending();
public static IOrderedEnumerable<T> Order<T>(this IEnumerable<T> source) public static IOrderedEnumerable<T> OrderDescending<T>(this IEnumerable<T> source)
public class User { public string Name { set; get; } public int Age { set; get; } }
List<User> users = new() { new User { Name = "User 1", Age = 34 }, new User { Name = "User 2", Age = 24 }, };
var orderedUsers = users.Order();
public class User : IComparable<User> { public string Name { set; get; } public int Age { set; get; } public int CompareTo(User? other) { if (ReferenceEquals(this, other)) { return 0; } if (ReferenceEquals(null, other)) { return 1; } var nameComparison = string.Compare(Name, other.Name, StringComparison.Ordinal); if (nameComparison != 0) { return nameComparison; } return Age.CompareTo(other.Age); } }
var orderedUsers2 = users.OrderBy(user => user.Name).ThenBy(user => user.Age);