با سلام؛ بنده از پروژه decision به عنوان منبع و مطلب افزونه پذیری در mvc که در سایت وجود استفاده کردم که کل جداول من حدود (همه افزونه ها) حدود 200 عدد میباشد. از روش افزایش سرعت بارگذاری هنگام کار با تعداد جدول زیاد استفاده کردم (EFInteractiveViews ) (با این روش سرعت لود تقریبا نصف شد)ولی هنوز سرعت لود برنامه هم چنین وقتی که صفحه به صفحه دیگر منتقل میشود کم هست(تقریبا 15 تا 20 ثانیه) . لازم به ذکر است پروژه من وقتی با vs 2015 اجرا میکنم هیچ مشکل سرعتی ندارد و وقتی در هاست آپلوود میشود دچار مشکل سرعت میشود. اگه روشه دیگری وجود دارد که باعث کمتر شدن این زمان میشود معرفی کنید. ممنون.
سلام
خسته نباشید، سپاس از مطلب مفیدتون
نقد هایی بر استفاده از DependencyResolver وارد هست که یکی از آنها نداشتن Context هنگام Resolve کردن وابستگی هاست. (برای اطلاعات بیشتر به این پست از آقای Mark Seeman نویسندهی کتاب Dependency Injection in .NET مراجعه کنید)
به همین دلیل (و دلایل دیگر مثل انعطاف پذیری کم و ...) استفاده از CotrollerActivator نسبت به این روش پیشنهاد میشود که مطمئنا شما در سریهای بعدی این مقاله به آن خواهید پرداخت. بنده هم در این مقاله در مورد استفاده از ControllerActivator برای پیاده سازی DI نوشته ام.
موفق باشید
نظرات مطالب
ASP.NET MVC #1
- در نظرات مطلب «PHP سریعتر از ASP.NET! افسانه یا واقعیت؟ » در مورد علت تاخیر اولیه نمایش سایتهای ASP.NET بحث شده. (چند مرحلهای بودن کامپایل کدهای دات نت و زمان بارگذاری اولیه برنامه در یک پروسه وب؛ بعد از این گذر اولیه الزامی، با سرعت خوبی مواجه خواهید بود)
- ضمنا بحث MVC، بحث سرعت نیست. اینها مسایل حاشیهای هستند. اینجا در مورد یک طرز تفکر دیگر، در مورد بکارگیری الگوها، تهیه برنامههایی با قابلیت آزمون پذیری بهتر، تمیزتر و اصولی کار کردن بیشتر بحث میشود و نه مسابقهی سرعت.
- ضمنا بحث MVC، بحث سرعت نیست. اینها مسایل حاشیهای هستند. اینجا در مورد یک طرز تفکر دیگر، در مورد بکارگیری الگوها، تهیه برنامههایی با قابلیت آزمون پذیری بهتر، تمیزتر و اصولی کار کردن بیشتر بحث میشود و نه مسابقهی سرعت.
نظرات مطالب
الگوی استراتژی - Strategy Pattern
- اگر پروژه خودتون هست، از اینترفیس استفاده کنید. تغییرات آن و نگارشهای بعدی آن تحت کنترل خودتان است و build دیگران را تحت تاثیر قرار نمیدهد.
- در پروژههای سورس باز دات نت، عموما از ترکیب این دو استفاده میشود. مواردی که قرار است در اختیار عموم باشند حتی دو لایه هم میشوند. مثلا در MVC یک اینترفیس IController هست و بعد یک کلاس Abstract به نام Controller، که این اینترفیس را پیاده سازی کرده برای ورژن پذیری بعدی و کنترلرهای پروژههای عمومی MVC از این کلاس Abstract مشتق میشوند یا در پروژه RavenDB از کلاسهای Abstract زیاد استفاده شده، مانند AbstractIndexCreationTask و AbstractMultiMapIndexCreationTask و غیره.
- در پروژههای سورس باز دات نت، عموما از ترکیب این دو استفاده میشود. مواردی که قرار است در اختیار عموم باشند حتی دو لایه هم میشوند. مثلا در MVC یک اینترفیس IController هست و بعد یک کلاس Abstract به نام Controller، که این اینترفیس را پیاده سازی کرده برای ورژن پذیری بعدی و کنترلرهای پروژههای عمومی MVC از این کلاس Abstract مشتق میشوند یا در پروژه RavenDB از کلاسهای Abstract زیاد استفاده شده، مانند AbstractIndexCreationTask و AbstractMultiMapIndexCreationTask و غیره.
نظرات مطالب
معماری لایه بندی نرم افزار #4
با تشکر از نویسنده مقاله و اهتمام ایشان به بررسی دقیق مفاهیم ،
از آنجا که flexible و reusable بودن برنامهها را نمیتوان نادیده گرفت تا آنجا که این تفکیک پذیری خود به مسئله ای بغرنج تبدیل نشده و تکرر دادهها و پاس دادن غیر ضرور آنها را موجب نشود تلاش در این باره مفید خواهد بود .
امروزه توسعه دهنده گان به سمت کم کردن لایههای فرسایشی و حذف پیچیدگیهای غیر ضرور قدم بر میدارند. خلق عبارات لامبادا در دات نت و delegate ها نمونه هایی از تلاش بشر برنامه نویس در این باره است .
از آنجا که flexible و reusable بودن برنامهها را نمیتوان نادیده گرفت تا آنجا که این تفکیک پذیری خود به مسئله ای بغرنج تبدیل نشده و تکرر دادهها و پاس دادن غیر ضرور آنها را موجب نشود تلاش در این باره مفید خواهد بود .
امروزه توسعه دهنده گان به سمت کم کردن لایههای فرسایشی و حذف پیچیدگیهای غیر ضرور قدم بر میدارند. خلق عبارات لامبادا در دات نت و delegate ها نمونه هایی از تلاش بشر برنامه نویس در این باره است .
نظرات مطالب
EF Code First #12
سلام
عالی مثل همیشه.
مهندس شما فرمودین:
الگوی مخزنی که ارائه داده در این مثال ساده کار میکنه اما اگر قرار باشه با چند موجودیت کار کرد و نتیجه رو ترکیب، کارآیی خوبی نداره چون خیلی از قابلیتهای ذاتی EF مثل کوئریهای به تاخیر افتاده (deferred LINQ queries) در اینجا قابل پیاده سازی نیست. اگر هم بخوان این رو اضافه کنن باید به لایه مخزن خروجی IQueryable اضافه کنن که به یک طراحی نشتی دار خواهند رسید چون انتهای کار با خروجی IQueryable کاملا باز باقی میماند (نمونهاش متد Get ایی است که طراحی کرده).
البته (البته چندین جای دیگه هم گفتین) در مورد نشتی حافظه، کاربرد IQueryable پس توی کدام لایه از کار ما میتونه باشه با توجه به انعظاف پذیری که به کار ما میده؟
عالی مثل همیشه.
مهندس شما فرمودین:
الگوی مخزنی که ارائه داده در این مثال ساده کار میکنه اما اگر قرار باشه با چند موجودیت کار کرد و نتیجه رو ترکیب، کارآیی خوبی نداره چون خیلی از قابلیتهای ذاتی EF مثل کوئریهای به تاخیر افتاده (deferred LINQ queries) در اینجا قابل پیاده سازی نیست. اگر هم بخوان این رو اضافه کنن باید به لایه مخزن خروجی IQueryable اضافه کنن که به یک طراحی نشتی دار خواهند رسید چون انتهای کار با خروجی IQueryable کاملا باز باقی میماند (نمونهاش متد Get ایی است که طراحی کرده).
البته (البته چندین جای دیگه هم گفتین) در مورد نشتی حافظه، کاربرد IQueryable پس توی کدام لایه از کار ما میتونه باشه با توجه به انعظاف پذیری که به کار ما میده؟
نظرات مطالب
معماری لایه بندی نرم افزار #2
دوست عزیزم. متد Apply یک Extension Method برای <IList<Product است. اگر این متد تعریف نمیشد شما باید در کلاس سرویس حلقه foreach رو قرار میدادید. البته با این حال در قسمت هایی از طراحی کلاسها که الگوهای طراحی را زیر سوال نمیبرد و تست پذیری را دچار مشکل نمیکند، طراحی سلیقه ای است. مقاله من هم آیهی نازل شده نیست که دستخوش تغییرات نشود. شما میتوانید با سلیقه و دید فنی خود تغییرات مورد نظر رو اعمال کنید. ولی اگر نظر من را بخواهید این طراحی مناسبتر است.
این تکنیک و مقاله، یکی از مطالب Must Read سال هست. به شخصه از این تکنیک در توسعهی کامپوننتهای ASP.NET MVC استفاده میکنم. کلاً تکنیک Fluent که برادر نصیری فعلاً در دو مقاله به اون پرداختند، انعطاف پذیری بسیاری به برنامهها میده. مثلاً شبیه سازی روال RowDataBound کنترل GridView در Web Forms، در بستر MVC با استفاده از یک Action.
به نظر من کمبودی که ASP.NET MVC در حال حاضر داره، داشتن مجموعه ای غنی از کامپوننتهای توکار هست که فکر میکنم در نسخههای آینده، مایکروسافت این نقیصه رو بر طرف میکنه، شاید با مشارکت شرکتهای دیگه مثل Telerik.
به نظر من کمبودی که ASP.NET MVC در حال حاضر داره، داشتن مجموعه ای غنی از کامپوننتهای توکار هست که فکر میکنم در نسخههای آینده، مایکروسافت این نقیصه رو بر طرف میکنه، شاید با مشارکت شرکتهای دیگه مثل Telerik.
جناب مهندس راد سلام
روشی که اینجا شما فرمودین نمونش قبلا حدود 4 سال پیش من دیدم که آقای کیوان نیری توی سایتشون اموزش داده بودن (روشی شبیه همین روش با انعطاف پذیری بالا) اما مشکلی که توی این روش برای وب وجود داره اناجام کارهایی هست که باید حتما انجام بشه مثل واریز سود بانکی، در صورتی که سرور ری استارت بشه اطلاعات جابهای ما از بین میره
که البته من خودم روش اقای نیری با دیتابیس ترکیب کردم و میشه گفت بدون اشکال چند سالی هست داره کار میکنه
اگر این روش که فرمودین راهی داره برای ری استارت شدن وب ممنون میشم شرح بدین
روشی که اینجا شما فرمودین نمونش قبلا حدود 4 سال پیش من دیدم که آقای کیوان نیری توی سایتشون اموزش داده بودن (روشی شبیه همین روش با انعطاف پذیری بالا) اما مشکلی که توی این روش برای وب وجود داره اناجام کارهایی هست که باید حتما انجام بشه مثل واریز سود بانکی، در صورتی که سرور ری استارت بشه اطلاعات جابهای ما از بین میره
که البته من خودم روش اقای نیری با دیتابیس ترکیب کردم و میشه گفت بدون اشکال چند سالی هست داره کار میکنه
اگر این روش که فرمودین راهی داره برای ری استارت شدن وب ممنون میشم شرح بدین
بعید میدونم. علتش به توسعه پذیری SharePoint بر میگرده که بر اساس معماری وب فرمها از ابتدا طراحی شده. اگر بروند سراغ MVC تمام افزونههای قبلی از کار میافته یا به شدت مشکل پیدا میکنند. ضمن اینکه SharePoint پلتفرم واقعا عظیمی است. خیلی هزینهبر است تبدیل آن.
برای مثال شاید همین سوال در مورد IE هم باشد. چرا IE رو با دات نت نمینویسند؟ علتش این است که بعد از این همه سال میلیونها دلار خرج code base آن شده. دور ریختن و دل کندن از آن واقعا سخت است.
برای مثال شاید همین سوال در مورد IE هم باشد. چرا IE رو با دات نت نمینویسند؟ علتش این است که بعد از این همه سال میلیونها دلار خرج code base آن شده. دور ریختن و دل کندن از آن واقعا سخت است.