آشنایی با Refactoring
یافتن لیست اسمبلیهای ارجاعی
نیازی نبود سورسی را Map کنید یا اصلا نباید اینکار را میکردید. (اگر منظور مپ کردن سورس بوده نه فایل اجرایی برنامه)
SVN وظیفه مدیریت و به اشتراک گذاشتن پروژه رو داره، نه شبکه ویندوزی یا لینوکسی. (حتما از visual svn server استفاده کنید تا این موارد را برای شما ساده کند)
کلاینتها هر کدام نسخهی کامل و لوکال خودشون رو باید داشته باشند (از طریق check out مخزن کد این پروژه لوکال باید تشکیل شود نه کپی دستی). سپس مثل اینکه دارند لوکال کار میکنند (نه از روی شبکه در حالت مپ شده). کاملا حالت معمولی و قطع از شبکه. SVN برای مدیریت پروژه روی اینترنت هم بکار میره. نه چیزی map میشه و نه لازم هست کاربر همیشه به شبکه وصل باشه.
نسخه کد شما که روی سرور هست و توسط SVN نگهداری میشود، مخزن اصلی است که تغییرات با آن هماهنگ میشود. برای انتقال کد به مخزن، باید عملیات check in صورت گیرد.
بعد هر کدام از اعضای تیم زمانیکه check out میکنند ، یک نسخهی محلی دریافت میکنند و این فولدر تحت کنترل SVN قرار میگیره، حالا مباحث update و commit و غیره کار میکند. فقط هر بار که میخواهند commit کنند باید اول update کنند ببینند کسی چیزی را تغییر داده، تصادمی هست یا نه؟ بعد commit کنند به سرور. (یعنی ارتباط با شبکه فقط در همین چند لحظه کوتاه است و بسیار سریع هم خواهد بود)
فصل دوم کتابچهای را که من تهیه کردم لطفا مطالعه کنید، گردش کاری آن توضیح داده شده است.
https://www.dntips.ir/2008/10/subversion.html
در فصل یک هم توضیح دادم که چه پورتی را باید روی سرور باز کنید تا SVN توسط فایروال بلاک نشود.
حتما توصیه میکنم اگر با VS.Net کار میکنید افزونه Visual SVN را نصب کنید تا راحت و بدون دردسر کار کنید .
خطایی رو که توضیح دادید مربوط هست به اشتراک گذاشتن فایل اجرایی یک برنامه دات نتی روی شبکه که این خطا رو میگیرید:
Project Location Is not Trusted
این خطا رو با دادن full trust به برنامه میتونید حل کنید که اینجا قدم به قدم توضیح داده شده:
http://msdn.microsoft.com/en-us/library/bs2bkwxc(VS.80).aspx
همچنین کامنتهای اون رو لطفا بخونید. مثلا ممکن هست فایل بلاک شده باشه که با کلیک راست و unblock کردن مشکل حل میشه.
خطای زیر بیشتر مربوط به حالتی است که الف) هنوز مخزن کد ایجاد نشده و ب) عملیات initial import یا check in صورت نگرفته
Unable to open an ra_local url. unable to open repository.
حتما کتابچه فوق را مطالعه نمایید.
نکته:
برای ایجاد یک پروژهی جدید مایکروسافت Web Application را به شما پیشنهاد میدهد. هرچند در این مبحث، مطالبی را مبنی بر فواید Web Site معرفی خواهد کرد، ولی اکثر توسعه دهندگان وب که Web Site را برگزیده اند سرانجام مضراتی از آن را مییابند که سنگینی آن بیشتر از فوایدش است. برای مثال تمامی خصیصههای (feature فیچر) ASP.net لزومآ برای وب سایت در دسترس نخواهند بود؛ مثلآ از ویژوال استودیوی 2012 به بعد، ابزاری برای تولید پروژههای وب وجود دارد که فقط برای Web Application در اختیار خواهد بود (برای کسب اطلاعات بیشتر میتوانید مطلب Creating an ASP.net Web Project in Visual Studio را مطالعه نمایید).
سناریو :
سناریویی که مبنی برا انتخاب Web Application میباشد به شرح زیر است:
· شما نیاز به استفاده از Edit And Continue در دیباگر ویژوال استودیو دارید.
· تمامی کدها، فایلها و کلاسهایی که با صفحات ASP.net مرتبط هستند، برای تست بصورت واحد و یکپارچه در نظر گرفته میشوند.
· شما برای کلاسهایی که وابسته به صفحات هستند و همچنین برای کنترلها و کلاسهای منحصر آن باید ارجاع داشته باشید.
· وابستگی در حالتی که چندین پروژهی مرتبط به هم را دارید توسط شما مشخص میشود.
· برای کل سایت در هنگام کامپایل فقط یک اسمبلی ساخته میشود.
· کنترل نام اسمبلیها و همچنین شمارهی ورژن ایجاد شدهی برای پروژه در دست شماست.
· برای کامپایل پروژه میتوانید MSBuild و یا Team Build را انتخاب کنید؛ برای مثال میتوانید مراحل Prebuild یا Postbuild را مشخص کنید.
· نیازی به قرار دادن سورس برنامه روی سرور نیست.
سناریویی که مبنی برا انتخاب Web Site میباشد به شرح زیر است:
· یک پروژه در بر دارندهی کدهای #C و هم کدهای Visual Basic میباشد ( درحالیکه بصورت پیشفرض در Web Application فایل پروژه بر مبنای زبان برنامهی شما کامپایل میشود، هرچند میتوان این حالت پیشفرض را تغییر داد؛ ولی این امر میتواند اندکی مشکل باشد).
· شما میتوانید سایت ایجاد شده را بصورت Real Time توسط FTP باز نموده و آپدیت نمایید.
· برای توزیع (deploy) پروژه مجبور به کامپایل صریح آن نیستید.
· اگر پروژه را کامپایل نمایید کامپایلر به ازای هر صفحه و یا هر پوشه، یک فایل اسمبلی جداگانه خواهد ساخت.
· برای تغییر یک فایل به تنهایی میتوانید فقط آنرا تغییر داده و بر روی سرور قرار دهید.
· حتی بعد از کامپایل هم میتوانید صفحات ASP.net را بدون نیاز به کامپایل دوبارهی کل سایت تغییر داده و جایگزین نمایید.
· سورس کامل پروژه برای اجرا باید روی سرور قرار گیرد.
تفاوتها در یک نگاه:
زمینه | پروژههای Web Application | پروژههای Web Site |
ساختار فایل پروژه | فایل برنامه (.csproj / vbproj) دربردارنده اطلاعاتی از جمله لیست فایلها و رفرنسها پروژه به پروژه دیگر خواهد بود. | هیچ فایل برنامه ای وجود ندارد و تمامی فایل هایی که داخل پوشه میباشند جزو فایلهای سایت شناخته میشوند. |
کامپایل | · شما پروژه را در سیستم خود کامپایل میکنید. · بصورت پیشفرض کامپایل کدها در یک اسمبلی قرار میگیرد. |
· سورس کدها بصورت اتوماتیک در سرور توسط Asp.net با اولین درخواست کامپایل میشوند. (البته شما میتوانید کامپایل را در سیستم خود نیز انجام دهید) · بصورت پیشفرض کامپایل برای هر کلاس یک اسمبلی جدا میسازد. |
فضاهای نام | Namespaceها بصورت صریح در صفحات و کلاسها و کنترلها افزوده میشود. | هیچ namespace ای بصورت پیشفرض اضافه نمیشود (شما میتوانید بصورت دستی آنها را اضافه کنید) |
توزیع | اسمبلی تولید شده در مرحله کامپایل را روی سرور قرار میدهید اکثر مراحل کامپایل توسط ابزارهای ارائه شده ویژوال استودیو انجام میشود. | کل سورس پروژه روی سرور قرار میگیرد. اکثر مراحل کامپایل توسط ابزارهای ارائه شده ویژوال استودیو انجام میشود. |
ساختار فایل پروژه:
پروژههای Web Application از فایل پروژه ویژوال استودیو ( .csproj / .vbproj ) برای نگهداری اطلاعات پروژه استفاده میکنند. با این امکان میتوان فایلهایی را که در پروژه دخیل هستند و یا باید کامپایل شوند، به تفکیک مشخص کرد.
در مورد Web Site تمامی فایلهایی که در داخل پوشهی برنامه قرار دارند، به صورت پیش فرض جزیی از برنامه تلقی شده و کامپایل خواهند شد و برای اینکه فایلی را بخواهید مستثنا کنید یا باید آنرا حذف کنید و یا پسوند آنرا به نامی که توسط سرور IIS قابل شناسایی نیست تغییر دهید.
فایدهی فایل پروژه یعنی همان ( .csproj / .vbproj ) در Web Application :
میتوان فایلی را به طور موقت از برنامه حذف کرد، بدون نگرانی از آنکه فایل بصورت کلی حذف شود. چرا که فایل در ساختار برنامه باقیست. برای مثال اگر صفحهای برای توزیع آماده نیست، میتوانید به راحتی آنرا از برنامه خارج کنید ( Exclude ) و برنامه را کامپایل نمایید و بعد از اینکه این صفحه هم آماده شد، دوباره آن را وارد پروژه نمایید ( include ) که اهمیت این امر در مواردی که از برنامههای کنترل سورس استفاده میکنید، دوچندان میشود.
فایدهی عدم استفاده از فایل پروژهی برنامه در Web Site :
شما مجبور به کنترل و شخصی سازی ساختار فایل برنامه در ویژوال استودیو نیستید و به راحتی هر فایل یا صفحهای را که میخواهید، با کپی کردن به پوشه و یا حذف کردن از آن توسط فایل اکسپلورر انجام میدهید.
کامپایل:
برای برنامههای Web Application شما بصورت معمول پروژه را Build مینمایید و تمامی کدهای صفحات و همچنین کلاسها به صورت یک فایل اسمبلی در پوشهی bin ذخیره میگردد.
برای Web Site شما مجبور به کامپایل دستی پروژه نیستید و میتوانید از Batch-Compile استفاده کنید و همچنین به ازای هر صفحه و کلاسریال شما یک فایل اسمبلی خواهید داشت.
مزایای کامپایل در Web Application :
· میتوانید از MSBuild استفاده کنید.
· میتوانید خصیصههای اسمبلی، از جمله نام و ورژن را به راحتی مدیریت نمایید.
· کامپایل قبل از توزیع برنامه این مزیت را دارد که کاربران مجبور نیستند منتظر کامپایل برنامه در سرور باشند.
· مدیریت دقیقی بر روی فایلها و ساختار برنامه و همچنین کلاسها و ارجاعات خواهید داشت.
مزایای کامپایل در Web Site :
· میتوانید هر صفحهای را که نیاز دارید بدون در نظر گرفتن آماده شدن دیگر صفحات تست و اجرا نمایید.
· آپدیت و جایگزینی فایلها به راحتی صورت میگیرد؛ چرا که اسمبلی تمام فایلها بصورت منحصر همان صفحه ایجاد خواهد شد.
· ایجاد شدن چند اسمبلی میتواند در برخی پروژهها به نفع برنامه بوده و performance را بالا ببرد. برای مثال در حالتیکه یک سایت با صفحات زیاد دارید و برخی صفحات به نسبت دیگر صفحات خیلی کمتر درخواست میشوند.
نکته:
هیچ فرقی بین Web Application , و web Site از نظر performance وجود ندارد مگر درحالت ذکر شده در بالا و در سایتهای خیلی بزرگ.
توزیع : ( Deployment )
در web Site کل فایلهای پروژه را بر روی سرور قرار میدهید؛ درحالی که در Web Application فایلهای برنامه بصورت اسمبلیها ( .dll ) روی سرور قرار میگیرند. همین امر میتواند در برخی حالتها مثلآ زمانی که از هاست share شده استفاده میکنید، خیال شما را از بابت سورس برنامه مطمئن سازد.
برای Web Site نیز این مزیت وجود دارد که برای انجام تغییرات کوچک مجبور به کامپایل و آپلود دوبارهی کل پروژه نیستید.
ماخذ
EF Code First #2
ضمن اینکه تا این سری 15 قسمتی که به عمد با برنامه کنسول جلو رفته رو تموم نکنید، درک صحیحی از اجزای مختلف آن پیدا نخواهید کرد.
هر زمانی هم خواستید مطلبی را در این سطح آموزش دهید با برنامهی کنسول کار کنید چون هدف در اینجا نحوه نمایش آن با سیلورلایت یا asp.net یا winforms و غیره نیست. هدف آشنایی با زیرساختهای اصلی یک فناوری است؛ صرفنظر از نحوه نمایش آن به کاربر.
چگونه باید کلاسها را به بانک اطلاعاتی نگاشت کرد. چگونه باید پس از تغییر کلاسها، بانک اطلاعاتی را با برنامه هماهنگ کرد. چطور باید حالتهای یک به چند و امثال آنرا تعریف کرد. چطور باید یک Context را صحیح مدیریت کرد و غیره. هدف این سری، این نوع مباحث پایهای بوده نه فناوری نمایش نهایی آن.
پروژههای کوچک عموما دارای ساختاری مشابه تصویر ذیل میباشند:
این مورد، روش پیشنهادی در Angular Seed است و بدین صورت است که تعاریف ماژولها در فایل app.js انجام میگیرد. تعاریف و پیاده سازی تمام کنترلرها در فایل controller.js است. و همچنین دایرکتیوها و فیلترها و سرویسها هر کدام در فایلها جداگانه تعریف و پیاده سازی میشوند. این روش راه حلی سریع برای پروژههای کوچک با تعداد developerهای کم است. برای مثال زمانی که یک developer در حال ویرایش فایل controller.js است، از آن جا که فایل مورد نظر checkout خواهد شد در نتیجه سایر developerها امکان تغییر در فایل مورد نظر را نخواهند داشت. سورس فایلها به مرور زیاد خواهد شد و در نتیجه debug آن سخت میشود.
روش دوم
در این حالت تعاریف کنترلر ها، مدلها و سرویسها هرکدام در یک دایرکتوری مجزا قرار خواهد گرفت. برای هر view یک کنترلر و بنا بر نیاز مدل تعریف میکنیم. ساختار آن به صورت زیر میشود:
دایرکتیوها و فیلترها عموما در یک فایل قرار داده خواهند شد تا بنابر نیاز در جای مناسب رفرنس داده شوند. این روش ساختار مناسبتری نسبه به روش قبلی دارد اما دارای معایبی هم چون موارد زیر است:
»وابستگی بین فایلها مشخص نیست در نتیجه بدون استفاده از کتابخانه هایی نظیر requireJs با مشکل مواجه خواهید شد.
»refactoring کدها تا حدودی سخت است.
روش سوم
این ساختار مناسب برای پیاده سازی پروژهها به صورت ماژولار است و برای پروژههای بزرگ نیز بسیار مناسب است. در این حالت شما فایلهای مربوط به هر ماژول را در دایرکتوری خاص آن قرار خواهید داد. به صورت زیر:
همان طور که ملاحظه میکنید سرویس ها، کنترلرها و حتی مدلهای مربوط به هر بخش در یک مسیر جداگانه قرار میگیرند. علاوه بر آن فایل هایی که قابلیت اشتراکی دارند در مسیری به نام common وجود دارند تا بتوان در جای مناسب برای استفاده از آنها رفرنس داده شود. حتی اگر در پروژه خود فقط یک ماژول دارید باز سعی کنید از این روش برای مدیریت فایلهای خود استفاده نمایید. اگر با ngStart آشنایی داشته باشید به احتمال زیاد با این روش بیگانه نیستید.
بررسی چند نکته درباره کدهای مشترک
»اگر ماژولها وابستگی شدیدی به فایلها و سورسهای مشترک دارند باید اطمینان حاصل نمایید که این ماژولها فقط به اطلاعات مورد نیاز دسترسی دارند. این اصل interface segregation principle اصول SOLID است.
»توابعی که کاربرد زیادی دارند و اصطلاحا به عنوان Utility شناخته میشوند باید به rootScope$ اضافه شوند تا scopeهای وابسته نیز به آنها دسترسی داشته باشند. این مورد به ویژه باعث کاهش تکرار وابستگیهای مربوط به هر کنترلر میشود.
»برای جداسازی وابستگیهای بین دو component بهتر از eventها استفاده نمایید. AngularJs این امکان را با استفاده از سرویسهای on$ و emit$ و broadcast$ به راحتی میسر کرده است.
OData چهار قسمت اصلی دارد:
- OData data model که یک راه عمومی برای مدیریت و توصیف دادهها را فراهم مینماید
- OData protocol که به کلاینت اجازه ایجاد درخواست و پاسخ از سرویس دهنده OData را میدهد.
- OData client libraries که امکان ساخت سادهتر نرم افزارها برای دسترسی به دادهها با قرارداد OData را میدهد.
- OData service سرویس دهنده و امکان دسترسی به دادهها را فراهم میسازد.
- ساده و انعطاف پذیر
- سورس باز بودن
- امکان استفاده در سیستمهای با دادههای رابطه ای و غیر رابطه ای
- امکان استفاده از دادهها با منابع ای که آدرس پذیر هستند یعنی دسترسی از طریق Url
- امکان دسترسی هر نوع گیرنده ای به داده ها
- امکان نمایش خروجی با فرمت Json یا Xml
- ...
خواندنیهای 2 مرداد
اس کیوال سرور
الگوهای طراحی برنامه نویسی شیءگرا
امنیت
توسعه وب
دات نت فریم ورک
دبلیو اف
سی و مشتقات
کتابهای رایگان
لینوکس
متفرقه
محیطهای مجتمع توسعه
مسایل انسانی، اجتماعی و مدیریتی برنامه نویسی
ویندوز