‫آیا NHibernate انتخاب خوبی به عنوان یک ORM است؟

اگر در مورد لزوم استفاده از ORM به جواب مثبت رسیده‌اید، انتخاب یک ORM کار چندان  سختی نیست. در حال حاضر ORMهای تجاری و غیر تجاری زیادی وجود دارند از جمله ADO.NET Entity Framework، LLBLGen Pro، SubSonic و… برای دیدن فهرست آنها می‌توانید به این لینک مراجعه کنید.

NHibernate یک ORM کد باز است که از دنیای جاوا وارد دات‌نت شده است. کد باز بودن آن خود به خود مزایای زیادی ایجاد می‌کند. از جمله: جامعه استفاده کنندگان بیشتر، تنوع محصولات جانبی، عدم نیاز به کرک و قفل‌شکنی، عدم وابستگی به ‎.Net Framework و…

از آنجا که NHibernate بر اساس پروژه‌ی جاوایی Hibernate ایجاد شده از تمام تکنیک‌ها و منابع آموزشی آن می‌توان در NHibernate نیز استفاده کرد. NHibernate مدت‌هاست که چه در جاوا و چه در دات‌نت مورد استفاده است و منابع، نمونه کدها و پروژه‌های زیادی بر اساس آن به وجود آمده.

در مورد NHibernate پروژه‌های جانبی زیادی وجود دارد که کار کردن با آن را خیلی راحت‌تر ساخته است. مثلاً Fluent NHibernate به عنوان ابزاری که با کمک آن دیگر نیازی به استفاده از Xml Mappingهای NHibernate یعنی HBMها وجود ندارد. NHibernate Profiler ابزاری برای بازرسی و افزایش سرعت NHibernate. پروژه‌ی Castle ActiveRecord به عنوان ابزار راحت‌کننده‌ی کار با NHibernate و چندین پروژه‌ی مفید دیگر.

یکی از نگرانی‌های همیشگی در کار با ORMها Performance است. مسلماً هر ORMی مقدار کمی سرعت را کاهش می‌دهد. چون ORM یک لایه‌ی اضافی بر روی ADO.NET است. اما این موضوع در برابر دیگر مزایایی که استفاده از ORM به دست می‌دهد قابل اغماض است. البته این کاهش سرعت عمدتاً به علت عدم تنظیم صحیح ORM یا طراحی غلط Class Diagram است و می‌توان آن را تا اندازه‌ی زیادی از بین برد.

در این مورد که آیا NHibernate را می‌توان در پروژه‌های بزرگ به کار برد یا نه فکر نمی‌کنم در مورد پروژه‌هایی که داخل کشور به کار می‌روند مشکل خاصی ایجاد کند. تصور من این است که NHibernate خودش یک چیزی مثل ADO.NET است و می‌تواند بدون توجه به بزرگی یا کوچکی پروژه، یک Performance قابل قبول را از خودش به نمایش بگذارد.

ما در شرکت قبلی استفاده‌های خیلی خوبی از NHibernate کرده و از خیلی از مزایای آن بهره برده بودیم. اما متاسفانه در مقوله‌ی Performance مشکلاتی داشتیم که باز هم  عمدتاً مربوط به عدم استفاده صحیح ما از NHibernate بود. مطمئنم که با استفاده مناسب‌تر و داشتن دانش فنی عمیق‌تر از NHibernate می‌توانستیم مشکل Performance را هم از سر راه برداریم. با این وجود توصیه‌ام به کسانی که قصد استفاده از NHibernate را دارند این است که قبل از شروع حسابی مستندات آن را مطالعه کنند و یکی دو نمونه هم با آن بسازند. ضمناً در مورد طراحی Class Diagramهای دیتابیسی نهایت دقت را به عمل آورند در غیر این صورت حسابی به دردسر خواهند افتاد.

یکی از مشکلات موجود با NHibernate، راه‌اندازی اولیه آن است. منظور از راه‌اندازی اولیه، نوشتن Data Access Layer برنامه با استفاده از آن است. این کار علاوه بر این که وقت‌گیر و حوصله‌بر است، کار حساسی نیز هست. چون در صورت طراحی غلط مشکلات زیادی به وجود خواهد آمد. توصیه این است که برای رفع این مشکل از پروژه‌ی Castle ActiveRecord استفاده کنید. ActiveRecord تقریباً یک Data Access Layer کامل است که کار با NHibernate را به شدت راحت‌تر می‌کند. خصوصاً این که با Castle ActiveRecord مشابه Fluent NHibernate دیگر نیازی به Xml Mapping وجود ندارد. علاوه بر این چون Castle ActiveRecord بر اساس NHibernate نوشته شده تمام امکانات NHibernate را هم هنوز می‌توان با آن استفاده کرد. مثلاً می‌توان با NHibernate.ISession به طور مستقیم در Castle ActiveRecord کار کرد.

توجه: این مطلب در ادامه نوشته‌ی «آیا ORM برای ما مناسب است؟» نوشته شده است.

دیدگاه‌ها

  1. ایمان نعمتی

    کتابخانه های Fluent NHibernate و Castle ActiveRecord کار استفاده از NHibernate را خیلی راحت تر می کنند و استفاده از اون ها مزایای زیادی داره.
    من وقت زیادی بر روی Castle ActiveRecord نذاشتم، با این نوشته شما ترغیب شدم که در موردش بیشتر بخونم و حتماً امتحانش کنم.
    ممنون

  2. Majid

    باسلام
    اگر امکان دارد بفرمایید آیا از NHibernate در برنامه‌های ویندوزی هم استفاده کرده‌اید یا نه. چون تاجایی که من مطالعه کرده‌ام بحث مدیریت Session در برنامه‌های ویندوزی کمی حساس بوده و نحوه مدیریت آن تاثیر زیادی روی کارآیی برنامه دارد.
    سپاس

  3. سعید

    با سلام. تا جایی که من دیدم و خوندم این فرنگی ها توصیه کردن اصلا تو پروژه های اینترپرایز فقط از
    orm
    استفاده بشه,مخصوصا
    NHibernate,Entity Framework
    پس این تکلیفش روشنه ولی مسئله چیز دیگه ای هست. چند روز پیش تصمیم گرفتم تا موقعی که یه کار درست حسابی به تورم بخوره بطور جدی کار روی یکی از این پلاتفورم ها رو شروع کنم. پس از کلی بالا پایین کردن و کلنجار (اخرش هم نتونستم تصمیم بگیرم) یه سوالی برام پیش اومد. استفاده از این سیستم ها تا چه حد تو ایران رواج داره؟ کدومش بیشتر؟ بفرض که من شروع کنم به خوندن, اصلا چند تا شرکت هست که بصورت جدی از این روش استفاده کنن؟ مخصوصا اینکه من تو یزدم. به هر حال برای ما نرم افزاری ها مهمه که بتونیم از فناوری که مطالعه می کنیم, عملا استفاده هم بکنیم. شایدم وقت تلف کردنه؟ نظر شما چیه؟ شما که تجربه کاریتون مطمئنا خیلی بیشتر از منه
    با تشکر

  4. Afshar Mohebbi

    ‫سلام سعید،

    یزد را نمی‌دانم ولی توی تهران خیلی شرکت‌ها به سمت استفاده از NHibernate یا Entity Framework رفتن. بعضی‌ها در حال استفاده هستند و بعضی‌ها قصد دارند در آینده از آن استفاده کنند.

    این طور هم که به نظر می‌آید در آینده شرکت‌های بیشتری هم وارد این بازی خواهند شد پس یادگیری و استفاده از یکی از این دو ضرر زیادی نخواهد داشت.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *