PDA

View Full Version : پیاده سازی معماری چند لایه ماکروسافت با دلفی 2009 !



بابک.م.
چهارشنبه 21 اسفند 1387, 00:28 صبح
من فکر می کنم با وجود پیشرفت فوق العاده سی شارپ و دات نت فریم ورک دلفی همچنان می تونه در پروژه های کوچک و شاید متوسط استفاده بشه. اما حتما شما هم با من موافقید که دوران برنامه های تک لایه ای تموم شده و باید ساختار های کهنه و درهم برهم گذشته رو کنار گذاشت. برای پیاده سازی معماری چند لایه ماکروسافت دلفی 2009 امکاناتی داره که ظاهرا" می شه ازشون استفاده کرد. به نظر شما هریک از این لایه ها رو چه طوری و با چه امکانی می شه پیاده کرد؟
Common Layer
Data Access Layer
Business Layer
Facade Layer
Presenation Layer

vcldeveloper
چهارشنبه 21 اسفند 1387, 02:32 صبح
اما حتما شما هم با من موافقید که دوران برنامه های تک لایه ای تموم شده و باید ساختار های کهنه و درهم برهم گذشته رو کنار گذاشت.
تا جایی که من یادم میاد، دلفی از همون نسخه های اولیه در دهه 90 قرن بیستم انواع و اقسام روش های تولید نرم افزارهای 2 و 3 لایه را پشتیبانی می کرد. از پشتیبانی از CORBA و Microsoft DCOM و WebService گرفته، تا استفاده از DataSnap برای تولید برنامه های 3-لایه بانک اطلاعاتی.
مفاهیم مربوط به این نوع از نرم افزارها هم از سال ها قبل مطرح بودند، و چیزی نیستند که مایکروسافت یا دات نت آنها را ابداع یا احیا کرده باشند!


به نظر شما هریک از این لایه ها رو چه طوری و با چه امکانی می شه پیاده کرد؟
Common Layer
Data Access Layer
Business Layer
Facade Layer
Presenation Layer
با n ابزار مختلف، چه ابزارها و کامپوننت های استاندارد دلفی، چه کامپوننت های سایر شرکت ها مثل RemObjects DataAbstract یا kbmMW.

در خودِ دلفی، هم امکان ساخت و استفاده از WebService وجود داره، هم امکان تولید Application Server (لایه میانی در معماری های سه لایه که معمولا Data Access Layer و Business Layer را در خودش جای می دهد) با استفاده از DataSnap. معماری چند-لایه مورد نظر میتونه از DCOM مایکروسافت، یا TCP Socket، یا WebService برای اتصال بین لایه ها استفاده کنه. در دلفی 2009 یک قابلیت جدید با نام DataSnap 2009 وجود داره که قابلیت های بسیار بیشتری نسبت به DataSnap معمولی ارائه میکنه، و به کلاینت های جاوا و دات نت هم امکان اتصال به Application Server ساخته شده را میده.

برای Data Access دلفی انواع و اقسام روش های ارتباط با انواع بانک های اطلاعاتی را فراهم میکنه که بطور کلی به پنج دسته تقیسم میشند:
BDE (از دور خارج شده).
ADO
DBX
IBX (فقط مخصوص Interbase)
کامپوننت های سایر شرکت ها برای ارتباط با بانک های اطلاعاتی مختلف.

در دلفی های 2007 - 2009 اصلی ترین روش اتصال DBX هست که هم درایورهای خودش برای ارتباط با انواع بانک های اطلاعاتی مثل MS SQL Server, Oracle, MySQL, Interbase, BlackFish, و غیره را داره، هم امکان اتصال به ADO.NET.

Facade Layer فقط یک لایه هست که رابط هایی را برای اتصال اجزاء سیستم فراهم میکنه. این را میشه با هر چیزی پیاده سازی کرد. Common Layer هم به همچنین؛ لایه ایی هست که یک سری سرویس هایی که بین همه لایه ها مشترک هست را به آنها ارائه میکنه.


اگر هم بخواید از کامپوننت سایر شرکت ها استفاده کنید، این توضیحات و قابلیت های مربوط به یکی از آنها ست:
http://www.remobjects.com/da.aspx#2
برای Presentation Layer هم انواع و اقسام کامپوننت استاندارد تولید رابط کاربر در دلفی وجود داره، علاوه بر آنکه هزاران کامپوننت هم توسط شرکت های مختلف ارائه شده.

بابک.م.
چهارشنبه 21 اسفند 1387, 09:59 صبح
تا جایی که من یادم میاد، دلفی از همون نسخه های اولیه در دهه 90 قرن بیستم انواع و اقسام روش های تولید نرم افزارهای 2 و 3 لایه را پشتیبانی می کرد. از پشتیبانی از CORBA و Microsoft DCOM و WebService گرفته، تا استفاده از DataSnap برای تولید برنامه های 3-لایه بانک اطلاعاتی.


