تهیه خروجی RSS در برنامههای ASP.NET MVC
<link title="فید آخرین تغییرات سایت" href="/rss.xml" type="application/rss+xml" rel="alternate" />
سفارشی کردن ASP.NET Identity در MVC 5
میخواستم بدونم میشه یه پروژه از نوع mvc و یه پروژه از نوع web form رو به صورت subdomain رو iis نصب کرد؟
در واقع من میخوام cms سایت رو با mvc انجام بدم و خود سایت رو با web from و به صورت ساب دومین مثلاً:
mysite.com
دریافت خروجی سایت
بنده فکر کنم همان 1 درصد مرورگر safari باشم که سایت شما را با ipad مرور میکنم
از طرفی بدلیل اینکه مدیریت فایل PDF در دستگاههای مانند ipad خیلی خسته کننده است به شخصه از CHM بیشتر استفاده میکنم و کاربر پسندتر است
در هر صورت چه فایل CHM و چه فایل PDF باشد خیلی از شما متشکریم
به گفته دوستان داشتن حتی فایل txt برخی مطالب این سایت بسیار ارزشمندتر است
اندکی به روز رسانی
لیست وبلاگهای آی تی ایرانی را به روز کردم که فایل OPML آن از اینجا و همچنین از طریق لینک آن در منوی سمت راست سایت قابل دریافت است.
این لیست بر اساس یافتههای من از سایتهای به اشتراک گذاری لینکهای ایرانی است مانند : idevcenter.com و mohand.es . اگر آدرس وبلاگ شما در این لیست قرار ندارد لطفا یکبار در یکی از این دو سایت آدرس مطالب خود را منتشر کنید. با تشکر
ASP.NET MVC #18
استفاده از این پروایدر به صورت توکار فقط در تمپلیت Internet Application استفاده شده. خاصیت این سیستم ایناست که سختی آن سیستم قدیمی که از ASP.NET 2.0 باب شد را ندارد و واقعا Simple است.
<roleManager enabled="true" defaultProvider="SimpleRoleProvider"> <providers> <clear/> <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/> </providers> </roleManager> <membership defaultProvider="SimpleMembershipProvider"> <providers> <clear/> <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> </providers> </membership>
WebSecurity.CreateUserAndAccount( model.UserName, model.Password, new { Mobile = model.Mobile }, false);
تعریف نوع جنریک به صورت متغیر
مطلبی را چندی قبل در مورد نحوه خودکار کردن افزودن کلاسهای EntityTypeConfiguration به modelBuilder در این سایت مطالعه کردید. در مطلب جاری به خودکار سازی تعاریف مرتبط با DbSetها خواهیم پرداخت.
ابتدا مثال کامل زیر را درنظر بگیرید:
using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; using System.Reflection; namespace MyNamespace { public abstract class BaseEntity { public int Id { set; get; } public string CreatedBy { set; get; } } public class User : BaseEntity { public string Name { get; set; } } public class MyContext : DbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { var asm = Assembly.GetExecutingAssembly(); loadEntities(asm, modelBuilder, "MyNamespace"); } void loadEntities(Assembly asm, DbModelBuilder modelBuilder, string nameSpace) { var entityTypes = asm.GetTypes() .Where(type => type.BaseType != null && type.Namespace == nameSpace && type.BaseType.IsAbstract && type.BaseType == typeof(BaseEntity)) .ToList(); var entityMethod = typeof(DbModelBuilder).GetMethod("Entity"); entityTypes.ForEach(type => { entityMethod.MakeGenericMethod(type).Invoke(modelBuilder, new object[] { }); }); } } public class Configuration : DbMigrationsConfiguration<MyContext> { public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; } protected override void Seed(MyContext context) { context.Set<User>().Add(new User { Name = "name-1" }); context.Set<User>().Add(new User { Name = "name-2" }); context.Set<User>().Add(new User { Name = "name-3" }); base.Seed(context); } } public static class Test { public static void RunTests() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>()); using (var context = new MyContext()) { var user1 = context.Set<User>().Find(1); if (user1 != null) Console.WriteLine(user1.Name); } } } }
همانطور که ملاحظه میکنید در این مثال خبری از تعاریف DbSetها نیست. به کمک Reflection تمام مدلهای برنامه که از نوع کلاس پایه BaseEntity هستند (روشی مرسوم جهت مدیریت خواص تکراری مدلها) یافت شده (در متد loadEntities) و سپس نتیجه حاصل به صورت پویا به متد جنریک Entity ارسال میشود. حاصل، افزوده شدن خودکار کلاسهای مورد نظر به سیستم EF است.
البته در این حالت چون دیگر کلاسهای مدلها در MyContext به صورت صریح تعریف نمیشوند، نحوه استفاده از آنها را توسط متد Set، در متدهای RunTests و یا Seed، ملاحظه میکنید.
آغاز کار با WPF
آشنایی اولیه
WPF مخفف عبارات Windows Presentation Foundation است که ویکی پدیا این گونه ترجمه میکند : بنیاد نمایش ویندوزی. در برنامه نویسی «ویندوز فرم» ما تمرکز دقیقی بر ساخت رابط کاربری برنامه به خصوص در رزولوشنهای مختلف نداریم و در بسیاری از اوقات کد با رابط کاربری به شدت وابسته میشد که با ارائه WPF از نسخهی سوم دات نت فریم ورک به بعد، این مشکل حل شد و همچنین عملیات refactoring را بسیار سادهتر کرد. در حالت ویندوز فرم به خاطر وابستگی شدید کد و UI، عملیات بهینه سازی کد اصلا موفق نبود.
WPF از ترکیب عناصر دو بعدی و سه بعدی، اسناد، موارد چند رسانهای و رابط کاربری تشکیل شدهاست و موتور رندر آن بر اساس اطلاعات برداری از کارت گرافیک جهت نمایش ظاهر برنامه کمک میگیرد که باعث تهیه برنامهای با رابط کاربری سریعتر، مقیاس پذیرتر و بدون وابستگی به رزولوشن میشود.
جداسازی رفتارها و ظاهر برنامه
همانطور که گفتیم بخش رابط کاربری دیگر مستقل از کد برنامه شده است و ظاهر برنامه توسط زبان نشانه گذاری XAML ایجاد میشود و بخش کد هم با یکی از زبانهای موجود در مجموعه دات نت نوشته خواهد شد. نهایتا این دو بخش توسط رویدادها، فرامین و DataBinding با یکدیگر متصل میشوند. از مزایای جدا بودن این ویژگی:
- عدم وابستگی این دو بخش
- طراح و کدنویس میتوانند هر کدام به طور جداگانه کار کنند.
- ابزارهای طراحی میتوانند به طور جداگانهای بر روی اسناد XML کار کنند بدون اینکه نیاز به درگیری با کدنویسی داشته باشند.
یکی از برنامه هایی که به طراحی رابط کاربری با پشتیبانی از XAML میپردازد برنامه Microsoft Experssion Blend از مجموعه Blend است
Rich Composition
یکی از ویژگیهای XAML، ساخت اشیاء ترکیبی هست که به راحتی با ترکیب تگها با یکدیگر و قرار دادن هر شیء داخل یک شیء دیگر میتوان به یک شیء جدید دست یافت؛ مثل قرار دادن مجموعه ویدیوها در یک لیست. شیء زیر از ترکیب سه شیء تصویر و متن و دکمه ایجاد شده است:
<Button Margin="148,123,126,130"> <StackPanel Orientation="Horizontal"> <Image Source="speaker.png" Stretch="Uniform"/> <TextBlock Text="Play Sound" VerticalAlignment="Center" Margin="10" /> </StackPanel> </Button>
Highly Customizable
با استفاده از مفهوم Style همانند آنچه که در Html و CSS دارید میتوانید اشیاء خود را خصوصی سازی کنید و ظاهر آن شیء را به طور کل تغییر دهید.
Resolution Independence
عدم وابستگی به رزولوشن یا وضوح تصویر دارد و به جای واحد پیکسل، از یک واحد منطقی که یک نود و ششم اینچ است، بهره میبرد. از آنجا که این سیستم بر اساس وکتور ایجاد شده است، مقیاس پذیری آن در تغییر اندازه یا وضوح تصویر به شدت بالا رفته است.
به زودی در قسمت اول این سری کار را با XAML آغاز خواهیم کرد.
مدل EAV چیست؟
EAV مخفف ( Entity Attribute Value ) میباشد، مدلی از طراحی دیتابیس که کاربر را به آیتمهای ثابت محدود نمیکند، فرض کنید در یک فروشگاه میخواهید چندین کالا بفروشید هر کالا هم برای خودش ویژگیهای منحصر به فرد دارد، آیا با ویژگیهای ثابت برای کالاهای متفاوت میتوان پاسخگوی نیاز مشتری بود؟ یقینا پاسخ منفی خواهد بود.
موجودیت ( Entity ): در یک سیستم میتواند کالا، مشتری، فروشنده و... باشد.ویژگی ( Attribute ):برای کالا: رنگ، وزن و... برای مشتری:نام، تلفن،آدرس و... میباشد
مقدار( value ) : هر ویژگی برابر مقداری میباشد مثلا برای رنگها آبی، قرمز و.. میباشد
جداول پایه طراحی شده:
ورود داده ها:
شیوه ورود دادهها را برای موجودیت کالا بیان میکنیم
ابتدا کالا در جدول موجودیت ثبت میگردد
سپس عنوان ویژگیهای آن مانند رنگ، وزن و... در جدول ویژگیها ثبت میگردد.
مقدار هر ویژگی هم در جدول مقدارها ثبت میشود.
در زیر شیوه ذخیره به صورت شکل مشاهده میکنید.
شیوه خواندن داده ها:
این قسمت هم به راحتی با 2 inner join میتوان به کالا، ویژگیها و مقادیر آن دست پیدا کرد.
نکات:
نکته1: این 3 جدول را باید برای هر موجودیت قابل توسعه ایجاد کرد، مثلا برای کالا، مشتری و...
نکته2: میتوان برای گروه بندی کالاها و همچنین ویژگیها جداول جداگانه ایی تعریف کرد.
نکته3: از مهمترین ویژگیهای این تفکر قابل گسترش بودن سیستم میباشد.
نکته4: میتوان برای آیتم هایی مثل نمایش داده شود یا خیر، چیدمان نمایش و...آیتم هایی به جدول ویژگیها اضافه کرد.
نکته5: این مدل در نرم افزار magento استفاده شده است.
همچنین جهت مطالعه بیشتر ساختار دیتابیس مجنتو در لینک زیر میباشد.
MAGENTO_v1.0.19700---Database-Diagram.zip
منابع: Entity–attribute–value model