PDA

نسخه کامل مشاهده نسخه کامل : برنامه نويسی چند لايه با وی بی نت



Ultimator
04-01-2008, 16:23
چه توری ميشه با وی بی نت لايه DAL ساخته شده رو استفاده کرد ؟
با سی شارپ ميتونم بنويسم ولی الان با وی بی نت لازم دارم شديداً

_H2_
05-01-2008, 09:58
سلام
یعنی چی؟؟؟؟؟
با #C میتونید با VB نمیتونید؟؟؟؟ مگه فرقی داره؟؟؟؟؟؟ در هر دومورد کاملاً یکسان است و اصولاً برنامه نویسی چند لایه ربطی به زبان دارد که حتی بگویم با php میتوانم با delphi نمیتوانم !!!!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟

مثل این است که بگوییم با delphi میتوانم برنامه بنویسیم ولی با java نمیتوانم!!!!!!!! (نتیجه اخلاقی آنکه پس java بلد نیستید)

اصلاً برنامه نویسی چند لایه هیچ کدخاص یا کلمه کلیدی خاصی ندارد که بگوییم این را استفاده کن تا سه لایه شود .....

یک استاندارد کد نویسی است و بیان میکند که کدهایی که برای ارتباط با هسته بانک اطلاعاتی استفاده میشوند در یک بخش کاملاً مجزا و واحد مجتمع شوند و کدهای کار را با UI هم همینطور و یک سری کد کاملاً مجزا هم این دو را به هم وصل کند......

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

اغلب برای شفاف سازی بیشتر هر لایه را در یک dll یا exe مجزا جا میدهند....

یک چیزی مثل این است که بگوییم نامگذاری متغییر های Integer را برای فهم بیشتر با int یا i شروع کنیم (intTotal یا iSum و....) و اصلاً معنا ندارد که بگوییم در یک زبان میشود و در زبان دیگر نه؟؟؟؟ یک جور توصیه مفید است.

Ultimator
05-01-2008, 14:33
خدمته مهنس h2 جون ارز کنم که من مفهوم برنامه نويسی چند لايه رو مشکل نداشتم که زحمت کشيدين توضيح دادين من منظورم اينه که ميتونم لايه رو با کلاس های وی بی ايجادکنم اينش زياد فرق نداره ولی تو وی بی مثل سی شارپ کلاس ها رو استفاده نميکنن و کاملاً یکسان نیست نحوه ی استفاده ی کلاس تو دو تا زبون فرق داره که من نتونستم تو وی بی به همون صورت که تو سی شارپ استفاده کردم به کار ببرم ،
در ضمن مثال های بی ربطی که زدين نشون ميداد من نتونستم منظورم رو بفهمونم و شما اصلا متوجه سوال نشدين
درسته من استفاده ی کلاس هايی که ايجاد کردم رو تو وی بی بلد نيستم که پرسيدم
سوال اينه که اصلاً چطور ميشه کلاس هاي ايجاد شده در وی بی رو تو برنامه استفاده کردبرنامه اي که نوشتم رو به زودی ميزارم تا راحت تر کمک کنيد

Ultimator
05-01-2008, 14:40
مثلا تو سی شارپ اين کارو ميکنيم
اين کد کلاس لايه DAL

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



اينم استفادش تو لايه BLL


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اينم استفادش تو برنامه یعنی لایه UI



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید




حالا تو وی بی چيکارش ميکنن ؟
به VB تبديل کردم کار نکرد يعنی تو کلاس هاش مشکل نبود تو UI مشکل داشت

Ultimator
05-01-2008, 15:05
اينم از وی بی
DAL

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


BLL

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


UI

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همینه ؟
جا هايی که Bold شده مشکل داره
user manager رو نمیشناسه
حالا منظورم رو متوجه شدید استاد ؟!!

_H2_
07-01-2008, 10:25
سلام مجدد
با عرض پوزش چیزی که من از پست اول برداشت کردم، مشکل در فهم برنامه نویسی سه لایه بوده که به نظر میرسد شما در این مورد مشکلی ندارید.
در کل عضرخواهی میکنم.