جناب آقای کشاورز از توجه شما ممنونم
ببینید منظور من نرم افزار چند لایه (Multi Layer) هست نه (Multi Tier).
در معماری چند لایه برای هر Entity یک کلاس در لایه Common ایجاد می شه. Object هایی از کلاس های Entity بین لایه ها جابجا می شوند.
لایه Data Access هم در واقع یک سری کلاس هست که مستقیما به DB متصل می شه و یک EntityObject (که متناظر یک رکورد هست) یا لیستی از EntityObject ها رو از جداول مربوط می خونه و می نویسه.
لایه Business هم دو تا کار انجام می ده کنترل قوانین یا رول های که توسط دیتا بیس انجام نمی شه و ایجاد transaction روی عملیات های متوالی و مرتبط DataAccess .
Facade مجموعه ای از کلاس هاست که کانال ارتباطی لایه نمایش و لایه های پایین تر است. در واقع facade برای انجام درخواست های لایه نمایش سراغ لایه DataAccess یا Bussiness می رود.

اینکه برای ارتباط لایه ها از چه روش های می شه استفاده کرد و بحث در مورد تعداد Tier ها فعلا مورد نظر من نیست.

سوال اول!
چطور می شه در Delphi for Win32 یه آرایه یا لیست رو به یه گرید Bind کرد؟

vcldeveloper
چهارشنبه 21 اسفند 1387, 12:18 عصر
ببینید منظور من نرم افزار چند لایه (Multi Layer) هست نه (Multi Tier).
دوست عزیز، Layer و Tier بطور کلی یک مفهوم را می رسانند. تفاوتشان در این هست که معمولا به لایه هایی که از نظر فیزیکی از هم جدا شده باشند (مثلا هر لایه روی یک سیستم جداگانه در حال فعالیت هست) Tier گفته میشه، و معمولا به لایه هایی که فقط از نظر منطقی از هم جدا شده باشند، Layer گفته میشه.

پس وقتی از Multi-Tier صحبت می کنیم، مفهوم Multi-Layer را در خودش دارد، چون هم لایه ها بصورت منطقی از هم جدا هستند، هم می تونند بصورت فیزیکی از هم جدا باشند.

البته به این نکته هم توجه کنید که خیلی وقت ها حتی همین تفاوت را هم بین این دو واژه قائل نمیشند و در خیلی مقالات و کتب این دو واژه معادل هم فرض میشند.


در معماری چند لایه برای هر Entity یک کلاس در لایه Common ایجاد می شه. Object هایی از کلاس های Entity بین لایه ها جابجا می شوند.
لایه Data Access هم در واقع یک سری کلاس هست که مستقیما به DB متصل می شه و یک EntityObject (که متناظر یک رکورد هست) یا لیستی از EntityObject ها رو از جداول مربوط می خونه و می نویسه.
لایه Business هم دو تا کار انجام می ده کنترل قوانین یا رول های که توسط دیتا بیس انجام نمی شه و ایجاد transaction روی عملیات های متوالی و مرتبط DataAccess .
Facade مجموعه ای از کلاس هاست که کانال ارتباطی لایه نمایش و لایه های پایین تر است. در واقع facade برای انجام درخواست های لایه نمایش سراغ لایه DataAccess یا Bussiness می رود.
اینها را در پست قبلی توضیح دادم. مسئله ایی که هست، نباید انتظار داشته باشید در دلفی مفاهیم توسعه نرم افزار لزوما با واژه های مایکروسافتی عرضه بشند. شما باید مفهوم را دنبال کنید:


Object هایی از کلاس های Entity بین لایه ها جابجا می شوند.
در تمام روش هایی که در بالا ذکر کردم هم objectهایی بین لایه ها منتقل میشه، البته اسم کلاس پایه شان Entity نیست!


لایه Data Access هم در واقع یک سری کلاس هست که مستقیما به DB متصل می شه و یک EntityObject (که متناظر یک رکورد هست) یا لیستی از EntityObject ها رو از جداول مربوط می خونه و می نویسه.
اون پنج مورد روش های دسترسی به بانک اطلاعاتی که نام بردم، همگی مجموعه ایی از کلاس ها برای دسترسی به داده های بانک اطلاعاتی فراهم می کنند، و داده ها را بصورت مجموعه ایی از اشیاء به برنامه بر می گردانند، البته اینها هم اسم کلاس هایشان EntityObject یا چیزی شبیه به این نیست.


