رفتن به مطلب

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


ارسال های توصیه شده

نرم افزار یکی از ارکان مهم فناوری اطلاعات و ارتباطات در عصر حاضر است . گرچه نرم افزار در گذشته نیز همواره حائز اهمیت بوده است ، ولی در سالیان اخیر به دلیل گسترش اینترنت و ظهور نسل جدیدی از برنامه های کامپیوتری موسوم به برنامه های وب ، نگاه به نرم افزار و انتظار از آن در جهت تامین طیف گسترده ای از خواسته ها تغییر و رشد چشمگیری یافته است . به همین دلیل است که در دنیای نرم افزار هر روز تحولات مهمی اتفاق می افتد و فناوری های جدیدی قدم در این عرصه می گذارند .

ظهور فناوری LINQ ( برگرفته شده از
L
anguage-
IN
tegrated
Q
uery ) تلاشی است در این راستا که با هدف تحول در نحوه دستیابی به منابع داده ( صرفنظر از نوع منبع داده ) ، مطرح شده است .

پس از مطرح شدن هر گونه فناوری در عرصه نرم افزار ، طراحان و پیاده کنندگان با سه پرسش اساسی مواجه می گردند : این فناوری چیست ؟ چه کار می کند ؟ و چرا ما به آن نیاز داریم ؟ در این مقاله و سایر مقالاتی که در ادامه بر روی سایت منتشر خواهد شد ، سعی خواهیم کرد به سه پرسش فوق در ارتباط با فناوری LINQ پاسخ دهیم .
مقدمه

نرم افزار یکی از ارکان مهم فناوری اطلاعات و ارتباطات در عصر حاضر است . گرچه نرم افزار در گذشته نیز همواره حائز اهمیت بوده است ، ولی در سالیان اخیر به دلیل گسترش اینترنت و ظهور نسل جدیدی از برنامه های کامپیوتری موسوم به برنامه های وب ، نگاه به نرم افزار و انتظار از آن در جهت تامین طیف گسترده ای از خواسته ها تغییر و رشد چشمگیری یافته است . به همین دلیل است که در دنیای نرم افزار هر روز تحولات مهمی اتفاق می افتد و فناوری های جدیدی قدم در این عرصه می گذارند .

ظهور فناوری LINQ ( برگرفته شده از
L
anguage-
IN
tegrated
Q
uery ) تلاشی است در این راستا که با هدف تحول در نحوه دستیابی به منابع داده ( صرفنظر از نوع منبع داده ) ، مطرح شده است .

پس از مطرح شدن هر گونه فناوری در عرصه نرم افزار ، طراحان و پیاده کنندگان با سه پرسش اساسی مواجه می گردند : این فناوری چیست ؟ چه کار می کند ؟ و چرا ما به آن نیاز داریم ؟ در این مقاله و سایر مقالاتی که در ادامه بر روی سایت منتشر خواهد شد ، سعی خواهیم کرد به سه پرسش فوق در ارتباط با فناوری LINQ پاسخ دهیم .

مقدمه

کد و داده دو عنصر اساسی در نرم افزار می باشند که هر یک دارای جایگاه تعریف شده مختص به خود است . یکی از فعالیت های مهم در زمان پیاده سازی نرم افزار ، نوشتن کد مورد نیاز جهت دستیابی به داده است . برای نوشتن کد ، پیاده کنندگان می توانند از زبان های برنامه نویسی مختلفی استفاده کنند . انتخاب زبان برنامه نویسی به عوامل متعددی نظیر نوع رفتار برنامه ، پیش زمینه و دانش پیاده کنندگان ، مهارت های تیم پیاده کننده ، نوع سیستم عامل و سیاست های سازمان بستگی دارد . صرفنظر از این که پیاده کنندگان چه زبانی را برای نوشتن کد انتخاب می نمایند ، در زمان پیاده سازی نرم افزار به دفعات مجبور خواهیم بود که با داده سرو کار داشته باشیم . داده می تواند بر روی دیسک ، جداولی در بانک اطلاعاتی و یا اسناد XML ذخیره شده باشد . در برخی موارد لازم است که با تمامی نوع های اشاره شده در یک برنامه سرو کار داشته باشیم . فراموش نکنیم که مدیریت داده برای هر پروژه نرم افزاری یک باید است .

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

