PDA

View Full Version : سوال: نحوه توزيع برنامه 3 لايه داخل شبكه



na141ali
شنبه 11 آذر 1391, 13:18 عصر
با سلام خدمت اساتيد.
من يك برنامه سه لايه نوشتم كه هر سه لايه آن داخل يك پروژه مي باشد. در نصب برنامه جهت يك كامپيوتر مشكلي ندارم (نصب هر سه لايه براي يك كامپيوتر) اما جهت نصب هر لايه در يك كامپيوتر مجزا نمي دانم كه آيا بايد در كد نويسي تغييري دهم يا فايلهاي DLL لايه هاي Bussiness و Data Access را چگونه در كامپيوترهاي مجزا نصب نمايم.
لطفا مرا راهنمايي فرمائيد. با تشكر

Mani_rf
شنبه 11 آذر 1391, 15:11 عصر
میشه بیشتر توضیح بدی که از چه معماری استفاده کردی؟
ServiceBase کار کردی؟

na141ali
شنبه 11 آذر 1391, 15:26 عصر
منظور از نوع معماري چيست؟
من يك پروژه با سه كلاس مختلف Application Layer و Bussiness Layer و Data access Layer ساختم كه از نظر اصول طراحي معماري سه لايه درست مي باشد.
براي اين پروژه فايل ستاپ ساخته و روي يك كلاينت كه نصب مي كنم كاملاً با پايگاه داده ارتباط برقرار مي كنم و بخوبي كار مي كند .حالا من مي خواهم اين سه لايه را بصورت مجزا روي سرور و كلاينت نصب كنم. (لايه Data access و Bussiness layer را روي سرور و لايه Application را روي كلاينت) اما نميدانم نحوه ارتباط ميان اين سه لايه در شبكه به چه صورت بايد انجام شود.

hakim22
شنبه 11 آذر 1391, 15:33 عصر
شما باید فایل های DLL غیر از فایل اجرایی را در سرور اصلی کپی کنید.
سپس در تنظیمات برنامه ی اصلی ( در سورس) به قست config رفته و آدرس فایل سرور اصلی را به عنوان محل جستجوی reference ها ارائه کنید.

http://msdn.microsoft.com/en-us/library/system.appdomainsetup.privatebinpath.aspx

یا اینکه همه ی DLL ها رو به صورت دستی در هنگام اجرا Load کنید و نه اینکه از منوی VB استفاد کرده و مستقیما با Add reference اینکار انجام بدید.

برای اینکار از فضای نام Assembelies استفاده میشه

na141ali
شنبه 11 آذر 1391, 15:49 عصر
[QUOTE=hakim22;1639174]شما باید فایل های DLL غیر از فایل اجرایی را در سرور اصلی کپی کنید.
سپس در تنظیمات برنامه ی اصلی ( در سورس) به قست config رفته و آدرس فایل سرور اصلی را به عنوان محل جستجوی reference ها ارائه کنید.

اگر بخواهيم برنامه را براي مشتري هاي مختلف بفرستيم بايد يك ستاپ مخصوص كلاينت و يك ستاپ مخصوص سرور داشته باشيم. با توجه به گفته شما براي هر بار نصب بايد آدرس reference ها را در سرور براي هر مشتري جداگانه تنظيم نمائيم كه عملي نيست.

na141ali
شنبه 11 آذر 1391, 15:50 عصر
http://msdn.microsoft.com/en-us/library/system.appdomainsetup.privatebinpath.aspx

یا اینکه همه ی DLL ها رو به صورت دستی در هنگام اجرا Load کنید و نه اینکه از منوی VB استفاد کرده و مستقیما با Add reference اینکار انجام بدید.

برای اینکار از فضای نام Assembelies استفاده میشه[/QUOTE]

براي اين موضوع مي توانيد توضيح بيشتري بفرمائيد.

na141ali
شنبه 11 آذر 1391, 16:27 عصر
توضيح قسمت اول: اگر بخواهيم برنامه را براي مشتري هاي مختلف بفرستيم بايد يك ستاپ مخصوص كلاينت و يك ستاپ مخصوص سرور داشته باشيم. با توجه به گفته شما براي هر بار نصب بايد آدرس reference ها را در سرور براي هر مشتري جداگانه تنظيم نمائيم كه عملي نيست.

