تبلیغات در ترفندستان
بازیابی اطلاعات هارد


خرید هاست پربازدید

+ ارسال تاپیک جدید
نمایش نتایج: از 1 به 1 از 1

موضوع: Linq : تحولی بزرگ در کار با داده

  1. #1
    تاریخ عضویت
    Jul 2007
    محل سکونت
    الیگودرز شهر عشق
    پست‌ها
    327
    HTC-Touch-Pro2
    NOD32 Firefox Windows-XP Irancell
    سپاس (اهدایی)
    163
    سپاس (دریافتی)
    498

    پیش فرض Linq : تحولی بزرگ در کار با داده

    LINQ : تحولی بزرگ در کار با داده ( بخش اول )

    نرم افزار یکی از ارکان مهم فناوری اطلاعات و ارتباطات در عصر حاضر است . گرچه نرم افزار در گذشته نيز همواره حائز اهمیت بوده است ، ولی در ساليان اخير به دليل گسترش اينترنت و ظهور نسل جديدی از برنامه های کامپيوتری موسوم به برنامه های وب ، نگاه به نرم افزار و انتظار از آن در جهت تامين طيف گسترده ای از خواسته ها تغيير و رشد چشمگيری يافته است . به همين دليل است که در دنيای نرم افزار هر روز تحولات مهمی اتفاق می افتد و فناوری های جديدی قدم در اين عرصه می گذارند .
    ظهور فناوری LINQ ( برگرفته شده از Language-INtegrated Query ) تلاشی است در اين راستا که با هدف تحول در نحوه دستیابی به منابع داده ( صرفنظر از نوع منبع داده ) ، مطرح شده است .
    پس از مطرح شدن هر گونه فناوری در عرصه نرم افزار ، طراحان و پياده کنندگان با سه پرسش اساسی مواجه می گردند : این فناوری چيست ؟ چه کار می کند ؟ و چرا ما به آن نیاز داريم ؟ در این مقاله و سایر مقالاتی که در ادامه بر روی سایت منتشر خواهد شد ، سعی خواهیم کرد به سه پرسش فوق در ارتباط با فناوری LINQ پاسخ دهيم .

    مقدمه
    کد و داده دو عنصر اساسی در نرم افزار می باشند که هر یک دارای جایگاه تعريف شده مختص به خود است . یکی از فعالیت های مهم در زمان پياده سازی نرم افزار ، نوشتن کد مورد نیاز جهت دستيابی به داده است . برای نوشتن کد ، پياده کنندگان می توانند از زبان های برنامه نویسی مختلفی استفاده کنند . انتخاب زبان برنامه نویسی به عوامل متعددی نظیر نوع رفتار برنامه ، پيش زمينه و دانش پياده کنندگان ، مهارت های تیم پياده کننده ، نوع سیستم عامل و سياست های سازمان بستگی دارد . صرفنظر از این که پياده کنندگان چه زبانی را برای نوشتن کد انتخاب می نمایند ، در زمان پياده سازی نرم افزار به دفعات مجبور خواهیم بود که با داده سرو کار داشته باشیم . داده می تواند بر روی ديسک ، جداولی در بانک اطلاعاتی و يا اسناد XML ذخيره شده باشد . در برخی موارد لازم است که با تمامی نوع های اشاره شده در یک برنامه سرو کار داشته باشیم . فراموش نکنيم که مديريت داده برای هر پروژه نرم افزاری یک باید است .
    پياده کنندگان نرم افزار در زمان نوشتن کد و تولید امکانات مورد نياز در هر يک از لایه های متفاوت ( با توجه به نوع معماری نرم افزار ) ، همواره این پرسش را با خود مطرح می نمایند که محيط پياده سازی و یا فريمورک هائی نظیر دات نت چه امکاناتی را در اختيار آنها خصوصا" در زمان کار با داده قرار می دهند . به عبارت دیگر ، يک سيستم عامل چگونه می تواند نياز پياده کنندگان نرم افزار را پوشش دهد و چه امکانات و پتانسيل هائی را در اختيار علاقه مندان به طراحی و پياده سازی نرم افزار قرار می دهد .
    دات نت به عنوان یکی از فريمورک های پياده سازی نرم افزار در سالیان اخير ، امکانات متعددی را جهت کار با داده در اختيار پياده کنندگان نرم افزار قرار می دهد . LINQ ، تلاشی است جهت يکپارچگی عميق تر و بیش تر بین زبان های برنامه نویسی و داده . در واقع LINQ مشتمل بر مجموعه ای از عملگرهای query استاندارد است که معماری لازم جهت حرکت ، فيلترينگ و اجرای عملیات بر روی تقريبا" هر نوع منبع داده نظیر XML ، بانک های اطلاعاتی رابطه ای و اشياء درون حافظه را فراهم می نماید .
    قبل از هر چيز اجازه دهيد ببينيم LINQ چيست ؟

    LINQ چيست ؟
    با این که فناوری LINQ در پائيز سال 2005 مطرح گردید ولی فرآیند پیاده سازی آن از سال 2003 آغاز شده بود . هدف از ابداع فناوری فوق، ارائه تسهيلات لازم برای پياده کنندگان جهت کار با داده در بانک های اطلاعاتی SQL و XML عنوان شده است. در واقع ، وجود یک حلقه گمشده بین داده رابطه ای ( بانک های اطلاعاتی ) ، اسناد XML با زبان های برنامه نویسی ، ضرورت ابداع فناوری فوق را توجيه کرده بود . پياده کنندگان مجبور بودند برای کار با هر يک از منابع داده ، از روش های مختلفی استفاده نمایند . LINQ را می توان به منزله حلقه ای گمشده بین دنیای داده و زبان های برنامه نویسی همه منظوره تصور کرد . با استفاده از LINQ امکان دستیابی به داده صرفنظر از نوع داده ، با روشی مشابه و یکسان فراهم می گردد .
    پیاده کنندگان نرم افزاردر زمان نوشتن برنامه های خود معمولا" از دو زبان مختلف جهت رسیدن به یک هدف مشترک استفاده می نمایند . ما برای نوشتن کدها از یک زبان برنامه نویسی نظیر VB.NET و يا #C و برای گفتگو با سیستم بانک اطلاعاتی از یک زبان دیگر نظیر SQL استفاده می کنيم .

    برای سفارش شام خود از یک زبان و برای سفارش چای از زبان دیگر !
    این موضوع می تواند چالش های متعددی را برای پياده کنندگان نرم افزار به دنبال داشته باشد :
    • <LI dir=rtl>در مواردی که فريمورک دات نت را به عنوان پلت فرم انتخاب کرده باشیم ، دات نت قادر به درک کدهای SQL نخواهد بود.
      <LI dir=rtl> در مواردی که از زبان های برنامه نویسی حمايت شده در دات نت جهت نوشتن کد در محيط ويژوال استوديو استفاده می کنيم ، همواره یک ابزار قدرتمند در کنار ما است تا در صورت اشتباه در گرامر دستورات توصیه های لازم را ارائه نماید ( IntelliSense ) .از ويژگی فوق نمی توان در ارتباط با SQL استفاده کرد .
      <LI dir=rtl>امکان بررسی نوع ها در زمان ترجمه وجود ندارد . این بدان معنی است که پياده کنندگان تا زمانی که برنامه اجراء نگردد ، نمی توانند مشکلات احتمالی را مشاهده و قبل از زمان اجراء با آنها برخورد نمایند .
    • شرکت مايکروسافت امکانات متعددی را در فريمورک دات نت جهت کار با اسناد XML ارائه کرده است . ارائه System.Xml ، System.Xml.XPath و System.Xml.Schema نمونه هائی در این زمینه می باشند . پياده کنندگان نرم افزار در زمان کار با اسناد XML مجبور بودند که از فناوری های متعددی نظیر DOM ( برگرفته شده از Document Object Mode ) و XQuery استفاده نمایند . همين موضوع باعث شده بود که کار با اسناد XML نظیر خواندن و یا نوشتن داده در آنها برای بسیاری از پياده کنندگان مشکل باشد.

    شرکت مايکروسافت برای حل مشکلات فوق ، بررسی دو راهکار را در دستور کار خود قرار داد :
    • <LI dir=rtl>ایجاد پتانسیل های مورد نیاز مختص XML و یا داده رابطه ای در هر یک از زبان های برنامه نویسی و زمان اجراء . راهکار فوق نه تنها مشکل اصلی را حل نمی کرد بلکه در مواردی مشکلات را خصوصا" در زمینه نگهداری افزایش می داد .
    • اضافه کردن قابلیت های همه منظوره نوشتن query در فریمورک دات نت . به عبارت دیگر یک فریمورک همه منظوره با قابلیت نوشتن query درون فريمورک دات نت که زبان های VB.NET و #C بتوانند به سادگی از مز ایای آن استفاده نمایند .

    خوشبختانه ، شرکت مایکروسافت گزينه دوم را انتخاب نمود . ایجاد یک زیرساخت جهت نوشتن query در بين اشياء ، اسناد XML ، داده رابطه ای و ...
    هم اینک پیاده کنندگان می توانند از مزايای یک الگوی تعريفی در هر یک از زبان های دات نت جهت کار با داده استفاده نمایند . ارائه مجموعه اپراتورهای استاندارد جهت نوشتن query یکی از دستاوردهای مهم LINQ محسوب می گردد . بدین ترتیب ، پياده کنندگان می توانند با بکارگیری یک مجموعه يکسان از اپراتورهای نوشتن query در هر یک از زبان های برنامه نویسی حمایت شده در دات نت ، از داده ذخیره شده در منابع داده مختلف صرفنظر از نوع منبع داده استفاده نمایند . همچنين ، امکان استفاده از پتانسیل هائی نظیر IntelliSense و بررسی نوع ها در زمان ترجمه نیز وجود خواهد داشت .
    شکل 1 نحوه عملکرد LINQ را نشان می دهد .



    شکل 1 : عملکرد فناوری LINQ
    مثال
    برای آشنایی اولیه با قابلیت های LINQ ، بد نيست بدون این که بخواهیم وارد جزئيات شویم یک مثال کاربردی را با یکدیگر دنبال نمائیم .
    در اين مثال با استفاده از LINQ و با يک روش مشابه به منابع داده مختلفی متصل شده و پس از بازیابی داده ، آنها را در يک ListBox جداگانه نمایش می دهيم .
    منابع داده عبارتند از :

    • <LI dir=rtl>فولدرهای موجود در یک درایو <LI dir=rtl>پردازه های در حال اجراء در ويندور <LI dir=rtl>يک بانک اطلاعاتی رابطه ای SQL <LI dir=rtl>عناصر موجود در يک آرایه <LI dir=rtl>يک فایل XML
    • یک فایل متن

    <%@Page Language="VB"uiCulture="fa-IR"Culture="fa-IR" %>
    <%
    @ImportNamespace="System.Diagnostics" %>
    <%
    @ImportNameSpace="System.IO" %>
    <%
    @ImportNameSpace="System.Linq" %>
    <%
    @ImportNameSpace="System.Data.Linq" %>
    <%
    @ImportNameSpace="System.Data.Linq.Mapping" %>
    <%
    @ImportNameSpace="System.XML.Linq" %>
    <%
    @ImportNameSpace="System.Collections" %>
    <scriptrunat="server">'================================================= ===================
    کلاس ایجاد شده بر اساس داده موجود در بانک اطلاعاتی Contact برای جدول Persons
    LINQ to SQL Class
    <Table(Name:="Persons")> _
    PublicClass Person
    <Column(DbType:=
    "Int not null")> _
    Public ID AsInteger
    <Column(DbType:="nvarchar(50) not null")> _
    Public Name AsString
    <Column(DbType:="nvarchar(50) not null")> _
    Public Email AsString
    End
    Class
    '================================================= ===================
    ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs)

    بازیابی فولدرهای موجود در درایو C
    Dim DI As DirectoryInfo = New DirectoryInfo("C:\\")
    Dim dirQuery = From dir In DI.GetDirectories() OrderBy
    (dir.Name)
    Select dir.Name
    ForEach item In dirQuery
    ListBox1.Items.Add(item)
    Next
    item
    '================================================= ===================

    بازیابی پردازه های در حال اجرا در ویندور

    Dim procQuery = From proc In Process.GetProcesses() OrderBy proc.Id _
    Descending
    Select proc.Id, proc.ProcessName
    ForEach item In procQuery
    ListBox2.Items.Add(item.Id &
    " " & item.ProcessName)
    Next item
    '================================================= ====================
    بازیابی داده موجود در جدول Persons بانک اطلاعاتی Conatct

    Dim context As DataContext = New DataContext("Data Source=SRCO-1\SQLEXPRESS;
    Initial Catalog=Contact;Integrated Security=true"
    )
    Dim contact1 As Table(Of Person) = context.GetTable(Of Person)()
    Dim query = From c In contact1 Select c.Name, c.Email
    ForEach item In query
    ListBox3.Items.Add(item.Name &
    " " & " ==== ◄ " & item.Email)
    Next item
    '================================================= ======================
    بازیابی عناصر یک آرایه

    Dim firstnames AsString() = **"سخا روش", "سايت شرکت سخا روش", "سايت مقالات به زبان فارسی", "سری مقالات ", "ایران", "تهران"} Dim val As IEnumerable(OfString) = From fn In firstnames _
    Where (fn.StartsWith("س")) _
    Select fn
    ForEach name AsStringIn val
    ListBox4.Items.Add(name)
    Next name
    '================================================= =======================
    بازیابی داده ذخیره شده در یک فایل XML با نام Cities.xml

    Dim XDoc As XDocument = XDocument.Load(MapPath("Cities.xml"))
    Dim query1 = From c In XDoc.Descendants("City") _
    OrderBy c.Element("Name").Value _
    Select c.Element("Name").Value
    ForEach item In query1
    ListBox5.Items.Add(item)
    Next item
    '================================================= =====================
    بازیابی داده از یک فایل متن با نام Maghalat.csv

    Dim query2 = From line In File.ReadAllLines(MapPath("Maghalat.csv")) _
    WhereNot line.StartsWith("#") _
    Let parts = line.Split(",") _
    Select Title = parts(0), Publisher = parts(1)
    ForEach item In query2
    ListBox6.Items.Add(item.Title &
    " " & item.Publisher)
    Next
    item
    EndSub
    </script>
    '================================================= ======================

    <htmlxmlns="http://www.w3.org/1999/xhtml">
    <
    headrunat="server">
    <
    title> مثال شماره یک </title>
    </
    head>
    <
    body>
    <
    formid="form1"runat="server">
    <
    div>
    <
    asp:ListBoxID="ListBox1"runat="server"></asp:ListBox>
    <
    asp:ListBoxID="ListBox2"runat="server"></asp:ListBox>
    <
    asp:ListBoxID="ListBox3"runat="server"></asp:ListBox>
    <
    asp:ListBoxID="ListBox4"runat="server"></asp:ListBox>
    <
    asp:ListBoxID="ListBox5"runat="server"></asp:ListBox>
    <
    asp:ListBoxID="ListBox6"runat="server"></asp:ListBox>
    </
    div>
    </
    form>
    </
    body>
    </
    html>
    شکل زیر خروجی برنامه فوق را نشان می دهد .


    شکل 2 : دستيابی به منابع داده مختلف با استفاده از فناوری LINQ
    خلاصه
    LINQ يک فناوری قدرتمند در زمان کار با داده است که دستاوردهای متعددی را برای پياده کنندگان به ارمغان آورده است :

    • <LI dir=rtl>روشی ساده جهت نوشتن query <LI dir=rtl>تسریع در پیاده سازی نرم افزار با توجه به حذف خطاهای زمان اجراء <LI dir=rtl>امکان استفاده از امکاناتی نظیر اشکال زدائی و IntelliSence در زمان پياده سازی <LI dir=rtl>حذف خلاء موجود بين داده رابطه ای و پیاده سازی شی گراء <LI dir=rtl>استفاده از یک گرامر يکسان جهت نوشتن query صرفنظر از نوع منبع داده
    • افزایش بازدهی و راندمان برنامه نویسی ، چراکه برنامه نویسان از یک رویکرد يکسان برای نوشتن query و بهنگام سازی داده از طریق زبان برنامه نویسی استفاده خواهند کرد .

    LINQ از دو بخش که مکمل يکديگر می باشند تشکيل شده است : مجموعه ای از ابزار ها جهت کار با اشياء ، اسناد XML ، بانک های اطلاعاتی رابطه ای و سایر نوع های داده و مجموعه ای از ضمایم برای زبان های برنامه نویسی نظیر VB و #C . در بخش دوم به بررسی هر یک از موارد فوق خواهيم پرداخت .

    (به نقل از وب سایت شرکت سخاروش)
    ویرایش توسط Kasra : January 2nd, 2009 در ساعت 02:20
    www.ahmadghazi.ir

    Network+ - MCITP - CCNA- TMG
    پاسخ با نقل قول پاسخ با نقل قول