دات نت به عنوان یکی از فریمورک های پیاده سازی نرم افزار در سالیان اخیر ، امکانات متعددی را جهت کار با داده در اختیار پیاده کنندگان نرم افزار قرار می دهد . LINQ ، تلاشی است جهت یکپارچگی عمیق تر و بیش تر بین زبان های برنامه نویسی و داده . در واقع LINQ مشتمل بر مجموعه ای از عملگرهای query استاندارد است که معماری لازم جهت حرکت ، *****ینگ و اجرای عملیات بر روی تقریبا" هر نوع منبع داده نظیر XML ، بانک های اطلاعاتی رابطه ای و اشیاء درون حافظه را فراهم می نماید .

قبل از هر چیز اجازه دهید ببینیم LINQ چیست ؟

 

LINQ چیست ؟

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

پیاده کنندگان نرم افزاردر زمان نوشتن برنامه های خود معمولا" از دو زبان مختلف جهت رسیدن به یک هدف مشترک استفاده می نمایند . ما برای نوشتن کدها از یک زبان برنامه نویسی نظیر VB.NET و یا #C و برای گفتگو با سیستم بانک اطلاعاتی از یک زبان دیگر نظیر SQL استفاده می کنیم .

برای سفارش شام خود از یک زبان و برای سفارش چای از زبان دیگر !

این موضوع می تواند چالش های متعددی را برای پیاده کنندگان نرم افزار به دنبال داشته باشد :

 

 

 

  • در مواردی که فریمورک دات نت را به عنوان پلت فرم انتخاب کرده باشیم ، دات نت قادر به درک کدهای SQL نخواهد بود.


  • در مواردی که از زبان های برنامه نویسی حمایت شده در دات نت جهت نوشتن کد در محیط ویژوال استودیو استفاده می کنیم ، همواره یک ابزار قدرتمند در کنار ما است تا در صورت اشتباه در گرامر دستورات توصیه های لازم را ارائه نماید ( IntelliSense ) .از ویژگی فوق نمی توان در ارتباط با SQL استفاده کرد .


  • امکان بررسی نوع ها در زمان ترجمه وجود ندارد . این بدان معنی است که پیاده کنندگان تا زمانی که برنامه اجراء نگردد ، نمی توانند مشکلات احتمالی را مشاهده و قبل از زمان اجراء با آنها برخورد نمایند .


  • شرکت مایکروسافت امکانات متعددی را در فریمورک دات نت جهت کار با اسناد XML ارائه کرده است . ارائه System.Xml ، System.Xml.XPath و System.Xml.Schema نمونه هائی در این زمینه می باشند . پیاده کنندگان نرم افزار در زمان کار با اسناد XML مجبور بودند که از فناوری های متعددی نظیر DOM ( برگرفته شده از Document Object Mode ) و XQuery استفاده نمایند . همین موضوع باعث شده بود که کار با اسناد XML نظیر خواندن و یا نوشتن داده در آنها برای بسیاری از پیاده کنندگان مشکل باشد.


 

 

شرکت مایکروسافت برای حل مشکلات فوق ، بررسی دو راهکار را در دستور کار خود قرار داد :

 

 

 

  • ایجاد پتانسیل های مورد نیاز مختص XML و یا داده رابطه ای در هر یک از زبان های برنامه نویسی و زمان اجراء
    . راهکار فوق نه تنها مشکل اصلی را حل نمی کرد بلکه در مواردی مشکلات را خصوصا" در زمینه نگهداری افزایش می داد .


  • اضافه کردن قابلیت های همه منظوره نوشتن query در فریمورک دات نت
    . به عبارت دیگر یک فریمورک همه منظوره با قابلیت نوشتن query درون فریمورک دات نت که زبان های VB.NET و #C بتوانند به سادگی از مز ایای آن استفاده نمایند .


 

 

خوشبختانه ، شرکت مایکروسافت گزینه دوم را انتخاب نمود . ایجاد یک زیرساخت جهت نوشتن query در بین اشیاء ، اسناد XML ، داده رابطه ای و ...

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

شکل 1 نحوه عملکرد LINQ را نشان می دهد .

IntroLINQ2.jpg

 

شکل 1 : عملکرد فناوری LINQ

مثال

برای آشنایی اولیه با قابلیت های LINQ ، بد نیست بدون این که بخواهیم وارد جزئیات شویم یک مثال کاربردی را با یکدیگر دنبال نمائیم .

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