در مورد قسمت دوم نيز توضيح بيشتري مي فرمائيد.

Mani_rf
شنبه 11 آذر 1391, 17:23 عصر
دوست عزیز من فکر میکنم شما در درک مفهوم برنامه نویسی چند لایه دچار ابهام شده اید.
مفهوم برنامه نویسی چند لایه این نیست که شما DLL لایه DataAccess را روی سرور دیتابیس کپی کنید و توقع داشته باشید که مابقی کار ها را انجام دهد.
برای انجام کاری که مد نظر دارید و برقراری ارتباط با دیتابیس پیشنهاد میکنم از WCF استفاده کنید.

hakim22
شنبه 11 آذر 1391, 18:17 عصر
به نظر من برنامه نویسی چند لایه یک مفهومه و استفاده از WCF یا هر روش دیگه یک ابزاره.
در یک برنامه ی تحت وب برنامه خود به خود به سه لایه server و client و Data تبدیل میشه و بسته به اینکه ما چه مقدار از کد رو به client میفرستیم لایه ی منطقی ممکنه در هر دو سمت باشه .
http://msdn.microsoft.com/en-us/library/ms973279.aspx

یعنی چون از نظر فیزیکی جدا هستند و نمیشود باهم باشند خود به خود چند لایه میشوند.

در مورد برنامه های غیر وب و تحت شبکه دو لایه حتما وجود داره ، Client و سرور و معمولا همه ی کارهای محاسباتی و منطقی در سمت کاربر اجرا میشه و فقط در سرور نتایج ذخیره میشه .

حالا اگر شما سعی کنید به یک روشی از حجم برنامه ی که سمت کاربر وجود داره کم کنید و به حجم برنامه ای که سمت سرور وجود داره اضافه کنید برنامه شما میتونه چند لایه داشته باشه .

بحث اساسی در چند لایه بودن یک برنامه اینه که ما هر لایه رو یک مسئولیت مجزا بدیم و تلاش کنیم هر لایه فقط با لایه ی قبل و بعد از خودش رابطه داشته باشه و اینطوری نباشه که لایه ی سوم بتونه مستقیما به لایه ی اول متصل بشه (اینترفیس در دیتابیس اطلاعات جدید ثبت کنه) در حقیقت مدل ما شبیه واگن های قطار میشه که و داده باید برای رفتن از اولین واگن به آخرین واگن ، واگن های میانی رو هم طی کنه .

به نظر من سوال دوستمون این بوده که ایشون سه لایه ی مجزا رو ساختن و حالا اگر بخواهند به صورت فیزیکی این جدا سازی رو پیاده کنند چه باید بکنند .
چون در نهایت شما با ساختن هر لایه در حقیقت یک dll جدید میسازید که یک کار مجزا انجام میدهد. اما اگر اینترفیس ، dll میانی و بانک یکجا و درون یک فولدر باشد چه فایده ای دارد !؟

هدف از چند لایه کردن هر چه که باشد با کنار هم ماندن فیزیکی سه لایه بی معنی میشود

Mani_rf
شنبه 11 آذر 1391, 18:58 عصر
استفاده از WCF یا هر روش دیگه یک ابزاره.
بله WCF یک ابزاره که برای این کار مناسب تره.

استفاده برنامه نویسی چند لایه و تقسیم وظایف به هردلیلی بجز جدا کردن فایل های DLL از بودن در یک سیستم است. شما نمی توانید از روی سیستم کلاینت به یک DLL روی سرور رفرنس دهید. عاقلانه هم نیست. یک دلیل خیلی ابتدایی : در این صورت شما ممکن است که هرگز نتوانید آن فایل را آپدیت کنید. خیلی ساده است. اگر چینی چیزی ممکن باشد و شما بخواهید نسخه جدید بگذارید از کجا میدانید که کدام کلاینت ها در حال استفاده از آن فایل هستند و برای تغییر آن باید دسترسی تمامی کلاینت ها را به آن با قطع کردن ارتباط شبکه قطع کنید!

