مروری سریع بر تغییرات C# 6.0
سوالات مصاحبه ای در مورد #C و دات نت
زبان برنامه نویسی Spider
در این قسمت تلاش میکنم در خصوص محیط BIMS (Business Intelligence Management Studio) و همچنین AdventureWorksDW2008R2 توضیحاتی را ارائه کنم. در ابتدا در خصوص طراحی انجام شده در Data Warehouse مربوط به پایگاه دادهی Adventure Works 2008 توضیحاتی ارایه میگردد.
شاید بهترین کار در خصوص آشنایی با یک پایگاه داده نگاه کردن به دیاگرام کلی آن پایگاه داده باشد. بنابر این در ابتدا میبایست یک دیاگرام از پایگاه دادهی AdventureWorksDW2008R2 بسازیم (این کار را در SQL Server Management Studio انجام میدهیم) . قبل از ساخت دیاگرام میبایست کاربر Sa را به عنوان Owner پایگاه داده معرفی کنیم.
برای این منظور ابتدا Properties پایگاه دادهی AdventureWorksDW2008R2 را گرفته و به قسمت Files رفته و با انتخاب دکمهی ... در مقابل Owner و جستجوی کاربر Sa ، اقدام به مشخص کردن مالک پایگاه داده میکنیم. و سپس دکمهی Ok را میزنیم.
مطابق شکل زیر
سپس یک دیاگرام کلی از پایگاه داده تولید میکنیم. مانند شکل زیر
با یک نگاه اجمالی مشخص میگردد که نام تمامی جداول پایگاه دادهی DW یا با کلمهی Dim یا با کلمهی Fact شروع شدهاند.
همان طور که در مقالهی شمارهی یک نیز عنوان شد، چندین روش طراحی DW وجود دارد :
1. ستاره ای
2. دانه برفی
3. کهکشانی
دقت داشته باشید که جداول Fact دارای فیلدهای عددی نیز میباشد که توسط مراحل ETL پر شدهاند و جداول Dimension دارای ابعادی هستند که به شاخصهای موجود در یک جدول Fact معنا میدهند. به عبارت دیگر شاخص میزان فروش اینترنتی، یک Measure میباشد. اما با ارایه دو دایمنشن، به یک واکشی، عملا ما یک Measure داریم که بر اساس آن دو بعد، ماهیت پیدا کرده است. به عنوان مثال میزان فروش اینترنتی بر اساس سال و ماه و روز و براساس کشور خریدار مشخص میشود.
یکی از روشهای تهیهی DW این میباشد که کاربران خبره در هر سیستم، مشخص نمایند چه گزارشاتی مورد نظر آنها میباشد. سپس توسط تیم پشتیبانی آن سیستمها، جداول Fact,Dimension مورد نیاز برای حصول گزارش مربوطه تهیه گردد.
شاید ذکر این نکته جالب باشد که برای توسعهی یک پایگاه دادهی Multidimensional توسط Solution های ماکروسافت نیازی به آشنایی با یک محیط کار ( IDE ) جدید نمیباشد. همان طور هم که در مقالهی قبلی اشاره شد، برای Deploy کردن یک پایگاه دادهی چند بعدی ( Multidimensional ) از خود محیط Visual Studio .Net استفاده میشود. بنابر این آن دسته از برنامه نویسانی که با این محیط آشنا میباشند به راحتی میتوانند به توسعهی پایگاه دادهی چند بعدی بپردازند.
لازم به ذکر میباشد که اساسا هدف من از شروع این سری مقالات ، آموزش MDX Query ها میباشد و نه آموزش BIMS ، با این وجود در این قسمت و در قسمت بعدی، توضیحات مقدماتی کار با BIMS ارایه میگردد و همچنین در فرصت مناسب در خصوص BIMS یک مجموعه مقالهی جامع ارایه خواهم کرد.
در ابتدا اجزا BIMS را برای شما توضیح میدهم و سپس در خصوص ساخت هر کدام از آنها و ترتیب ساخت آنها توضیحاتی ارایه خواهم داد.
مسیر باز کردن برنامهی SQL Server Business Intelligence Development Studio = BIDS در زیر آمده است:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft SQL Server 2012\ SQL Server Data Tools
دقت داشته باشید که در صورت استفاده از نسخهی Sql Server 2008 میبایست مسیر زیر را جستجو نمایید:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft SQL Server 2008 R2
با نگاه کردن به محیط BIMS می توانید پنجرهی Solution Explorer را مشاهده کنید .(در صورت عدم مشاهده، میتوانید این پنجره را از منوی View باز کنید)
در پنجرهی Solution Explorer ابتدا نام Solution و در زیر آن، نام پروژه را خواهیم دید (نام پروژه و نام پایگاه دادهی چند بعدی، مشابه یکدیگر میباشند) و در زیر نام پروژه، موارد زیر را میبینیم:
1. Data Source
2. Data Source View
3. Cubes
4. Dimensiones
5. ….
Data Source : عملا برقرار کنندهی پروژه با Data Warehouse میباشد. دقت داشته باشید که امکان تهیه یک پایگاه دادهی چند بعدی از چندین DW وجود دارد و حتا نوع DW ها میتواند متفاوت باشد (به عبارت دیگر ما میتوانیم چندین DW در RDBMS های متفاوت داشته باشیم و همهی آنها را در یک Multidimensional Database تجمیع کنیم). برای انجام چنین کاری باید چندین Data Source تعریف کنیم.
Data Source View : هر Data Source میتواند دارای چندین تقسیم بندی با مفاهیم Business ی باشد. برای هر کدام از این دسته بندیها میتوانیم یک یا چند Data Source View ایجاد کنیم . به عبارت دیگر ایجاد Data Source View ها سبب خلاصه شدن تعداد جداول Fact , Dimension براساس یک بیزینس خاص میباشد و در ادامه راحتتر میتوانیم Cube ها را تولید کنیم.
نکته: جداول Fact , Dimension در ساختار D ata Warehouse ساخته میشوند.
Cubes : محل تعریف Cube ها در این قسمت میباشد. در سری آموزش SSAS در خصوص نحوهی ساخت Cube ها شرح کاملی ارایه خواهم کرد.
Dimensions : با توجه به این که در روال ساخت Cube ما مشخص میکنیم چه Dimension هایی داریم، یک سری از Dimension ها به صورت پیش فرض در این قسمت قرار میگیرند و البته در صورت تغییر در Data Source View میتوانیم یک Dimension را به صورت دستی در این قسمت ایجاد نماییم و سپس آن را به Cube مورد نظر اضافه نماییم.
دقت داشته باشید که برای ساخت یک پروژه میبایست بعد از ساخت Data Warehouse در برنامهی BIMS اقدام به ساخت یک Data Source کنیم و سپس با توجه به Businessهای موجود در سیستمهای OLTP اقدام به ساخت Data Source Viewهای مناسب کرده و در نهایت اقدام به ساخت Cube کنیم. بعد از انجام تنظیمات مختلف در Cube مانند ساخت Hierarchy , KPI و ... نیاز میباشد که پروژه را Deploy کنیم تا پایگاه دادهی چند بعدی (MDB) ساخته شود.
در قسمت بعدی نحوهی ساخت یک پروژه در SSAS و چگونگی باز کردن یک پایگاه داده را بررسی خواهیم کرد.
Build Events
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\editbin.exe
"C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /STACK:1000000 "$(TargetPath)"
You can start this tool only from the Visual Studio command prompt. You cannot start it from a system command prompt or from Windows Explorer.
call "$(DevEnvDir)..\Tools\vsvars32.bat"
C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat
call "$(DevEnvDir)..\Tools\vsvars32.bat" "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\editbin.exe" /STACK:1000000 "$(TargetPath)"
call "$(DevEnvDir)..\Tools\vsvars32.bat" "editbin.exe" /STACK:1000000 "$(TargetPath)"
کار با IDE و حرکت بین کدها
در ادامه، همان پروژهای را که در قسمت قبل ایجاد کردیم، مجددا با وارد شدن به پوشهی آن و اجرای دستور . code، توسط VSCode باز خواهیم کرد. سپس فایل Program.cs آنرا باز کنید. فرض کنید در سطر ذیل آن:
.UseStartup<Startup>()
الف) اشارهگر ماوس را به آن نزدیک کنید و سپس دکمهی Ctrl را نگه دارید. به این ترتیب واژهی Startup تبدیل به یک لینک خواهد شد که با کلیک بر روی آن میتوان به کلاس Startup رسید.
ب) روش دوم، قرار دادن اشارهگر متنی بر روی واژه Startup و سپس فشردن دکمهی F12 است. این گزینه بر روی منوی کلیک راست بر روی این واژه نیز وجود دارد.
اگر دکمهی F12 را بر روی کلاسی فشار دهید که کدهای آن در IDE وجود ندارند، یک صفحهی جدید باز شده و کلاس تعریف آنرا بر اساس ساختار و متادیتای این اسمبلی، به همراه مستندات کامل آنها نمایش میدهد.
در این حالت اگر خواستید به مکان قبلی بازگردید فقط کافی است دکمههای alt + left cursor key را بفشارید.
در اینجا امکان یافتن ارجاعات به یک کلاس، مشاهدهی پیاده سازیها و همچنین یک Refactoring به نام rename symbol نیز موجود است که با استفادهی از آن، تمام ارجاعات به این کلاس در IDE نیز تغییرنام خواهند یافت.
یافتن سریع فایلها در IDE
در یک پروژهی بزرگ، برای یافتن سریع یک فایل، تنها کافی است دکمههای Ctrl+P را فشرده و در صفحهی دیالوگ باز شده، قسمتی از نام آنرا جستجو کنید:
همچنین اگر میخواهید محتوای فایلها را جهت یافتن واژهای خاص جستجو کنید، کلیدهای Ctrl+Shift+F (منوی Edit بالای صفحه و یا دومین آیکن در نوار ابزار عمودی سمت چپ صفحه) چنین امکانی را فراهم میکنند:
افزودن فایلهای جدید به پروژه
فرض کنید میخواهیم یک کنترلر جدید را به پوشهی Controllers اضافه کنیم:
برای اینکار ابتدا پوشهی Controllers را انتخاب کنید. در همین حال، نوار ابزاری ظاهر میشود که توسط آن میتوان در این پوشه، یک فایل جدید و یا یک پوشهی جدید را ایجاد کرد.
اگر علاقمند به ایجاد فایل یا پوشهای در ریشهی پروژه باشید، باید تمام فایلها و پوشههای موجود، در حالت انتخاب نشده قرار بگیرند. به همین جهت فقط کافی است در یک مکان خالی، در لیست فایلها کلیک کنید تا فایلها و پوشهها از حالت انتخاب شده خارج شوند. اکنون نوار ابزار ظاهر شدهی افزودن فایلها، به پوشهی ریشهی پروژه اشاره میکند.
در ادامه فایل جدید AboutController.cs را در پوشهی Controllers ایجاد کنید. مشاهده خواهید کرد که یک فایل کاملا خالی ایجاد شدهاست. در VSCode به ازای پسوندهای مختلف فایلها، قالبهای از پیش آماده شدهای برای آنها درنظر گرفته نمیشود و نمای ابتدایی تمام آنها خالی است.
اما در اینجا اگر کلمهی name را تایپ کنیم، دو پیشنهاد افزودن فضای نام را ارائه میدهد:
اولی صرفا نام namespace را در صفحه درج خواهد کرد. دومی به یک code snippet اشاره میکند و کار آن ایجاد قالب یک فضای نام جدید است. برای درج آن فقط کافی است دکمهی tab را بفشارید.
همین کار را در مورد class نیز میتوان تکرار کرد و در اینجا در intellisense ظاهر شده یا میتوان واژهی class را درج کرد و یا code snippet آنرا انتخاب نمود که یک کلاس جدید را ایجاد میکند:
یک نکته: در VSCode نیازی نیست تا مدام دکمههای Ctrl+S را جهت ذخیره سازی فایلهای تغییر کرده فشرد. میتوان از منوی فایل، گزینهی Auto Save را انتخاب کرد تا اینکار را به صورت خودکار انجام دهد.
ایجاد Code Snippets جدید
هرچند تا اینجا با استفاده از code snippets پیش فرض فضاهای نام و کلاسها، یک کلاس جدید را ایجاد کردیم، اما روش سادهتری نیز برای انجام اینکارها و تکمیل کنترلر وجود دارد.
برای این منظور به منوی File -> Preferences -> User snippets مراجعه کنید و سپس از لیست ظاهر شده، زبان #C را انتخاب کنید:
به این ترتیب یک قالب جدید code snippet تولید خواهد شد. در اینجا میخواهیم برای تولید Actionهای یک کنترلر نیز یک code snippet جدید را تهیه کنیم:
{ "MVC Action": { "prefix": "mvcAction", "body": [ "public IActionResult ${1:ActionName}()", "{", " $0 ", " return View();", "}" ], "description": "Creates a simple MVC action method." } }
- در این آرایه، 0$ جائی است که اشارهگر متنی پس از درج snippet قرار میگیرد و 1$ به نامی که قرار است توسط کاربر تکمیل شود، اشاره میکند که در اینجا یک نام پیش فرض مانند ActionName را هم میتوان برای آن درنظر گرفت.
- در اینجا prefix نامی است که اگر در صفحه تایپ شود، منوی انتخاب این code snippet را ظاهر میکند:
استفاده از بستههای Code Snippets آماده
خوشبختانه پشتیبانی جامعهی توسعه دهندگان از VSCode بسیار مطلوب است و علاوه بر افزونههای قابل توجهی که برای آن نوشته شدهاند، بستههای Code Snippets آمادهای نیز جهت بالابردن سرعت کار با آن وجود دارند. برای دریافت آنها، به نوار ابزار عمودی که در سمت چپ صفحه وجود دارد، مراجعه کنید و گزینهی extensions آنرا انتخاب نمائید:
در اینجا اگر aspnetcore را جستجو کنید، لیست بستههای code snippets برچسب گذاری شدهی با aspnetcore ظاهر میشود. در همینجا اگر یکی از آنها را انتخاب کنید، در سمت راست صفحه میتوانید توضیحات آن را نیز مشاهده و مطالعه نمائید (بدون نیاز به خروج از IDE).
برای مثال wilderminds-aspnetcore-snippets را نصب کنید. پس از آن تنها کافی است mvc6 را درون یک کلاس کنترلر تایپ نمائید تا امکانات آن ظاهر شوند:
برای نمونه پس از ایجاد یک فایل خالی کنترلر، انتخاب code snippet ایی به نام mvc6-controller، سبب ایجاد یک کنترلر کامل به همراه اکشن متدهایی پیش فرض میشود. بنابراین معادل قالبهای new items در نگارش کامل ویژوال استودیو در اینجا میتوان از Code Snippets استفاده کرد.
درکل برای یافتن مواردی مشابه، بهتر است واژهی کلیدی snippets را در قسمت extensions جستجو نمائید و آنها صرفا مختص به #C یا ASP.NET Core نیستند.
مدیریت ارجاعات و بستههای نیوگت در برنامههای ASP.NET Core
تا اینجا مدیریت فایلها و نحوهی تکمیل آنها را توسط code snippets، بررسی کردیم. قدم بعدی و گردش کاری مهم مورد نیاز دیگر، نحوهی افزودن ارجاعات به پروژه در VSCode است.
مدیریت ارجاعات در نگارشهای جدید ASP.NET Core، در فایل csproj برنامه انجام میشوند. در اینجا است که بستههای نیوگت جدید، ارجاعات به پروژههای دیگر و حتی شماره فریم ورک مورد استفاده تعیین میشوند.
برای نمونه بستهی نیوگت DNTPersianUtils.Core را به لیست ارجاعات آن اضافه کنید:
<PackageReference Include="DNTPersianUtils.Core" Version="2.2.0" />
در اینجا با کلیک بر روی لینک و یا دکمهی restore ، کار دریافت این بسته و نصب آن انجام خواهد شد.
اگر علاقمند بودید تا اینکار را در خط فرمان به صورت دستی انجام دهید، دکمههای Ctrl+ back-tick را فشرده، تا امکانات خط فرمان درون VSCode ظاهر شوند و سپس دستور dotnet restore را صادر کنید.
روش دوم ثبت بستههای نیوگت در فایل csproj، مراجعه به خط فرمان (فشردن دکمههای دکمههای Ctrl+ back-tick) و صدور دستور ذیل است:
> dotnet add package DNTPersianUtils.Core
دیباگ برنامههای ASP.NET Core در VSCode
در قسمت قبل با فرامین dotnet run و dotnet build و همچنین نحوهی اجرای سریع آنها آشنا شدیم. در ادامه اگر به نوار ابزار عمودی کنار صفحهی آن دقت کنید، گزینهی دیباگ نیز وجود دارد:
در اینجا دو نوع نحوهی برپایی و اجرای برنامه را مشاهده میکنید که هر دو مورد در فایل vscode\launch.json. زمانیکه دیباگ پروژه را در ابتدای باز کردن آن در VSCode فعال میکنیم، تعریف شدهاند.
برای بررسی آن فایل HomeController.cs را گشوده و در ابتدای متد About آن یک break point را قرار دهید (با حرکت دادن اشارهگر ماوس، جائیکه شماره سطرها قرار دارند، علامت درج break point ظاهر میشود که با کلیک بعدی، دائمی خواهد شد و برعکس):
پس از آن تنها کاری که باید انجام داد، فشردن دکمهی F5 است که به معنای اجرای برنامه به همراه اتصال دیباگر به آن میباشد (در قسمت قبل، Ctrl+F5 را بررسی کردیم که به معنای اجرای برنامه، بدون اتصال دیباگر به آن است).
در ادامه پس از اجرای برنامه، بر روی لینک About کلیک کنید تا اکشن متد آن اجرا شود. بلافاصله کنترل کار به VSCode بازگشته و سطری که بر روی آن break-point قرار داده بودیم، ظاهر میشود:
اطلاعات بیشتر آن در برگهی دیباگ ظاهر میشوند و در کل تجربهی کاربری آن همانند سایر IDEهایی است که تاکنون با آنها کار کردهاید.
یک نکته: در اینجا در داخل فایلهای View (فایلهای razor) نیز میتوان break point قرار داد.
برپایی یک Watcher Build
ابزار ویژهای به همراه ابزارهای Build مخصوص پروژههای NET Core. وجود دارد به نام watcher که تغییرات پوشههای برنامه را تحت نظر قرار داده و با هر تغییری، پروژه را کامپایل میکند. به این ترتیب به سرعت میتوان آخرین تغییرات برنامه را در مرورگر بررسی کرد. برای نصب آن، تنظیم ذیل را به فایل csproj برنامه اضافه کنید:
<ItemGroup> <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0" /> </ItemGroup>
اکنون برای استفادهی از آن تنها کافی است دستور ذیل را صادر کنید:
>dotnet watch run ?[90mwatch : ?[39mStarted Hosting environment: Production Content root path: D:\vs-code-examples\FirstAspNetCoreProject Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down.
یک نکته: اینبار برای دیباگ برنامه، باید گزینهی attach را انتخاب کرد:
اگر بر روی دکمهی سبز رنگ کنار آن کلیک کنید، لیست پروسههای دات نتی ظاهر شده و در این حالت میتوانید دیباگر را به پروسهی dotnet exec ایی که به dll برنامه اشاره میکند، متصل کنید (و نه پروسهی dotnet watch run که در حقیقت پروسهی dotnet exec را مدیریت میکند).