منابع داده عبارتند از :

 

 

 

  • فولدرهای موجود در یک درایو

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

  • یک بانک اطلاعاتی رابطه ای SQL

  • عناصر موجود در یک آرایه

  • یک فایل XML

  • یک فایل متن

 

 

'================================================= ===================

کلاس ایجاد شده بر اساس داده موجود در بانک اطلاعاتی Contact برای جدول Persons

LINQ to SQL Class

_

Public
Class
Person

_

Public
ID
As
Integer

_

Public
Name
As
String

_

Public
Email
As
String

End
Class

'================================================= ===================

Protected
Sub
Page_Load(
ByVal
sender
As
Object
,
ByVal
e
As
System.EventArgs)

بازیابی فولدرهای موجود در درایو C

Dim
DI
As
DirectoryInfo =
New
DirectoryInfo(
"C:\\"
)

Dim
dirQuery =
From
dir
In
DI.GetDirectories()
Order
By

(dir.Name)
Select
dir.Name

For
Each
item
In
dirQuery

ListBox1.Items.Add(item)

Next
item

'================================================= ===================

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

Dim
procQuery =
From
proc
In
Process.GetProcesses()
Order
By
proc.Id
_

Descending
Select
proc.Id, proc.ProcessName

For
Each
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

For
Each
item
In
query

ListBox3.Items.Add(item.Name &
" "
&
" ==== ◄ "
& item.Email)

Next
item

'================================================= ======================

بازیابی عناصر یک آرایه

Dim
firstnames
As
String
() = {"سخا روش", "سایت شرکت سخا روش", "سایت مقالات به زبان فارسی", "سری مقالات ", "ایران", "تهران"}

Dim
val
As
IEnumerable(
Of
String
) =
From
fn
In
firstnames _

Where
(fn.StartsWith(
"س"
)) _

Select
fn

For
Each
name
As
String
In
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"
) _

Order
By
c.Element(
"Name"
).Value _

Select
c.Element(
"Name"
).Value

For
Each
item
In
query1

ListBox5.Items.Add(item)

Next
item

'================================================= =====================

بازیابی داده از یک فایل متن با نام Maghalat.csv

Dim
query2 =
From
line
In
File.ReadAllLines(MapPath(
"Maghalat.csv"
)) _

Where
Not
line.StartsWith(
"#"
) _

Let
parts = line.Split(
","
) _

Select
Title = parts(0), Publisher = parts(1)

For
Each
item
In
query2

ListBox6.Items.Add(item.Title &
" "
& item.Publisher)

Next
item

End
Sub

script
>

'================================================= ======================

مثال شماره یک
title
>

head
>

asp
:
ListBox
>

asp
:
ListBox
>

asp
:
ListBox
>

asp
:
ListBox
>

asp
:
ListBox
>

asp
:
ListBox
>

div
>

form
>

body
>

html
>

شکل زیر خروجی برنامه فوق را نشان می دهد .

%D8%AF%D8%B3%D8%AA%DB%8C%D8%A7%D8%A8%DB%8C%20%D8%A8%D9%87%20%D9%85%D9%86%D8%A7%D8%A8%D8%B9%20%D8%AF%D8%A7%D8%AF%D9%87%20%D9%85%D8%AE%D8%AA%D9%84%D9%81%20%D8%A8%D8%A7%20%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%20%D8%A7%D8%B2%20%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C%20LINQ%20

 

شکل 2 : دستیابی به منابع داده مختلف با استفاده از فناوری LINQ

خلاصه

LINQ یک فناوری قدرتمند در زمان کار با داده است که دستاوردهای متعددی را برای پیاده کنندگان به ارمغان آورده است :

 

 

 

  • روشی ساده جهت نوشتن query

  • تسریع در پیاده سازی نرم افزار با توجه به حذف خطاهای زمان اجراء

  • امکان استفاده از امکاناتی نظیر اشکال زدائی و IntelliSence در زمان پیاده سازی

  • حذف خلاء موجود بین داده رابطه ای و پیاده سازی شی گراء

  • استفاده از یک گرامر یکسان جهت نوشتن query صرفنظر از نوع منبع داده

  • افزایش بازدهی و راندمان برنامه نویسی ، چراکه برنامه نویسان از یک رویکرد یکسان برای نوشتن query و بهنگام سازی داده از طریق زبان برنامه نویسی استفاده خواهند کرد .

 

 

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

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...