لایه Business هم دو تا کار انجام می ده کنترل قوانین یا رول های که توسط دیتا بیس انجام نمی شه و ایجاد transaction روی عملیات های متوالی و مرتبط DataAccess .
این را می تونید به شکل های مختلف پیاده سازی کنید؛ هم می تونید خودتون کلاس های خودتون رو طراحی و استفاده کنید، هم می تونید از قابلیت های DataSet های دلفی یا DataSetProvider برای اعمال قوانین بر روی داده های رد و بدل شده بین بانک اطلاعاتی و لایه های پایین تر استفاده کنید.

بعضی از ابزارها مثل RemObjects DataAbstract هم برای اینگونه موارد قابلیت های ویژه ارائه می کنند که
لینک قابلیت هایش را در پست قبلی دادم.


Facade مجموعه ای از کلاس هاست که کانال ارتباطی لایه نمایش و لایه های پایین تر است. در واقع facade برای انجام درخواست های لایه نمایش سراغ لایه DataAccess یا Bussiness می رود.
این را هم می تونید با هر زبان برنامه نویسی پیاده سازی کنید. برای اتصال بین لایه ها هم توضیح دادم که در دلفی از چه تکنولوژی هایی میشه استفاده کرد.



سوال اول!
چطور می شه در Delphi for Win32 یه آرایه یا لیست رو به یه گرید Bind کرد؟
این از موضوع این تاپیک خارج هست، و باید در یک تاپیک جداگانه آن را مطرح کنید.

بابک.م.
چهارشنبه 21 اسفند 1387, 13:43 عصر
در تمام روش هایی که در بالا ذکر کردم هم objectهایی بین لایه ها منتقل میشه، البته اسم کلاس پایه شان Entity نیست!

لطفا در این مورد بیشتر توضیح بدید.

منظور شما انتقال اطلاعات بین لایه ها از طریق چیزی شبیه TDataSet یا TClientDataSetهست. می دونم که برای پیاده سازی یه ApplicationServer باید از این کامپوننت ها استفاده کرد. به نظر من از این کامپوننت ها فقط باید برای انتقال اطلاعات بین Client و Server استفاده کرد.

vcldeveloper
چهارشنبه 21 اسفند 1387, 15:55 عصر
منظور شما انتقال اطلاعات بین لایه ها از طریق چیزی شبیه TDataSet یا TClientDataSetهست.
میشه اشیاء مشتق شده از TDataset یا برخی کلاس های دیگه را بین لایه ها منتقل کرد. مگه تصور شما از object چی هست؟! هر نمونه شی از یک کلاس یک object هست.


می دونم که برای پیاده سازی یه ApplicationServer باید از این کامپوننت ها استفاده کرد. به نظر من از این کامپوننت ها فقط باید برای انتقال اطلاعات بین Client و Server استفاده کرد.
خب این نظر شما ست. البته باید دید منظور از Client و Server چی هست. در یک معماری چند لایه، هر لایه بالاتر میتونه Serverایی برای لایه های پایین تر باشه، و هر لایه پایین تر هم Clientایی برای لایه های بالاتر. کل برنامه هم ممکن هست چندین لایه مختلف داشته باشه که برای انتقال داده بین خودشان یا پردازش داده ها، از کلاس های مشتق شده از TDataSet یا سایر کلاس ها استفاده می کنند.


می دونم که برای پیاده سازی یه ApplicationServer باید از این کامپوننت ها استفاده کرد.
لزومی نداره از اون کلاس ها استفاده بشه. اگر کسی مایل بود، میتونه کلاس های خودش را توسعه بده، یا از سایر کلاس های پشتیبانی شده برای ارسال اطلاعات استفاده کنه. اگر بخواد از مکانیزم های فراهم شده دلفی برای کار با بانک اطلاعاتی استفاده کنه، باید از کلاس های مشتق شده از TDataSet استفاده کنه.

همانطور که در دات نت، کسی که می خواد از قابلیت های اتصال به بانک اطلاعاتی، و کار با داده های در دات نت استفاده کنه، باید با کلاس های ارائه شده توسط ADO.Net کار کنه.

بابک.م.
چهارشنبه 21 اسفند 1387, 23:46 عصر
اگر هم بخواید از کامپوننت سایر شرکت ها استفاده کنید، این توضیحات و قابلیت های مربوط به یکی از آنها ست:
http://www.remobjects.com/da.aspx#2


از راهنمایی شما ممنونم.

بابک.م.
جمعه 15 آبان 1388, 02:26 صبح
خوب،

این هم یک برنامه چند لایه و البته تک طبقه (Multi Layer & Single Tier) با دلفی 2010 و

FireBird SQL

DBExpress FrameWork
Generic Types
و RunTime Package.

scarlet_yekta
پنج شنبه 06 شهریور 1393, 18:51 عصر
سلام ممنون میشم نحوه پیاده سازی لایه ها در دلفی xe6 را آموزش بدید. سوالم دقیقا مشابه سوال شماست اما آخر بحث به جواب نرسیدم!