مطالب مشابه

19 Comments

  1. 1

    Hamid Reza

    سلام استاد،خيلی خوشحالم که دوباره آپديت می کنيد و نوشتن رو شروع کرديد.دلمون همnبرای شما تنگ شده و اميدوارم هر چه زودتر شما رو زيارت کنيم و از کلاس های علمی واخلاقی شما
    کسب فيض کنيم.براتون بهترين ها رو آرزو می کنم…

    پاسخ
  2. 2

    محمدامین مصباحی

    حمیدرضای عزیز، از ابراز لطف و محبتت بسیار ممنونم.
    من هم دلم برات خیلی تنگ شده و امیدوارم سریعتر ببینمت.

    پاسخ
  3. 3

    افشار

    دمت گرم خیلی از مطالب رو گرفتم

    پاسخ
  4. 4

    شاهین کیاست

    سلام جناب صباحی 🙂
    بسیار لذت بردم از پست شما 🙂
    وبلاگ بسیار مفیدتون به لیست Bookmark من اضافه شد.
    جناب صباحی لطفا در صورتی که وققتون اجازه می دهد سوالات من را پاسخ بدید یا لینکی برای اطلاعات بیشتر قرار دهید. ممنون
    ۱)ساختار سلسله مرتبه ای چه ساختاری هست؟
    ۲)Domain Model چه تفاوتی با Service Model دارد؟
    ۳)لایه ی persistence به چه معنا می باشد؟ من فقط اندکی با مفهوم این لایه در WorkFLow آشنا هستم.
    ۴) EF را در مقایسه با Nettiers (الگو ی تولید کد برای CodeSmith) چگونه می بینید؟
    ممنون 🙂

    پاسخ
  5. 5

    Amin Mesbahi

    سلام
    ۱- از حسن نظر و توجهتون متشکرم
    ۲- ساختار سلسله مرتبی رو مانند گروه کالا در نظر بگیرید، مرحله اول کالا که در مرحله دوم به دو شاخه ی کالای الکترونیکی و یا کالای غیرالکترونیکی تقسیم میکنیم، کالای الکترونیکی را به قابل حمل و یا غیر قابل حمل و… به عنوان مثال دیگر می توان به چارت خانوادگی (پدر، پدربزرگ و نوه و بچه ها) که به صورت سلسله مراتبی قرار دارند… به طور خلاصه: اطلاعاتی که نسبت به یکدیگر رابطه ی والد و فرزندی دارند و تقدم تاخر آنها همانند صف نیست…

    ۳- Domain Model: در مباحث مهندسی نرم افزار به بیانی از اشیاء و روابط بین آنها در یک سیستم (چارچوب مرتبط به هم)گفته می شود.
    Service Model: نوعی معماری که مورداستفاده ساختارهای سرویس گرا (SOA) و یا چند لایه می تواند قرار گیرد و قادر به تبادل اشیاء به صورت سبک و مناسب برای تبادل محیا می سازد.

    پاسخ
  6. 6

    Amin Mesbahi

    در صورتی که تفکیک ساختاری اشیا مدنظر باشد، استفاده همزمان از دو معماری توصیه میشه… دلایلش زیاده میشه در قالب یک پست بهش پرداخت.

    ۴- Persistence Layer: به کلاس هایی گفته می شود که با در برداشتن مفاهیم ارث بری، کپسوله سازی و … امور مورد نظر جهت کار با دیتابیس را دارا هستند، مثلا شما آبجکت (کلاس) دانشجو داریدکه دارای متدهایی برای افزودن، حذف، ویرایش و.. می باشد و شما تنها با صدا کردن آنها این امور را در دیتابیس انجام می دهید. عموما در این نوع معماری قالیت پشتیبانی از چند نوع دیتابیس نیز دیده میشود. به این صورت که شما با صرف نظر ازنوع دیتابیس فقط متد افزودن، حذف و.. را فراخوانی میکنید…
    ۵- خیلی سوال کلی ای پرسیدید، ولی هرکدوم مزایایی دارند… EF چندین نوع دیتابیس را پشتیبانی میکند و یا LINQ 2 Entity و یا بحث Forward, Backward Design و کلی چیز دیگه و خصوصا تکیه ی خود مایکروسافت از اون طرف NET Tiers. ساخت خودکار SP ها یا … بهتره مقایسه کنیم. البته من تو همسن بلاگ EF رو با چند فریم ورک دیگه مقایسه کردم…

    امیدوارم پاسخ سوالاتتون کافی بوده باشه در غیر این صورت از طریق ایمیل و یا به صورت حضوری یا تلفنی میتنونیم راجع بهشون صحبت کنیم….
    موفق باشید

    پاسخ
  7. 7

    شاهین کیاست

    جناب مصباحی جدا از حواب سریع و مفصلتون شرمنده شدم 🙂 جدا که درخت هر چه پر بار تر افتاده تر.
    ۴ پاسخ اول را کاملا متوجه شدم.
    و سوال آخر نیاز به باز کردن ییشتر دارد.
    در میان انبوه ORM ها
    llblgen Pro
    Codesmith (که ORM نیست؟!)
    .
    .
    .
    و مواردی که شما فرمودید.
    بنده به دلیل سازگاری Entity Framework با تکنولوژی های مختلف Microsoft و Design Pattern های آن مثل MVVM در WPF و Silverlight و توضیحات شما و مقایسه به جای شما شروع به یادگیری آن کرده ام هر چند تجربه ی استفاده از NEttiers و LINQ را دارا هستم.
    باز هم از حسن توجه شما متشکرم
    امیدوارم نسبت به نظرات و سوالات بنده درآینده کلافه (:P) نشوید 🙂

    پاسخ
  8. 8

    Amin Mesbahi

    دو تا پیشنهاد رو هم از من به یادگار داشته باشید
    Telerik OpenAccess ORM
    IdeaBlade devForce
    هم با EF هماهنگ هستند هم کلی قابلیت عالی…

    پاسخ
  9. 9

    میرزایی

    با سلام
    ممنون از مقاله پر بارتون راستش من توی یه شرکت کار میکردم که پروژه را باEF4 شروع کردند ولی متاسفانه این تکنولوژی باگ های زیادی داشت
    از جمله توی افزودنهای بالای ۱۰۰۰ تا هم زمان دچار مشکل میشد
    یا توی select ها که روی جدول های مختلف انجام میداد در بعضی مواقع روی محتوای داخل هر فیلد خطا میداد مثلا یه جدول که شامل شماره موبایل ها بود به شماره موبایل خاص گیر میداد
    و ما نتونستیم حلش کنیم
    حالا سوال من اینه که این تکنولوژِی که تا این حد امن نیست ایا واقعا قابلیت این که پروژه های بزرگ بر مبنای اون نوشت را دارد؟و یا شاید باگ های اون توی ورژن جدید برطرف شده
    ممنون میشم نظرتون بدید

    پاسخ
  10. 10

    Amin Mesbahi

    سلام
    در این که هیچ نرم افزاری فاقد باگ نیست، شکی نیست، ولی موضوع اینه که مواردی که شما فرمودید خیلی بزرگ تر از باگ هست و قطعا دلیل جانبی دیگه ای داشته، از جمله مشکلات برنامه نویسی جانبی یا عدم اشراف فنی تیم معماری به EF و SQL سرور (قصد جسارت و یا توهین هرگز ندارم)، ولی چون در ایران EF یاد گرفتن به معنای بررسی چند مثال سایت CodeProject و یا code.msdn.com شده این رو عرض میکنم.
    خود من موقع تدریس با مقایسه EF با NH و یا فریم ورک های دیگه کاستی هایش رو بررسی می کنم ولی باگ با کاستی تفاوت داره.
    میتونیم بیشتر با مسئله شما آشنا شیم و انشالله مشکل رو حل کنیم که خاطره بدی از EF همراه نداشته باشید 🙂

    پاسخ
  11. 11

    محمد

    سلام آقا
    من تازه با سایت شما آشنا شدم .خیلی هم خوشم آمد . از اینکه به سوالات هم با دقت جواب می دید خیلی خوشم اومد.
    الام یه چند وقتی هست که یه سوالی دارم و تو هر جا هم که شده سر زدم چیز زیادی دستتم نیومد.
    حالا سئالم اینه که فرق بین DLL و Com+ چیست ؟؟؟ از لحاظ تئوری می دونم این چیه و اون به چه دردی می خوره یه سمپل می خواستم که خودم یه سرویس کام تولید کنم و برم تو Componet های ویندوز بیبنم که ساخته شده است یا.
    بعدش هم من اینو نمی فهمم که وقتی می گن Com رابط شی هست و می تونه مثلا یه کلاس رو ارسال کنه یعنی چه؟؟؟ با DLL هم می شه یه تابعی نوشت که ورودیش مثلا یه DataTable باشه و خروجیش هم یه DataRow و غیره
    خیلی ممنون می شم که راهنمایی کنید.
    اومیدوارم که سوالمو فهمیده باشی و در ضمن سوالم چیپ نباشه.

    پاسخ
  12. 12

    Amin Mesbahi

    سلام
    ۱: از حسن نظرتون سپاسگزارم، امیدوارم مفید واقع بشه.
    ۲: فرق DLL و +COM: مقایسه این دو شاید خیلی خوب نباشه، بنابراین بهتره COM و +COM رو بررسی کنیم: COM قابلیتی است که میشه به وسیله اون قابلیت هایی رو برای نرم افزارهای دیگه به اشتراک گذاشت، مثال: شما زمان زیادی صرف میکنید و محاسبات مربوط به مقاومت یک سازه رو برای مهندسین عمران کدنویسی میکنید {مجموعه ای از توابعی که کارهای محاسباتی رو انجام می دهند} این مجموعه دستورات رو در قالب یک فایل DLL ولی با تکنولوژی COM {فایل DLL برای تکنولوژی غیر COM نظیر NET. نیز قابل استفاده است} به یک شرکت ارائه میکنید، شرکت بر اساس توابع موجود در DLL شما رابط کاربری مینویسه و نرم افزار جدید از طریق UI خودش اطلاعات رو از کاربر میگیره و به DLL شما پاس میده و جوابش رو به صورت گرافیکی نمایش میده. به وسیله COM شما قادرید تا حتی تحت شبکه (نرم افزار روی کامپیوتر الف و DLL شما روی کامپیوتر ب) کار کند.
    +COM: مکمل امکانات COM در کنار Microsoft Transact Server است! یعنی چی؟ یعنی اینکه: شما علاوه بر امکانات COM قادرید تا تراکنش (transaction) هایی رو به اجرا در بیارید که روی چندین دیتابیس سرور که روی چند ماشین مجزا قرار گرفته اند. یا اینکه نرم افزارهایی بنویسید که در صورت قطع شدن ارتباط بتوانند به کارشون به صورت آفلاین ادامه بدهند و به وسیله MSMQ درخواست ها رو یه جا صف کنند تا بغد از برقراری مجدد ارتباط ارسالشون کنند.
    مثال مفید: http://www.codeproject.com/Articles/3845/Creating-COM-Objects-using-EnterpriseServices-in-N

    پاسخ
  13. 13

    محمد

    با سلام دوباره و تشکر فراوان از اینکه جواب سوالمو دادید.
    امین جان من تا ایجاشو فهمیدم که من مثلا یه کتابخانه محاسبات پیچیده ریاضی (مثلا محاسبه ریشه انم یه عدد ، رادیکال یه عدد به پایه و مبنای ورودی از کاربر و غیره . . ) و این DLL رو می دیم به هر بنی بشری تا حالشو ببره .من تا اینجا فهمیدم ! ولی این کجاش از تکنولوژی COM استفاده می شه.؟؟؟؟!!!
    بعد جایی خوندم که Com , تکنولوژی است برای فراهم کردن رابط برنامه نویسی شی گرا ، و مستقل از زبان در سیستم عامل ویندوز تا از این طریق بخش های مختلف برنامه ها ، یا خود برنامه ها با هم بتونن ارتباط برقرار کنند.
    همچنین اینکه DLL قادر به ردوبدل کردن اشیا نیست ولی COM می تونه رابط برنامه نویسی شی گرا ارائه کنه.
    ممنون می شم اگر توضیح کاملتری بدی.

    پاسخ
  14. 14

    Amin Mesbahi

    شما اگر طبق مستندات مربوط به COM کد مربوط به DLL تون رو تولید کنید میتونید DLL تولید شده توسط ++C را در اختیار یک دات نت کار یا یک دفی نویس بگذارید.
    ماجرای آبجکت هم اینه که شما داخل زبان شی گرایی مثل #C میتونید آبجکتی رو new کنید که کدش داخل یک DLL از نوع COM می باشد.

    پاسخ
  15. 15

    محمد بخشی

    با سلام خدمت شما
    من از مطالبی که گذاشتید خیلی متشکرم
    اما من یه سوال داشتم
    من قبلا از ویژوال بیسیک شش استفاده میکردم حالا میخوام سوییچ کنم به سی شار پ یا وی بی دات نت
    اما موندم کدوم یکی رو برم و مساله مهمتر کار با بانک اطلاعاتی هستش من از اول کار اومدم سراغ EF اما چون راههای مختلف کار با بانک اطلاعاتی هستش عدای دارن میگن که سراغ این مدل نرو که بدرد نمیخوره حالا من سراغ کدوم زبان برنامه نویسی و کدوم مدل برنامه نویسی بانک اطلاعاتی برم
    با تشکر از مطالبتون

    پاسخ
  16. 16

    نگین

    سلام. با تشکر از وبلاگ خوبتون…من طی بررسیهایی که داشتم نهایتا به این نتیجه رسیدم که برای انجام عملیات روی حجم زیاد دیتا استفاده از orm ی مثل EF خوب نیست و هیچی بهتر از ADO.net و صدا زدن خود SP ها نمیشه…شما موافقین؟
    ممنون

    پاسخ
  17. 17

    Amin Mesbahi

    البته بستگی به شیوه ی بهره گیری از ORM داره، شما میتوانید SP هاتون رو از داخل ORM صدا بزنید.
    ولی درکل صحبت شما صحیح است، ORM ها هم مراحل بیشتری رو طی میکنند هم اینکه خودشون از ابزار های داخل ADO.NET استفاده میکنند.
    یک موازنه بین تسهیل و تسریع توسعه و کارآیی باید برقرار بشه. مثال: در راهکارهایی که سرعت خیلی زیاد لازمه و مدل ها ساده هستند (مانند سوییچ پرداخت بانک) عمومن از ORM فرار میکنیم…

    پاسخ
  18. 18

    کامران سادین

    سلام دوست من.
    دوست عزیز سوالی بود که خیلی وقته ذهنم رو مشغول کرده و به دلیل مشغله زیاد نتونستم تحقیق کنم.
    جسارتا بنده هم EF رو بیشتر دوست دارم خوب قطعا برای بنده که تخصص کاملی ندارم به خاطر راحت تر بودن کد نویسیش هست اما همیشه برام سوال بوده که مثلا دستورات EF رو که مینویسیم در انتها باید به SQL تبدیل بشن پس یک مرحله بیشتر از SQL داره کار انجام میده در این صورت سرعت SQL نباید بیشتر باشه؟
    ساده تر بپرسم فکر کنم بهتر باشه، مثلا من میخوام رکوردهای یک جدول رو واکشی کنم.
    وقتی از ADO.NET استفاده میکنم مستقیم کوئری خودم رو مینویسم و روی دیتابیسم اجرا میشه و نتایج رو میبینم
    حالا اگر با EF بنویسیم اول کوئریی که نوشتم باید به کوئری SQL تبدیل بشه بعد روی SLQ Server اجرا بشه و نتایج رو ببینم
    در این صورت سرعت ADO.NET بیشتر نمیشه؟

    پاسخ
  19. 19

    تارا

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

    پاسخ

پاسخ دهید

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

© استفاده از مطالب همراه با ذکر منبع نشان امانت داری شماست.