+ ارسال تاپیک جدید

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. راهیابی بازی ها در این تاپیک
    توسط arian در انجمن پرسش و پاسخ و مباحث فنی پیرامون بازی‌ها و کنسول‌ها
    پاسخ: 88
    آخرين نوشته: September 18th, 2012, 11:07
  2. زندگینامه ها
    توسط eris در انجمن پرسش و پاسخ، مباحث فنی و سایر مسائل حوزه‌ی فناوری
    پاسخ: 197
    آخرين نوشته: March 1st, 2010, 21:26
  3. ایران
    توسط Saheb در انجمن پرسش و پاسخ، مباحث فنی و سایر مسائل حوزه‌ی فناوری
    پاسخ: 3
    آخرين نوشته: December 17th, 2008, 15:12
  4. همه چيز در مورد Adsl
    توسط nextslit در انجمن شرکت‌‌‌های ارائه‌دهنده‌ی خدمات اینترنت در ایران
    پاسخ: 3
    آخرين نوشته: July 25th, 2008, 16:09
  5. همه چیز درباره موتورهای جستجو
    توسط omid_sakhre در انجمن مقالات حوزه‌ی فناوری
    پاسخ: 1
    آخرين نوشته: April 24th, 2008, 14:24

کاربرانی که این تاپیک را مشاهده کرده اند: 0

هیچ عضوی در لیست وجود ندارد.

کلمات کلیدی این موضوع

مجوز ‌های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست ‌های خود را ویرایش کنید
  •  

اکنون ساعت 19:11 برپایه‌ی ساعت جهانی (GMT +3.5) می‌باشد.

تبلیغات متنی

عضویت در خبرنامه

با عضویت در خبرنامه‌ی سایت، جدیدترین ترفندها، نقد و بررسی‌ها و مطالب مدرسه فناوری به طور خودکار به ایمیل شما ارسال می‌شود. بعد از کلیک بر روی دکمه‌ی «مشترک شوید»، بایستی کد داخل تصویر را وارد کرده، سپس به صندوق ایمیل خود مراجعه کنید و روی لینک تأیید کلیک کنید تا اشتراک شما نهایی شود.

کلیه حقوق مادی و معنوی متعلق به وب سایت ترفندستان است. برداشت مطالب و تصاویر تنها با ذکر نام ترفندستان مجاز است.