صرف نظر از اینکه برنامه شما از چند DLL نهایتا تشکیل میشه، تمام اینها داخل یک Application Domain اجرا میشن. یعنی عملا یک برنامهی واحد شما دارید که از اتصال قسمتهای مختلف با هم کار میکنه. IoC Container هم تنظیماتش اول کار برنامه کش میشه. یعنی یکبار که تنظیم شد، در سراسر آن برنامه قابل دسترسی هست. بنابراین نیازی نیست همه جا تکرار بشه. یکبار آغاز کار برنامه اون رو تنظیم کنید کافی هست.
نظرات مطالب
قابلیت Attribute Routing در ASP.NET MVC 5
مطابق مقالهای که ابتدای بحث لینک داده شده، امکان ترکیب هر دو حالت attribute routing و convention-based routing با هم وجود دارد و اگر در حالت قدیمی یعنی convention-based routing، شما مثل قبل یک default route تعریف کرده باشید، دیگر نیازی به ذکر و تکرار default route هم نام یک کنترلر در حالت attribute routing نخواهید داشت و فقط جایی که واقعا نیاز است باید از آن استفاده کرد. attribute routing کار رو برای تعریف قیدها یا constraints خیلی ساده و طبیعی کرده.
نظرات مطالب
ASP.NET MVC #12
با تشکر از مطلب خوبتون
امکان استفاده از RenderAction در Shared/_Layout وجود نداره ؟ وقتی اینکارو انجام میدم با ارور StackOverflowException برخورد میکنم تکه کد اجرای RenderAction انقدر تکرار میشه تا به این ارور برخورد مبکنه!
میخوام لیست گروهبندی مطالبمو تو _Layout.cshtml ( نمایش در تمام صفحات مثل MasterPage در WebForm) نشون بدم چه راهی رو پیشنهاد میدید ؟ خیلی ممنون
درابتدا بهتر عنوان کنم که در کل 2 نوع برنامه نویس وجود داره. برنامه نویسی که میخواد برنامه درست کار کنه و برنامه نویسی که میخواد برنامه درست نوشته بشه. در این جا هدف اصلی ما نوشتن برنامه به صورت درست هستش. دلیل اینکه foreach کندتر از Lamba ForEach عمل میکنه همان طور که جناب یوسف نژاد عنوان کردند به خاطر اجرای دستورات بیشتر در هر تکرار است. مثل کد زیر:
کامپایلر برای انجام کامپایل ، کدهای بالا رو تبدیل به کدهای قابل فهم زیر میکنه:
همانطور که میبینید از دو دستور enumerator.MoveNext و enumerator.Current در هر تکرار داره استفاده میشه در حالی که List.ForEach فقط نیاز به یک فراخوانی در هر تکرار دارد.
در مورد Array.ForEach هم این نکته رو اضافه کنم که Array.ForEach فقط برای آرایههای یک بعدی استفاده میشه و کامپایلر هنگام کار با آرایهها کد IEnumerator رو که در بالا توضیح دادم تولید نمیکنه در نتیجه در حلقه foreach برای آرایهها هیچ فراخوانی متدی صورت نمیگیرد در حالی Array.ForEach نیاز به فراخوانی delegate تعریف شده در ForEach به ازای هر تکرار دارد.
آزمایشات بالا هم در یک سیستم DELL Inspiron 9400 با Core Duo T2400 و 2 GB RAM انجام شده است . این آزمایشات رو اگر در هر سیستم دیگر با هر Config اجرا کنید نتیجه کلی تغییر نخواهد کرد و فقط از نظر زمان اجرا تفاوت خواهیم داشت نه در نتیجه کلی.
long Sum(List<int> intList) { long result = 0; foreach (int i in intList) result += i; return result; }
long Sum(List<int> intList) { long result = 0; List<T>.Enumerator enumerator = intList.GetEnumerator(); try { while (enumerator.MoveNext()) { int i = enumerator.Current; result += i; } } finally { enumerator.Dispose(); } return result; }
در مورد Array.ForEach هم این نکته رو اضافه کنم که Array.ForEach فقط برای آرایههای یک بعدی استفاده میشه و کامپایلر هنگام کار با آرایهها کد IEnumerator رو که در بالا توضیح دادم تولید نمیکنه در نتیجه در حلقه foreach برای آرایهها هیچ فراخوانی متدی صورت نمیگیرد در حالی Array.ForEach نیاز به فراخوانی delegate تعریف شده در ForEach به ازای هر تکرار دارد.
آزمایشات بالا هم در یک سیستم DELL Inspiron 9400 با Core Duo T2400 و 2 GB RAM انجام شده است . این آزمایشات رو اگر در هر سیستم دیگر با هر Config اجرا کنید نتیجه کلی تغییر نخواهد کرد و فقط از نظر زمان اجرا تفاوت خواهیم داشت نه در نتیجه کلی.
نظرات مطالب
وبپارت اسلاید متحرک در شیرپوینت 2010
نکتهای عمومی در مورد تمام محصولات مایکروسافت:
«اگر کپی مطابق اصل خطای مشاهده شده را در جستجوی گوگل paste کنید و بر روی دکمه جستجو کلیک نمائید، در همان صفحه اول به جواب خواهید رسید»
این خطاها و این جملات بارها در سایتهای مختلف تکرار شدن. چون تغییری هم نخواهند کرد، به عنوان یک مرجع رفع اشکال مورد استفاده قرار میگیرند.
مثلا همین عبارت بالا را که جستجو کنید به این راه حل خواهید رسید.
«اگر کپی مطابق اصل خطای مشاهده شده را در جستجوی گوگل paste کنید و بر روی دکمه جستجو کلیک نمائید، در همان صفحه اول به جواب خواهید رسید»
این خطاها و این جملات بارها در سایتهای مختلف تکرار شدن. چون تغییری هم نخواهند کرد، به عنوان یک مرجع رفع اشکال مورد استفاده قرار میگیرند.
مثلا همین عبارت بالا را که جستجو کنید به این راه حل خواهید رسید.
نظرات مطالب
EF Code First #12
خیر. هستند یک سری الگوی مخزن عمومی به این شکل که در قسمت 11 سری EF نقد شدند و دارای مشکلات زیادی بوده که نیازی به تکرار آن در اینجا نیست. به علاوه دنیای واقعی با چند مورد متد ساده عمومی مدل نمیشود. عموما جمع چند عملیات هست که در قالب یک متد مشخص، خروجی یک سرویس را تشکیل میدهد. این عملیات هم میتواند مرتبط به چندین موجودیت باشد در آن واحد. تمام این موارد باید به صورت بسته بندی شده در قالب یک متد در اختیار لایههای دیگر قرار گیرد.
نظرات مطالب
ASP.NET MVC #18
علتش میتونه عدم دریافت نقشهای کاربر لاگین کرده به سیستم باشد. اگر در قسمت ایجاد کاربر، نقش مورد نیاز، مدیریتی است و مدیر (شخص لاگین کرده) به این صفحه هدایت شده و باز به لاگین بر میگردد، یعنی شخص لاگین شده دارای این نقش نیست. یا اگر این دسترسی تعریف شده، قسمت پروایدرنقشهای سفارشی، درست عمل نکرده.
ضمن اینکه به نظر این redirectها نیاز به یک شمارنده هم دارد که در یک چنین مواردی زیاده از حد تکرار نشود.
ضمن اینکه به نظر این redirectها نیاز به یک شمارنده هم دارد که در یک چنین مواردی زیاده از حد تکرار نشود.
نظرات مطالب
ASP.NET MVC #11
تکرار نیست. هر View ساختار مستقل خودش رو داره. به نظر استفاده از یک مدل کلی برای چندین View حجم کدنویسی کمتری داره ولی واقعیت این است که مدام باید یک سری فیلدها را exclude کنید تا به مشکل امنیتی برنخورید.
در کل انجام کار اصولی الزاما به معنای کمتر کدنوشتن نیست. ضمن اینکه کتابخانه auto-mapper کار نگاشت viewmodel به model رو میتونه خیلی ساده انجام بده. بنابراین حداقل در این قسمت حجم کدنویسی کمی خواهید داشت.
در کل انجام کار اصولی الزاما به معنای کمتر کدنوشتن نیست. ضمن اینکه کتابخانه auto-mapper کار نگاشت viewmodel به model رو میتونه خیلی ساده انجام بده. بنابراین حداقل در این قسمت حجم کدنویسی کمی خواهید داشت.
نظرات مطالب
EF Code First #1
Connection String کاری به دیتامدل نداره. پیش فرض آن نام کلاسی است که از DbContext مشتق میشود (در مطلب فوق توضیح دادم: «در هر دو حالت، name باید به نام کلاس مشتق شده از DbContext اشاره کند که در مثال جاری همان Context است.»).
نیازی هم نیست در سراسر پروژه تکرار شود. یکبار باید در فایل کانفیگ برنامه تعریف شود.
اطلاع داشتن از این قراردادهای توکار از اتلاف وقت جلوگیری میکند.
نیازی هم نیست در سراسر پروژه تکرار شود. یکبار باید در فایل کانفیگ برنامه تعریف شود.
اطلاع داشتن از این قراردادهای توکار از اتلاف وقت جلوگیری میکند.
سلام؛ من نگفتم بسته میشه. من کارم همینه! فقط میتونه به اشتراک گذاشته بشه یا نشه. میتونه عمومی باشه یا نباشه. ولی زندگی من همینه.
چون باز هم تکرار میکنم، «به اشتراک میگذارم، به اشتراک میگذاری» خوبه.
الان جدا در طول ماه 4 تا 5 نفر فعال هستند که جمعا 5 تا مطلب «شاید» منتشر کنند. این خوب نیست.
فقط تصمیمی که گرفتم این است که برای سال بعد عمومی نباشه. رایگان هم نباشه.
چون باز هم تکرار میکنم، «به اشتراک میگذارم، به اشتراک میگذاری» خوبه.
الان جدا در طول ماه 4 تا 5 نفر فعال هستند که جمعا 5 تا مطلب «شاید» منتشر کنند. این خوب نیست.
فقط تصمیمی که گرفتم این است که برای سال بعد عمومی نباشه. رایگان هم نباشه.