2. مطالعه موردی
2.1. مسئله
بیایید به برنامهای که میخواهیم بسازیم بازگردیم. ما با یک برنامه موجود با معماری زیر شروع میکنیم:
![]() |
برای کسانی که مایلند در مورد موارد زیر اطلاعات بیشتری کسب کنند:
- NHibernate: مقدمهای بر ORM Nhibernate [http://tahe.developpez.com/dotnet/nhibernate/];
- برنامه ASP.NET (WebForms) با NHibernate و Spring: ساخت یک برنامه وب سهلایه با ASP.NET، Spring.NET و NHibernate [http://tahe.developpez.com/dotnet/pam-aspnet/].
ما میخواهیم برنامه قبلی را به این برنامه تبدیل کنیم:
![]() |
که در آن EF5 جایگزین NHibernate شده است. این برنامه به عنوان بهانهای برای مطالعه EF5 عمل میکند. از آنجا که Spring.NET به ما امکان میدهد به راحتی لایهها را بدون خراب کردن هیچ چیزی تغییر دهیم، برنامه ۲ از همان لایه، [ASP.NET]، مانند برنامه ۱ استفاده خواهد کرد. از آنجایی که این سند بر روی EF5 متمرکز است، نحوه نوشتن این لایه را توضیح نخواهیم داد. ما آن را در برنامه ۲ گنجانده خواهیم کرد تا نشان دهیم که کار میکند. ما صرفاً تغییرات لازم در فایل پیکربندی Spring.NET را توضیح خواهیم داد.
مطالعه موردی به شرح زیر است. ما میخواهیم به پزشکان خدمتی برای رزرو وقت ملاقات ارائه دهیم که بر اساس اصل زیر عمل میکند:
- یک سرویس اداری رزروهای RV را برای تعداد زیادی از پزشکان مدیریت میکند. این سرویس میتواند توسط یک نفر اداره شود. حقوق آن شخص بین تمام پزشکانی که از سرویس RV استفاده میکنند، تقسیم میشود؛
- خدمات دفتری و همه پزشکان به اینترنت متصل هستند؛
- فرمهای RV در یک پایگاه داده متمرکز ذخیره میشوند که از طریق اینترنت برای خدمات منشیگری و پزشکان قابل دسترسی است؛
- ویزیتهای RV معمولاً توسط بخش منشیگری رزرو میشوند. همچنین ممکن است توسط خود پزشکان رزرو شوند. این امر بهویژه زمانی صادق است که در پایان یک مشاوره، خود پزشک یک RV جدید برای بیمار خود تعیین میکند.
معماری سرویس تخصیص RV به شرح زیر است:
![]() |
پزشکان کارآمدتر خواهند بود اگر دیگر مجبور نباشند با RV سروکار داشته باشند. اگر تعداد آنها به اندازه کافی باشد، سهمشان در هزینههای جاری دبیرخانه حداقلی خواهد بود. ما این برنامه را [RdvMedecins] نام خواهیم نهاد. در زیر چند اسکرینشات آمده است که نشان میدهد چگونه کار میکند.
صفحهٔ اصلی برنامه به شرح زیر است:

از این صفحهٔ اولیه، کاربر (دبیرخانه، پزشک) تعدادی اقدام را انجام خواهد داد. این موارد در زیر نشان داده شدهاند. نمای سمت چپ، صفحهای را نشان میدهد که کاربر از آن درخواست میکند؛ نمای سمت راست، پاسخی را که توسط سرور ارسال میشود، نشان میدهد.
![]() |
![]() |
![]() |
![]() |
![]() |
2.2. پایگاه داده
پایگاه دادهای که توسط برنامه NHibernate استفاده میشود، یک پایگاه داده MySQL5 است که شامل چهار جدول میباشد:

ما از این بهعنوان مرجع برای ساخت تمامی پایگاههای دادهٔ خود استفاده خواهیم کرد.
2.2.1. جدول [MEDECINS]
این شامل اطلاعاتی در مورد پزشکانی است که توسط برنامه [RdvMedecins] مدیریت میشوند.
![]() | ![]() |
- ID: شماره شناسهٔ پزشک – کلید اصلی جدول
- VERSION: شمارهای که نسخهٔ سطر در جدول را شناسایی میکند. این شماره هر بار که تغییری در سطر ایجاد میشود، یک واحد افزایش مییابد.
- NOM: نام خانوادگی پزشک
- PRENOM: نام کوچک آنها
- TITRE: عنوان آنها (خانم، بانو، آقا)
2.2.2. جدول [CLIENTS]
بیماران پزشکان مختلف در جدول [CLIENTS] ثبت میشوند:
![]() | ![]() |
- ID: شماره شناسه مشتری – کلید اصلی جدول
- VERSION: شمارهای که نسخهٔ سطر در جدول را شناسایی میکند. این شماره هر بار که تغییری در سطر ایجاد میشود، یک واحد افزایش مییابد.
- NOM: نام خانوادگی مشتری
- PRENOM: نام کوچک آنها
- TITRE: عنوان آنها (خانم، بانو، آقای)
2.2.3. جدول [CRENEAUX]
این جدول بازههای زمانی را که در آنها ثبتنام RV امکانپذیر است، فهرست میکند:
![]() |
![]() |
- ID: شمارهای که جایگاه زمانی را شناسایی میکند – کلید اصلی جدول
- VERSION: عددی که نسخهٔ سطر در جدول را شناسایی میکند. این عدد هر بار که تغییری در سطر ایجاد شود، یک واحد افزایش مییابد.
- ID_MEDECIN: شماره شناسه پزشک متعلق به این اسلات – کلید خارجی روی ستون MEDECINS (ID).
- HDEBUT: زمان شروع اسلات
- MDEBUT: دقیقه شروع اسلات
- HFIN: زمان پایان اسلات
- MFIN: دقیقه پایان اسلات
ردهی دوم جدول [CRENEAUX] (به [1] بالا مراجعه کنید) نشان میدهد، برای مثال، که نوبت شمارهٔ ۲ از ساعت ۸:۲۰ شروع و در ساعت ۸:۴۰ پایان مییابد و به پزشک شمارهٔ ۱ اختصاص داده شده است. (خانم ماری PELISSIER).
2.2.4. جدول [RV]
ورودیهای RV را برای هر پزشک فهرست میکند:
![]() |
- ID: شماره یکتا که RV را شناسایی میکند – کلید اصلی
- JOUR: روز RV
- ID_CRENEAU: بازه زمانی برای RV – کلید خارجی در ستون [ID] از جدول [CRENEAUX] – هم بازه زمانی و هم پزشک مربوطه را مشخص میکند.
- ID_CLIENT: شماره مشتری که برای او رزرو انجام شده است – کلید خارجی در ستون [ID] از جدول [CLIENTS]
این جدول دارای یک کلید خارجی (unique e) بر روی مقادیر ستونهای الحاقشده (JOUR, ID_CRENEAU) است:
اگر یک ردیف در جدول [RV] دارای مقدار (JOUR1, ID_CRENEAU1) برای ستونها (JOUR, ID_CRENEAU)، این مقدار نباید در هیچ جای دیگری ظاهر شود. در غیر این صورت، این بدان معناست که دو رکورد RV همزمان برای یک پزشک ثبت شدهاند. از منظر برنامهنویسی جاوا، درایور JDBC در پایگاه داده هنگام وقوع این امر، یک SQLException را فعال میکند.
ورودی مربوط به id که برابر با ۷ است (رجوع شود به [1] در بالا)، نشان میدهد که یک RV برای اسلات شمارهٔ ۱۰ و مشتری شمارهٔ ۲ در تاریخ ۱۰ سپتامبر ۲۰۰۶ رزرو شده است. جدول [CRENEAUX] به ما میگوید که اسلات شمارهٔ ۱۰ معادل بازهٔ زمانی ۱۱:۰۰–۱۱:۲۰ است و متعلق به پزشک شمارهٔ ۱ (خانم ماری PELISSIER) میباشد. جدول [CLIENTS] نشان میدهد که مشتری شمارهٔ ۲ خانم کریستین GERMAN است.
این مطالعه موردی موضوع یک مقاله جاوا ([http://tahe.developpez.com/java/primefaces]) بوده است که در آن از چارچوب Hibernate for Java (ORM) استفاده شده است.














