تزریق وابستگیهای رایج ASP.NET MVC به برنامه
توصیه هایی در استفاده از NGEN
Url Routing در ASP.Net WebForms
معرفی برنامه jQueryPad
فقط مثل برنامه فوق نسخهی آفلاین ندارد.
ایجاد فایل جدید Directory.Packages.props
زمانیکه قرار است شماره نگارشهای بستههای NuGet مختلف مورد استفادهی در برنامه، به صورت مرکزی مدیریت شوند، نیاز به یک مخزن ثبت آنها نیز میباشد. به همین جهت یک فایل جدید را به نام Directory.Packages.props در کنار فایل sln پروژهی خود ایجاد کنید (در ریشهی اصلی پروژه)؛ با این محتوای فرضی:
<Project> <ItemGroup> <PackageVersion Include="Microsoft.Extensions.Localization.Abstractions" Version="3.1.8" /> <PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.8" /> </ItemGroup> </Project>
تغییرات مورد نیاز در فایلهای پروژههای موجود
در ادامه مجددا به تمام فایلهای csproj خود مراجعه کرده و ویژگی Version را از آنها حذف کنید؛ مانند:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Extensions.Localization.Abstractions" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" /> </ItemGroup> </Project>
error NU1008: Projects that use central package version management should not define the version on the PackageReference items
همچنین اگر دقت کرده باشید، ویژگی جدید ManagePackageVersionsCentrally نیز به این فایل پروژه و سایر فایلهای پروژه نیز باید اضافه شود. حالت پیشفرض آن false است.
یک نکته: میتوان ویژگی ManagePackageVersionsCentrally را نیز به صورت سراسری به فایل Directory.Packages.props اضافه کرد تا به صورت خودکار به تمام فایلهای csproj موجود، اعمال شود:
<Project> <PropertyGroup> <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> </PropertyGroup> <ItemGroup> <PackageVersion Include="Microsoft.Extensions.Localization.Abstractions" Version="3.1.8" /> <PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.8" /> </ItemGroup> </Project>
نحوهی افزودن بستههای جدید
قابلیتی که تا اینجا معرفی شد، در NET Core SDK 3.1.300. به بعد قابل دسترسی و استفادهاست (و پس از این تغییرات، برنامه بدون مشکل کامپایل میشود)؛ اما هنوز NET Core CLI. برای افزودن خودکار بستههای جدید NuGet به این سیستم، به روز رسانی نشدهاست. یعنی فعلا اگر خواستید بستهی جدیدی را اضافه کنید باید ابتدا به صورت دستی PackageVersion آنرا در فایل Directory.Packages.props ثبت کنید و سپس PackageReference بدون شمارهی نگارش را نیز به پروژهی مدنظر خود به صورت دستی اضافه کنید.
برای مطالعه بیشتر
مستندات رسمی آن
وضعیت پیاده سازی آن
برای به درست آوردن این اعتماد، یکی از بالاترین الویت ها، آینده نگری معماری نرم افزار و ساخت یک معماری داده است که باید هر دو قوی و به اندازه کافی ایمن باشد، این دو برای راضی کردن مستاجران و کلاینت هایی که علاقمند هستند کنترل دادههای حیاتی تجارت خود را به شخص سومی واگذار نمایند، موثر است در حالی که برای اداره کردن و نگهداری مقرون به صرفه است.
سه روش مدیریت چند مستاجری داده
- دیتابیسهای جداگانه برای هر مستاجر
- دیتابیس مشترک و schema جداگانه برای هر مستاجر
- دیتابیس مشترک و schema مشترک
انتخاب روش مناسب برای برنامه شما به عوامل زیر بستگی دارد :
- سایز دیتابیس هر مستاجر
- تعداد مستاجران
- تعداد کاربران هر مستاجر
- نرخ رشد مستاجر
- نرخ رشد دیتابیس مستاجر
- امنیت
- هزینه
1) دیتابیسهای جداگانه برای هر مستاجر :
ذخیره سازی دادههای مستاجران در دیتابیسهای جداگانه سادهترین روش است. در این روش هر مستاجر یک دیتابیس دارد. منابع و کدهای برنامه معمولا در سرور بین همه مستاجران مشترک است اما هر مستاجر مجموعه ای از داده دارد که بطور منطقی از سایر مستاجران جدا شده است.
مزایا :
- امنیت بیشتر
- سهولت سفارشی سازی برای هر مستاجر
- سهولت نگهداری ( Backup و Restore ) برای هر مستاجر
معایب:
- برای نگهداری سخت افزار قوی مورد نیاز است
- این روش هزینه بیشتری برای تجهیزات ( Backup و Restore ) برای هر مستاجر دارد
2) دیتابیس مشترک و schema جداگانه برای هر مستاجر :
خدمات دهی به چندین مستاجر در یک دیتابیس مشترک اما هر مستاجر یک مجموعه از جداول گروهبندی شده دارد که با Schema جدا شده است که برای هر مستاجر الزامی است.
مزایا :
- برای دیتابیس برنامههای کوچک مناسب است. وقتی تعداد جداول برای هر مشتری کم است
- هزینه کمتری نسبت به روش اول دارد
- برای مشتریانی که نگران امنیت هستند، سطح منطقی مناسبی برای جداسازی داده ه وجود دارد
معایب:
- اطلاعات مستاجران در صورت بروز خطا به سختی restore میشود
- مدیریت آن برای دیتابیسهای بزرگ مشکل است
3) دیتابیس مشترک و schema مشترک :
این روش شمامل یک دیتابیس و یک مجموعه از جداول برای چندین مستاجر است. دادههای جدول میتواند شامل رکوردهای هر مستاجر باشد
مزایا :
- در مقایسه با روش قبلی، کمترین هزینه سخت افزاری را دارد
- میتواند مستاجران بیشتری رادر هر سرور پشتیبانی کند
- قابلیت بروز رسانی آسان در یک جا برای همه مستاجران
- مدیریت آسان دیتابیس و خطا و Backup و Restore
- امنیت بیشتری مورد نیاز است تا مطمئن شوید هیچکس به اطلاعات سایر مستاجران دسترسی ندارد.
- میتواند روی کارایی کوئریها تاثیر بگذارد چون تعداد رکوردها زیاد است.
- بروزرسانی و سفارشی کردن فقط برای یک مستاجر سخت است
منابع :
http://msdn.microsoft.com/en-us/library/aa479086.aspx
http://www.codeproject.com/Articles/51334/Multi-Tenants-Database-Architecture
- برنامههای وب نیازی به نصب بر روی تک تک کلاینتها و همچنین به روز رسانی مداوم کلاینتها را ندارند. به این صورت مدیریت چند صد کاربر در یک سازمان سادهتر از قبل خواهد بود. دیگر نگران این نخواهید بود که آیا فلان کاربر آخرین به روز رسانیها را نصب کرده (دریافت کرده) یا خیر.
- امکان دسترسی از راه دور، برای مثال از طریق اینترنت یا VPN یا RRAS و خطوط دایال آپ (برای مثال دسترسی سادهتر دفاتر مختلف یک سازمان به اطلاعات یکدیگر یا امکان داشتن کارکنانی که از راه دور برای شما کار میکنند).
- امکان ذخیره سازی دادهها در سازمانی دیگر (هاست کردن این برنامهها در محیطهای ابری(!) (cloud computing) هزینههای تهیه و نگهداری سخت افزارهای یک سازمان را نیز کاهش میدهند).
- کاهش هزینههای سازمان با توجه به اینکه اگر از سرورهای قدرتمندی استفاده شود؛ از یک برنامهی وب چندین هزار یا چند میلیون کاربر میتوانند استفاده کنند بدون اینکه نگران تامین هزینه مجوز استفاده از برنامهی تهیه شده به ازای هر کاربر باشید.
- امکان دسترسی به برنامهی وب تهیه شده در انواع و اقسام سیستم عاملهایی که تنها مجهز به یک مرورگر وب هستند (نتیجه نهایی قابل استفاده مستقل از سکو است). برای مثال این روزها به کمک Adobe AIR ، Silverlight و یا کتابخانههای اسکریپتی مانند jQuery و ASP.Net Ajax، بسیاری از تواناییهای نمایشی برنامههای دسکتاپ را در وب نیز میتوان شاهد بود با این خصوصیت که نتیجهی نهایی مستقل از سکو است.
- در این حالت کلاینتها نیازی به داشتن سخت افزارهای قوی ندارند (که در کاهش هزینههای یک سازمان مؤثر است). همچنین این برنامهها مشکلات ناسازگاری با سخت افزارها و نگارشهای مختلف سیستم عاملها را نیز ندارند. بنابراین یک سازمان میتواند بودجهی خود را صرف تهیهی سرورهای بهتری کند.
- کلاینتها با توجه به محدود بودن دسترسیهای امنیتی اعمالی توسط مرورگرها، امنیت بیشتری خواهند داشت. به همین ترتیب کاربران برای استفاده از این برنامهها نیز نیازی به دسترسی بالا در یک سازمان برای اجرای مرورگر خود نخواهند داشت (کمتر جملهی "من دسترسی ادمین میخواهم" را خواهید شنید).
- امکان مونیتور کردن سادهتر فعالیت کاربران در برنامه.
- در صورت محافظت از سرور، کدهای شما از خطر دزدیده شدن مصون(تر) هستند.
- مدیریت سادهتر و مجتمع اطلاعات تولیدی با توجه به اینکه همه چیز باید بر روی سرور ذخیره شود. به این صورت مدیریت نقل مکان کاربران از یک کامپیوتر به کامپیوتری دیگر نیز سادهتر می شود؛ زیرا چیزی را قرار نیست جابجا کنند (نه اطلاعات و نه برنامه را). اگر یکی از کامپیوترهای کلاینتها قابل استفاده نباشد، به سادگی میتواند از کامپیوتری دیگر در شبکه استفاده کند، بدون اینکه معطل تیم فنی شود تا برنامهای را برای او نصب و راه اندازی کنند. به علاوه تهیه پشتیبان از اطلاعات سرورها نیز همیشه سادهتر است از تهیه پشتیبان از 100 ها کامپیوتر موجود در شبکه.
- اگر خروجی برنامهی وب شما تنها از صفحات وب و جاوا اسکریپت تشکیل شده باشد، امکان دسترسی آن در دستگاههای موبایل به سادگی میسر است.
https://github.com/MehdiSaeedifar/IrisStore
همچنین نمونهی آنلاین آنرا میتوانید در فروشگاه آیریس مشاهده کنید.
در ادامه برخی از قابلیتهای این سیستم را مشاهده میکنید:
جست و جو با قابلیت دسته بندی نتایج
به هنگام جست و جو، لیستی از موارد پیشنهادی به صورت دسته بندی شده نمایش داده میشود.
جست و جوی پیشرفته کالاها
جست و جو بر اساس قیمت، گروه، کلمات کلیدی و مرتب سازی نتایج انجام میگیرد. همچنین نتایج جست و جو بدون رفرش شدن صفحه و به صورت AJAX ای به همراه تغییر URL صفحه صورت میگیرد.
نمایش نمودار تغییرات قیمت
امکان نمایش نمودار تغییرات قیمت کالا در بازهی زمانی نیز پیش بینی شده است.
ویرایش اطلاعات به صورت inline
امکان ویرایش قیمت و تاریخ به صورت inline وجود دارد.
مدیریت تصاویر کالا
در این قسمت امکان آپلود همزمان چندین فایل به همراه پیش نمایش آنها وجود دارد. همچنین امکان کشیدن و رها کردن برای تغییر ترتیب چیدمان عکسها نیز مهیا است.( تصویر اول به عنوان کاور کالا در نظر گرفته میشود.)
قابلیتهای دیگر:
- مدیریت تصاویر اسلایدشو و تغییر ترتیب آنها از طریق کشیدن و رها کردن (drag & drop)
- تعریف برگه و تغییر ترتیب نمایش آنها از طریق کشیدن و رها کردن
- امکان ارسال پست
- تعریف دسته بندی
- مدیریت کاربران
- تعریف تنظیمات سایت
- نمایش کالا و پستهای مشابه
کارهایی که باید انجام شود:
- پیاده سازی سبد خرید و خرید آنلاین
تصویر پنل مدیریت
تصویر صفحهی اصلی:
همچنین به راحتی میتوان با طراحی قالب جدیدی، از این سیستم برای کاری غیر از فروشگاه اینترنتی استفاده کرد؛ سایتهای زیر نمونههای آنلاین دیگری از این سیستم هستند:
- http://www.petrapars.ir
- http://www.ava-tarh.ir
در نهایت فهرستی از کتاب خانهها و فناوریهای استفاده شده و همچنین مقالات مرتبط با این پروژه را قرار دادهام.
کتابخانهها و فریم ورکهای سمت سرور:
فناوری یا کتابخانه | توضیحات | مقالات مرتبط |
Bootstrap 3.x | فریم ورک پایه ای css سایت | - Bootstrap 3 RTL Theme - Twitter Bootstrap -سازگارسازی کلاسهای اعتبارسنجی Twitter Bootstrap 3 با فرمهای ASP.NET MVC -ساخت قالبهای نمایشی و ادیتور دکمه سه وضعیتی سازگار با Twitter bootstrap در ASP.NET MVC -نمایش اخطارها و پیامهای بوت استرپ به کمک TempData در ASP.NET MVC |
AdminLTE | قالب مدیریت سایت | - نسخه راستچین شده AdminLTE 2.2.1 |
Animate.css | انیمیشنهای css3 سایت | |
Font Awesome | پک آیکونهای برداری | |
Awesome Bootstrap Checkbox | زیبا سازی چک باکس ها | |
فونت فارسی وزیر | قلم فارسی | |
لطفا برای طرح سؤالات و پیشنهادات خود و جهت مدیریت بهتر آنها، از قسمت اختصاصی این پروژه در سایت استفاده نمائید.