اشتراکها
اشتراکها
ReSharper 9.1.3 منتشر شد
اشتراکها
پروژههای شکار باگ 2015
دورهی شما که عالی بود و خیلی هم جامع ... در این مورد شکی نیست ... ولی من فقط خواستم بگم که واقعا با سرمایه گذاری که رو Code First شد رسما این روش خیلی بشتر استفاده میشه ... و من گفتم سورسایه آموزشی بیشتر در این بخش بهتره تا قسمت Model First که تغییر محسوسی دیگه توش نیست ... وگرنه کاری که بچهها میکنن (کلا ترجمهی فیلمهای آموزشی pluralsight ) کار واقعا خوبیه و فوق العاده به درد بخوره ... چه بخوایم چه نخوایم خیلیها که تازه کارن و میخوان پیشرفت زیادی داشته باشن با زبان مشکل دارن در وهلهی اول ... این چیزیه که یه روزی هممون تو مودش بودیم!
این افزونه خروجی ساده متنی داره. اگر نیاز به بازگرداندن اطلاعات بیشتر و ساختار یافتهای هست، باید خروجی JSON براش طراحی کنید و بعد در سمت jQuery Ajax این ساختار مدنظر رو پردازش کنید. مثلا ساختاری بر اساس خواصی مانند لیست خطاها، لیست پیامها و وضعیت عملیات. بعد قسمت complete افزونه فوق باید کلا بازنویسی شود.
JavaScript is an important technology for development on many
different platforms, including web, mobile app, and server programming.
In Visual Studio 2013 we already support IntelliSense, Go to Definition,
colorization, and formatting of JavaScript source, along with several
other features. We’ve carried these forward into Visual Studio 2015 and we’ve improved the experience for JavaScript developers by focusing on three key areas:
- Improving the development experience when using popular JavaScript libraries
- Adding support for new JavaScript ECMAScript 2015 (also known as ES2015 and formerly ES6) language and web browser APIs
- Increasing your productivity in complex JavaScript code bases
پاسخ به بازخوردهای پروژهها
آموزش گرفتن خروجی از پروژه
- چنین مشکلی مشاهده نشد (مجددا از صفر دریافت و بررسی شد).
- این سه مطلب را هم مدنظر داشته باشید: ساخت بانک اطلاعاتی + نصب مجدد T4MVC + تنظیمات LocalDB
- این سه مطلب را هم مدنظر داشته باشید: ساخت بانک اطلاعاتی + نصب مجدد T4MVC + تنظیمات LocalDB
پیش از ادامهی نوشتار بهتر است توضیحاتی دربارهی قالبهای T4 داده شود. این قالبهای مصنوعی حاوی کدهایی که است که هدف آن صرفهجویی در نوشتن کد توسط برنامه نویس است. مثلاً در MVC شما یکبار قالبی برای صفحه Index خود تهیه میکنید که برای نمونه بجای ساخت جدول ساده، از گرید Kendo استفاده کند و همچنین دارای دکمه ویرایش و جزئیات باشد. از این پس هر بار که نیاز به ساخت یک نمای نوع لیست برای یک ActionResult داشته باشید فرم ساز MVC از قالب شما استفاده خواهد کرد. روشن است که خود Visual Studio نیز از T4 در ساخت بسیاری از فرمها و کلاسها بهره میبرد.
خبر خوب اینکه برای ساخت کلاسهای هر موجودیت در Entity Framework نیز از قالبهای T4 استفاده میشود و اینکه این قالبها در دسترس توسعهدهندگان برای ویرایش یا افزودن است.
افزونهی Tangible را دریافت کنید و سپس نصب کنید. این افزونه ظاهر نامفهوم قالبهای T4 را ساده و روشن میکند.
ما نیاز داریم که خود Visual Studio زحمت این سه کار را بکشد:
1- بالای هر کلاس موجودیت عبارت using System.Runtime.Serialization; را بنویسید.
2- صفت [DataContract] را پیش از تعریف کلاس بیفزاید.
3- صفت [DataMember] را پیش از تعریف هر ویژگی بیفزاید.
همانند شکل زیر روی فایل MyNewsModel.tt دوکلیک کنید تا محتوای آن در سمت چپ نشان داده شود. این محتوا باید ظاهری همانند شکل پیدا کرده باشد:
کد زیر را در محتوای فایل جستوجو کنید:
public string Property(EdmProperty edmProperty) { return string.Format( CultureInfo.InvariantCulture, "{0} {1} {2} {{ {3}get; {4}set; }}", Accessibility.ForProperty(edmProperty), _typeMapper.GetTypeName(edmProperty.TypeUsage), _code.Escape(edmProperty), _code.SpaceAfter(Accessibility.ForGetter(edmProperty)), _code.SpaceAfter(Accessibility.ForSetter(edmProperty))); }
public string Property(EdmProperty edmProperty) { return string.Format( CultureInfo.InvariantCulture, "[DataMember]" + Environment.NewLine + "{0} {1} {2} {{ {3}get; {4}set; }}", Accessibility.ForProperty(edmProperty), _typeMapper.GetTypeName(edmProperty.TypeUsage), _code.Escape(edmProperty), _code.SpaceAfter(Accessibility.ForGetter(edmProperty)), _code.SpaceAfter(Accessibility.ForSetter(edmProperty))); }
public string EntityClassOpening(EntityType entity) { return string.Format( CultureInfo.InvariantCulture, "{0} {1}partial class {2}{3}", Accessibility.ForType(entity), _code.SpaceAfter(_code.AbstractOption(entity)), _code.Escape(entity), _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); }
این کد را نیز به این صورت تغییر دهید:
public string EntityClassOpening(EntityType entity) { return string.Format( CultureInfo.InvariantCulture, "[DataContract]" + Environment.NewLine + "{0} {1}partial class {2}{3}", Accessibility.ForType(entity), _code.SpaceAfter(_code.AbstractOption(entity)), _code.Escape(entity), _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))); }
public string UsingDirectives(bool inHeader, bool includeCollections = true) { return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) ? string.Format( CultureInfo.InvariantCulture, "{0}using System;{1}" + "{2}", inHeader ? Environment.NewLine : "", includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", inHeader ? "" : Environment.NewLine) : ""; }
public string UsingDirectives(bool inHeader, bool includeCollections = true) { return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) ? string.Format( CultureInfo.InvariantCulture, "using System.Runtime.Serialization;" + Environment.NewLine + "{0}using System;{1}" + "{2}", inHeader ? Environment.NewLine : "", includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", inHeader ? "" : Environment.NewLine) : ""; }
فایل MyNewsModel.tt را ذخیره کنید و از آن خارج شوید. بار دیگر هر کدام از کلاسهای tblNews و tblCategory را باز کنید. خواهید دید که به صورت خودکار تغییرات مد نظر ما به آن افزوده شده است. از این پس بدون هیچ دلواپسی بابت حذف صفتها، میتوانید هرچند بار که خواستید مدل خود را بههنگام کنید.
در بخش پسین دوباره به WCF بازخواهیم گشت و به تعریف روالهای مورد نیاز خواهیم پرداخت.