هدف اصلی برنامه نویسی چند لایه تغییر دادن هر لایه به صورت مجزا بدون درگیرشدن کل پروژه است. برای مثال گروهی می توانند برروی لایه UI کار کنند، گروهی برروی Business و 'گروهی روی Data Access بدون اینکه خللی در کار هم ایجاد کنند. با این روش چنانچه شما بخواهید به عنوان مثال قالب برنامه خود را از Windows Application به WPF ببرید دیگر نیازی به کد نویسی ندارید. برای آپدیت کردن برنامه نیازی نیست که یک پک جدید به کاربر بدهید و تغییر دادن یک فایل کافی است. همه اینها کوچکترین کاربرد های برنامه نویسی چند لایه است.
بحثی که وجود دارد مربوط به نحوه برقراری لایه دیتااکسس به دیتابیس است. که من پیشنهاد دادم اگر میخواهید از راه دور به دیتابیس دسترسی پیدا کنید بهتر است از روش های service base استفاده کنید.

این یک نمونه خیلی ساده (http://www.codeproject.com/Articles/36847/Three-Layer-Architecture-in-C-NET) از برنامه نویسی چند لایه است.

na141ali
شنبه 11 آذر 1391, 22:35 عصر
با تشکر از توجه شما دوستان
با توجه به پاسحهایی که داده اید لطفا مرا راهنمایی کنید که آیا برنامه را بصورت wcf پیاده سازی نمایم و یا فقط دیتابیس را بر روی سرور قرار دهم .

na141ali
شنبه 11 آذر 1391, 22:37 عصر
بحثی که وجود دارد مربوط به نحوه برقراری لایه دیتااکسس به دیتابیس است. که من پیشنهاد دادم اگر میخواهید از راه دور به دیتابیس دسترسی پیدا کنید بهتر است از روش های service base استفاده کنید.

این یک نمونه خیلی ساده (http://www.codeproject.com/Articles/36847/Three-Layer-Architecture-in-C-NET) از برنامه نویسی چند لایه است.

منظور از روشهای service base همان wcf می باشد یافقط منظور نصب پایگاه داده در سرور می باشد.

Mani_rf
دوشنبه 13 آذر 1391, 17:23 عصر
میشه لطفا بگی که کلیات کارت چیه؟ سرور دیتابیست کجاست و کلاینتت کجا؟
اینطوری بهتر میشه راهنمایی کرد.


منظور از روشهای service base همان wcf می باشد یافقط منظور نصب پایگاه داده در سرور می باشد.
توضیح ساده سرویس بیس یعنی که شما به جای بازکردن کانکشن مستقیم از طریق سرویس ها با دیتابیس ارتباط برقرار کنی. حالا چه با WCF و چه با WebService و چه با هر روش دیگه.

na141ali
سه شنبه 14 آذر 1391, 16:40 عصر
میشه لطفا بگی که کلیات کارت چیه؟ سرور دیتابیست کجاست و کلاینتت کجا؟
اینطوری بهتر میشه راهنمایی کرد.

آقا من كلي زحمت كشيدم واسه شركت يه برنامه بازرگاني سه لايه نوشتم . حالا تو كامپيوتر خودم كه نصب مي كنم مشكلي نيست اما نمي دونم از چه روشي بايد اون رو شبكه كنم.
وقتي ديتابيس رو روي سرور قرار ميدم فقط كانكشن رو عوض مي كنم و وصل مي شه . ولي اينجوري نمي تونم روي اينكه همزمان كاربرا نتونن يك ركورد رو دستكاري كنن كنترل داشته باشم. از طرفي من مي دونم كه تو لايه bussiness مي شه روي اين قضيه كنترل داشت چون همه يوزر ها بايد از توابع اين لايه براي دسترسي به dataaccess استفاده كنن .
حالا چجوري بايد لايه business و DataAccess رو به سرور انتقال بدم. در ثاني اگه اين كار رو نكنم (نصب هر سه لايه برنامه در كلاينت و قراردادن ديتابيس در سرور) ديگه كلي از مزاياي برنامه سه لايه از بين ميره.
با تشكر