کدهای شما در ظاهر هیچ مشکلی ندارند... !؟!؟
شاید مشکل در Refrence کردن ها باشه!؟
مثلاً لایه BLL را کجا تعریف کرده اید؟ در یک DLL دیگر؟؟؟ Refrence را حذف و مجدداً اضافه کنید !؟!؟

اگر هر لایه را در یک اسمبلی (exe یا dll دات نتی) جا داده اید حتماً همه را در قالب یک Solution واحد مجتمع کنید و با کمک property پروژه ها Refrence ها را به هم حذف کرده و مجدداً Refrence را اضافه کنید و در پنجره Add Refrence که به همین منظور نشان داده خواهد شد حتماً از تب Projects استفاده کنید تا حالت دینامیک داشته باشید و بتوانید به راحتی دیباگ کنید و با تغییر کد و کامپایل مجدد مشکلی پیش نیاید.

برای اطمینان بیشتر من خودم کدهای شما را در VS وارد کردم و بجز Login1 که در کد من تعریف شده نبود مشکل دیگری ندیدم، مشکل شما حتماً باید از refrence ها باشد.

ضمناً ربطی به بحث جاری ندارد ولی چه در نمونه #C و VB بهتر است برای com و cmd و dr از Using استفاده کنید و نیز در کد اولیه که صرف وجود سطر در بانک برای اعتبار سنجی شما کفایت میکند بهتر است به جای برگرداندن سطر از (*)COUNT استفاده کنید.
مثلاً کد زیر

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته دوستانی که چندان با سه لایه نویسی کار نکرده اند زیاد متعجب نشوند، در یک پروژه بزرگ و کامل این لایه مسئولیت بیشتری خواهد داشت ! و این لایه موجب ایزوله شدن دولایه دیگر از هم میشود و تا تغییر در یکی موجب تغییر در دیگری نشود و....



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


اگر باز هم مشکل مذکور ادامه یافت بگویید تا همین مثال خودتان را به صورت اماده تر و در قالب یک Solution واحد بفرستم.


ضمناً من استاد نیستم .
جمیعاً موفق و پیروز و سربلند باشید.

Ultimator
08-01-2008, 16:29
نمی دونم چرا به فکر خودم نرسیده بود ! solution رو دو باره ایجاد کردم مشکل حل شد !
کدهای لایه هم بصورت فایل VB تو َapp_code ایجاد کردم
:21:
در ضمن مزیت استفاده از Using نسبت به روش خودم رو میشه توضیح بدی

از راهنماییت هم ممنونم

_H2_
09-01-2008, 10:11
سلام
خوشحالم که مشکلتان حل شد.
در مورد Using شما فرض کنید در همین کد جاری در خط ExecuteScalar خطایی پیش آمد و به هزار دلیل مختلف دستور شما در سرور اجرا نشد در کد اولی شما با پیش امدن این وضعیت کدهای Close دیگر اجرا نخواهد شد و Connection باز خواهد ماند، البته میتوان به خود دات نت اعتماد کرد و قضیه را پای خودش گذاشت ولی End Using (یا معادل { اش در #C) با تضمین صددرصد ودر هر شرایط اجرا خواهد شد و شی مورد نظر را نابود خواهد کرد، حتی وقتی من در بدنه و وسط کد دستور Return دادم که به ظاهر نباید کدهای زیرین دیگر اجرا شوند....
یعنی هیچ پیشامدی نمیتواند از End Using و نابودی شی مورد نظر جلوگیری کند.

و نیز End Using از Dispose استفاده میکند که در مورد جاری نه فقط Close را انجام میدهد بلکه شی را هم برای نابود سازی تحویل garbage میدهد.

برای توضیح بیشتر به تاپیک زیر مراجعه کنید

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


موفق و پیروز و سربلند باشید.

Ultimator
10-01-2008, 16:07
از راهنماييتون خيلی خيلی ممنونم مقاله اي که معرفی کردين هم عالی و بسيار مفيد بود