PDA

View Full Version : برنامه ای با 10 کلاینت و یک سرور (فوری)



rahele_sa
پنج شنبه 25 خرداد 1385, 19:05 عصر
برنامه ای با 10 کلاینت و یک سرور بهم سفارش شده

دارم شاخ در میارم

نمی دانم از چی استفاده کنم که خوب باشه
نمی دانم از چه بانکی استفاده کنم که خوب باشه و بتونه تا حدود 10000 رکورد که حداکثرش است
را جواب بده

کمک کنید

Ahmad Chehreghani
پنج شنبه 25 خرداد 1385, 21:04 عصر
خوب معلومه از Sql server استفاده کن
من دارم ازش استفاده می کنم

rahele_sa
پنج شنبه 25 خرداد 1385, 21:35 عصر
من قیمت هم دستم نیست

برنامه Client و Server که قرار است در یک هفته بنویسم چقدر بگیرم

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

تا فردا باید قیمت را بدهم

به نظر شما چقدر قیمت را بدم

نمی دونم ارزش کارم چقدر است

کمک کنید

rahele_sa
پنج شنبه 25 خرداد 1385, 21:50 عصر
برنامه Client و Server من قیمت هم دستم نیست

برنامه Client و Server که قرار است در یک هفته بنویسم چقدر بگیرم

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

تا فردا باید قیمت را بدهم

به نظر شما چقدر قیمت را بدم

نمی دونم ارزش کارم چقدر است

کمک کنیدکه قرار است در یک هفته بنویسم چقدر بگیرم ؟

majid_afra222
پنج شنبه 25 خرداد 1385, 22:11 عصر
سلام
به Table و یه هفته بودن ربط نداره به میزان مهارت و دانش فنی شما و هزار چیزه دیگه هم ربط داره، اونها رو هم بگو.

rahele_sa
پنج شنبه 25 خرداد 1385, 22:22 عصر
اولین پروژه ای است که در قبالش دارم پول میگییرم

خواهشن یک قیمتی حدودی بگید

من تا فردا صبح وقت دارم

joker
پنج شنبه 25 خرداد 1385, 22:25 عصر
جزئیات پروژه را دقیقتر بگو .... ( برنامه نویسی خمره رنگرزی که نیست :چشمک: )
اما به طور کلی اگه بخوایم حساب کنیم ... و کار را راحت کنیم و پردازش خطایی هم نداشته باشیم و ... ( نهایت یه برنامه ساده ) اینطوری میشه:
2تا ماژول سوکت ( یه کم راحتتر 2تا UDP
2تا ماژول Stram
4 خط برنامه پردازش متن ورودی و ریختن توی جدولها یا خوندن از تیبل ها و ارسال به سمت سرور یا کلاینت ( مشخص نکردی هم برنامه دقیقا قرار چیکار کنه )
حالا ممکنه بخوای دست کاربر را هم باز بزاری برای تنظیم IP ( اینم خودش یه تیکه جدا میشه که با ini ها کار کنی )
بعد میره سراغ پردازش خطاهای احتمالی موقع کار که .... خب کار میبره باید حساب کنی کاربر چه اشتباهاتی ممکنه داشته باشه جلوشو بگیری و به موقع پیغام مربوطه را بدی
سمت سرور را هم حتالمکان دقیق بنویسی که مبادا سرور به خاطر به ارور معمولی از کار بیفته
ممکنه بخوای مولتی ترود بنویسی برای پردازش همزمان کارکرد چند تا کاربر با جدول
ممکنه ....
خلاصه دقیقتر بگو....
اینایی که گفتم اگه قرار باشه من انجام بدم بیس قیمت 350 الی 400 میدم..... و ما بقی قیمت بسته به دونستن کاربرد های دیگه برنامه هست ....
استثنا شما چون پروژه اولته ارزونتر هم دادی طوری نیست ( اما اگه جا داره و اوضاع مشتریت مناسبه قیمت پائین نده )


بر اساس مقدار کاری که انجام میدی باید پول بگیری... ( هیچ وقت هم کم نگیر :) هم به ضرر خودته هم دیگر همکاران برنامه نویست )

( به استثناء برنامه هایی که ممکنه 3 خط بنویسی ولی کسی دیگه بلد نباشه که قیمتش دست خودته+ موجودی جیب اون بنده خدایی که گیر کرده :لبخند: )

پیوست : این چه پروژه ای که جمعه باید تکلیفشو معلوم کنی ;)

rahele_sa
پنج شنبه 25 خرداد 1385, 22:28 عصر
حالا یک قیمیت شما بگید حدودا

ببین

من فردا صبح باید برم جواب بدم

تا 5 دقیقه دیگه هم Dc میشم

soroush_vs
پنج شنبه 25 خرداد 1385, 22:42 عصر
به نظر من 300000 بگیر!
ولی اگه بخای با Multi tier کار کنی حتی قیمت بالای 300000 تومان هست!
ولی اگه بخوای مشتری نپره باید تا 200000 پایین بیای!

soroush_vs
پنج شنبه 25 خرداد 1385, 23:12 عصر
چون 10کاربر دارید پس بهترین کار استفاده از Multi tierهست نه ADO,BDEبتنهایی
و بانک SQL SERVER
ببین اگه طرف فقیره قیمترو بزن 200000 اگه نه بزن 400000 چون به ایندازه 400000 کار داره
توجه قیمتها به تومان است نه به دلار!!!

ghabil
پنج شنبه 25 خرداد 1385, 23:46 عصر
مشکل اصلی اینه که فقط نباید پول برنامه رو حساب کنی ، باید ببینی چقدر مجبور میشی برای پشتیبانیش وقت بزاری ، بخصوص اوایل برنامه نویسی آدم مجبور میشه بیشتر برای برنامه هایی که مینویسه وقت پشتیبانی بزاره .... از طرفی معمولا اینه که یارو وقتی ویندوزش هم خراب بشه بهت زنگ میزنه برنامم کار نمیکنه پاشو بیا، باید نگاه کنی ببینی طرف چقدر پتانسیل اذیت کردن داره ... بعدش هم کم پیش میاد کسی برای یک Table برنامه بخوای اونم کلاینت سرور ، اونم 10 تا کلاینت مطمئن باش تو کار که بری کلی چیز دیگه اضافه میکنه .
از همه اینا که بگذری برنامه با Midas نوشتن توی یک هفته یکمی عجیب قریبه ، واقعا میخوای چند لایه بنویسی یا اینکه منظورت فقط اینه که برنامه از روی چندتا کلاینت مختلف ران بشه ؟
نهایتا بنظر من این عددهایی که دوستان گفتن برای جایی که 10 تا Station داره و واقعا چند لایه هستش خیلی کمه . ولی بازهم اگر تجربه اولته و اصلا نمیخوای از دست بدی ببین تا چقدر تیغت میبره .

ghabil
پنج شنبه 25 خرداد 1385, 23:53 عصر
چون 10کاربر دارید پس بهترین کار استفاده از Multi tierهست نه ADO,BDEبتنهایی

دقیقا چرا ؟!

vcldeveloper
جمعه 26 خرداد 1385, 05:42 صبح
اگر هنوز نمی دونید از چی و چطور استفاده کنید، بهتر هست که اصلا پروژه را قبول نکنید و بجاش مطالعات خودتون در این زمینه را افزایش بدید تا انشاء الله در پروژه های بعدی که بهتون پیشنهاد میشه با آمادگی کامل کار را شروع کنید.

موفق باشید.

soroush_vs
جمعه 26 خرداد 1385, 07:30 صبح
دقیقا چرا ؟!
به نظر من وقتی قراره برای 10 کاربر برنامه ای نوشته بشه بهتره گزینه ای انتخاب بشه که انعطاف پذیرتره!
همون طور که میدونید!
Multi tier بصورت غیره مستقیم روی جداول کار میکنه و این باعث میشه که حتی زمان به اتمام رسوندن پروژه کم بشه از طریق میانبر هایی که در اختیارمون قرار میده ! مثلا بدون استفاده از SQL های پیشرفته با چند متد ساده میتوان اعمال مختلف رو انجام داد!

چون برنامه به شکل Client Server سفارش داده شده به نظر من استفاده ار Multi tier هست!

با وجود Multi tier برنامه روی وب هم قابل اجرا است!
با وجود Multi tier شما به سادگی میتونید بانک اطلاعاتیتون رو یا ساختار اون رو عوض کنید
عوض کنید با این کار تنها با ید یه تغییرات جزیی در server بدید و اصلا لازم نیست در Client تغییر ایجاد کنید!
Multi tier عملیات Multi threading رو با انتخاب درست تنظیمات RDM به بهترین شکل انجام میده!
بنابراین نه نتها برای 10 کاربر اگر دو کاربر هم در شبکه باشند بازهم به نظر من استفاده از Multi tier عاقلانه است!

مواردی که در بالا گفته شد همانطور که میدونید تنها مختصری از مزایای برنامه های چند ردیفه است!

soroush_vs
جمعه 26 خرداد 1385, 07:36 صبح
استفاده از Multi tier البته اگر بتونی از میانبر ها و امکانات خارق العادش استفاده کنی باعث میشه که بتونی پروژه رو خیلی سریع تحویل بدی ! مثلا به خاطر غیر مستقیم بودنش دیگه لازم نیست از String grid استفده کنید با DBGrid به راحتی میتونید پروژه را پیش ببرید و ده ها امکانات دیگر!

ghabil
جمعه 26 خرداد 1385, 12:20 عصر
Multi tier بصورت غیره مستقیم روی جداول کار میکنه و این باعث میشه که حتی زمان به اتمام رسوندن پروژه کم بشه از طریق میانبر هایی که در اختیارمون قرار میده !

میشه اینو بیشتر توضیح بدی ؟! سالهاست که من با Midas کلر میکنم و هیچ وقت یادم نمیاد زمان برنامه نویسی رو کم کرده باشه !! جدای از سختیهای زیادی که داره مثل Exception Handeling یا Debug سرور یا رعایت ThreadSafe بودن برنامه که هرکدوم سرعت انجام پروژه رو تا حد زیادی کند میکنه ، نوشتن یک لایه اضافی خودش هم کلی اضافه تر وقت برنامه نویس رو میگیره .
دوست عزیر استفاده از برنامه نویسی چند لایه مزیتهایی داره که یکیشون و شاید مهمترینشون Extendable کردن برنامه هست که خودت کم و بیش بهش اشاره کردی ، اما مهمترین عیبش که همه جا به کرات گفته شده هزینه بالای برنامه نویسیش هست و به هیچ وجه برای برنامه های کوچک پیشنهاد نمیشه ...



مثلا بدون استفاده از SQL های پیشرفته با چند متد ساده میتوان اعمال مختلف رو انجام داد!


من هیچ وقت همچین چیزی نشنیده بودم میشه بیشتر توضیح بدی ما هم استفاده کنیم ؟!



چون برنامه به شکل Client Server سفارش داده شده به نظر من استفاده ار Multi tier هست!


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



با وجود Multi tier برنامه روی وب هم قابل اجرا است!
با وجود Multi tier شما به سادگی میتونید بانک اطلاعاتیتون رو یا ساختار اون رو عوض کنید
عوض کنید با این کار تنها با ید یه تغییرات جزیی در server بدید و اصلا لازم نیست در Client تغییر ایجاد کنید!


مثلا اگر بک فیلد در دیتابیس اضافه کنیم یا کم کنیم لازم نیست در برنامه کلاینت ، در گرید این فیلد رو اضافه کنیم یا در ClientDataSet اضافه کنیم ؟ اتفاقا هم باید در کلاینت تغییر بدیم هم در سرور ، دوست عزیز چیزهایی که در مورد Extendableبودن برنامه نویسی چند لایه شنیدید و خواندید را با دیدی به مراتب Enterpriseتر باید نگاه کنید برای همین میگم در سطح پروژه های کوچک اصلا مناسب نیست .



Multi tier عملیات Multi threading رو با انتخاب درست تنظیمات RDM به بهترین شکل انجام میده!
بنابراین نه نتها برای 10 کاربر اگر دو کاربر هم در شبکه باشند بازهم به نظر من استفاده از Multi tier عاقلانه است!


شما تا بحال برنامه Multithread دیباگ کردی؟



مواردی که در بالا گفته شد همانطور که میدونید تنها مختصری از مزایای برنامه های چند ردیفه است!


درسته فقط یکیشون بود ، بقیش بیشتر معایبش بود :چشمک:

soroush_vs
جمعه 26 خرداد 1385, 19:46 عصر
اتفاقا من هم با مواردی که شما به اونها مشکل اطلاق میکنید مواجه شدم ولی با چند روز تجربه کسب کردن از جنبه های مختلف اون حاضزم بگم تمام مشکلات رو مرتفع کردم

1)Exception Handeling :که TClientDataSet یه کلاس پرقدرت برای این کار قرار داده به سادگی میتونید اعمال Exception Handeling رو انجام داد(TReconcileAction)

2) ThreadSafe: که اوایل با بی تجربگی خودم در این مورد با مشکلات زیادی روبرو میشدم یه دفعه برنامه در یه وضعیت گیج مثل حالتی که برنامه قفل میشه قرار میگرفت. استفاده از Semaphore ها یا Mutex یا بخش های بحرانی و... میشد این موارد رو حل کرد اما اینها مسئله رو مشکل میکرد راه حل این بود که معماری طراحی RMD رو عوض کنیم و به حالت موازی تبدیل کنیم
بنابر این مدیریت Thread ها به Engine دیتابیس مربوطه موکول میشود. به همین راحتی!
Debug کردن سرور باوجود مدیریت صحیح معماری DCOM دقیقا مانند برنامه های معمولی تک کاربره است البته اگه معماری موازی استفاده بشه!

3)DCom که کابران دلفی 6 به اون Midas اطلاق میکنند نتنها سرعت پیاده سازی و اجرای پروژه و برنامه رو کاهش نمیده بلکه تنها سرعت زمانی که 48 کلاینت به سرور متصل میشه (تنها در صورتیکه در سرور از BDE استفاده کنیم محدودیت تعداد کاربر ایجاد میکند) تا حدی سرعت رو دست خوش تغییر کنه ! ماکروسافت این تکنولوژی گران قیمت رو که بسیاری از سازمانهای بزرگ و کوچک از اون استفاده میکنند برای راحتی همه ایجاد کرد! بورلند هم از Delphi 5 اون رو در Delphi قرار داد که حتی کلاس های پایه ای اون در Delphi2 نیز وجود داشت (منبع توسعه گر دلفی 6)
برای همین هست که خیلی از شرکتها چندید هزار دلار برای خرید Delphi Enterprise Edition هزینه میکنند که ما اون رو با 500 تومان رایت سیدی میخریم!!!

4)نوشتن لایه سرور : لایه سرور اصلا احتیاجی به نوشتن نداره عمده کاررو Wizard های Delphi انجام میدن تنها کاری که باید انجام بشه قرار دادن Component های مربوط به Database هست
سرور یه برنامه کوچک است که اگه از سوکیت هت استفاده بشه تنها Borland Socket Server با اون همراه میشه(scktsrvr.exe)
شاید به نظر بیاد که برنامه های DCom سخت نصب میشن (با وجود این همه EXE اما با دو نصب یکی برای server دیگری برای Client که خیلی ساده اند میشه اتوماسیون رو به اتمام رسوند)

5)در شیراز (محل زندگی من) برنامه ای توسط یکی از شرکت ها نوشته شده که برنامه حسابداری قابل قبولی هست و تنها 70000 تومان قیمت داره و با DCOM نوشته شده) هزینه بالا نیست البته نسبت به Performance , قابلیت ها.

6) البته اینکه در مورد تسهیلاتی که TClientDataSet و بخصوص در برنامه های DCOM به توسعه گر داده شده ، چیزی نشنیده اید تعجب آور نیست ! چون تبلیغات به سود ADO است! اما میشه از تمام قابلیت های ADO استفاده کرد و از اون در server قرار داد یعنی از تمام بشتر تکنولوژی ها با یه مدریت کارآمد ایتفاده کرد ! این مدیریت را Delphi در اختیار ما قرار داده!

7)یه مثال که نشون میده چقدر TCLient Dataset در برنامه های MUlti Tier در کاهش کد نویسی SQL موثر است اینه که تنها با یه ApplyUpdate میتونیم متد های UPDATE INSERT DELETE رو حتی با هم انجام داد با یه متد کوچک ClientDataSet1.ApplyUpdates
این خارق العاده نیست یعنی TClientDataSet با Cache کردن تغییرات به طور غیر مستقیم با دیتابیس ارتباط برقرار میکنه (از طریق خصوصیت Delta )
مدیریت تغییرات با متد هایی نظیر UndoLastChange , CancelUpdates یکی دیگر از اون مزایا است که پیاده سازی اون در برنامه های سنتی کلاینت سرور بسیار وقت گیرو پرهزینه است نه در
Multi iter!!!

8) : آقای ghabil کاملا درسته برنامه نویسانی که اطلاع دقیقی ندارند تا یه اسم عجیب غریب مثل DCOM میشنوند زود خودشونو میبازند و این از کم تجربگی اونها است!
درسته که تعریف پروژه بشیار در قیمت گذاری مهمه ولی یه قیمت اولیه بر اساس هزینه های ثابت
طبق اصول حسابداری هزینه ، کار معقول در یه زمان کوتاه است!

9)اگر توسعه گر بدونه داره چکار میکنه اصلا لازم نیست با تغییر حتی یه فیلد تغییر کوچکی در در کلاینت ایجاد کنه .در شاید بیشتر از 90 درصد مواقع اصلا لازم نسیت در ClientDataset فیلد هارو تعیرف کنید تنها این کار در Server کافی است. تازه خیلی از متد های ساده رو هم میشه به سرور موکول کرد

10) یه نکته : توسعه DCOM تنها زمانی که داری اون رو یاد میگیری وقت گیره.

11) احتمالا دیباگ برنامه های Multithreaded مختص برنامه نویسان حرفه ای مثل شما است
با تغییر معماری Multi-tier میشه عملیات مدیریت THread ها رو بدون در گیر شدن با سمافورهای
سیستم عامل به Engine بانک اطلاعاتی موکول کرد(البته اگه واقعا نخوای خودت این کار پر زحمت رو انجام بدی)

12)بهتره با مطالعه معایب DCOM رو بگید تا راه حلشرو از زبان نویسندگان دلفی مثل استیو تیشیرا توسعه گر Delphi , C++Builder به شما بگم!!

13)تنها ایراد DCOM که باعث شد که Java بیاد و در برنامه های Multi tier بجای انتقالInfomation ، کد رو انتقال بده افزایش کارایی بسیار نامحسوس اون بود!

آقای کوشا از بحث جالبتون متشکرم!!

rahele_sa
یک شنبه 11 تیر 1385, 21:30 عصر
سلام

دوستان چرا خودتون را در نوشتن برنامهای Client و Server اذیت میکنید . چرا تازه کارها و کمی حرفه ای ها هم از این نامها و این پروژه ها کمی میترسند .

میخواهم یک روش کلی و بسیار راحت و کارآمد به شما معرفی کنم (که همتون دیگه از این به بعد احتیاجی به مطالعه های زیاد و تجربه های بسیار در ساختن این برنامه ها نداشته باشید)

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

تمام شد اینم یک برنامه Client و Server

شاید تعجب کنید ! بله ! همین جوری است من هم پروژه خودم را با همین روش نوشتم

من پوشه برنامه ام را به اشتراک شبکه گذاشتم سپس با 10 تا کامپوتر دیگر آمدم exe برنامه را اجرا کردم .

همشون هم خوب کار کرد بدون ایراد

برنامه هم اصلا خطا نداد زیرا در یک هفته 10.000 نفر از 10 کامپوتر ثبت نام کردند و مشتری هم بسیار رازی بود .


راستی اینم بگم من به بانک فقط با کنترل های ADOConnection1 و ADOTable1 و DataSource1 وصل شدم و از کنترل های پیچیده ClientDataSet1 و دیگر کنترل ها استفاده نکردم


حالا اگر کسی ایرادی در این ضمینه میبینه به من بگه

MZBCracker
یک شنبه 11 تیر 1385, 21:48 عصر
متشکرم.فکر خیلی خوبیه همون طور هم که شما گفتین تست هم شده.ولی این دلیل نمیشه از تکنیکهای دیگه برنامه نویسی غفلت کنیم.راستی آخرش قرار داد رو چقدر بستی؟

ghabil
یک شنبه 11 تیر 1385, 22:38 عصر
دوست عزیز به این روش برنامه نویسی نمیگن برنامه نویسی کلاینت سرور یا چند لایه ، این برنامه نویسی 2 لایه هست بسیار هم برای کاری که شما میخواستین انجام بدین مناسب و کافی بود ، همون چیزی که من میگفتم بیخودی طرف برنامه نویسی چند لایه نرید ....
فعلا فقط به این توضیح اکتفا می کنم که هر برنامه ای که روی شبکه اجرا میشه بهش کلاینت سرور نمیگن برنامه کلاینت سرور حداقل باید یک لایه میانی داشته باشه که پروسسهای اصلی سیستم و منطقها مورد نیاز برنامه اونجا باشند (مثلا روش محاسبه در آمد شرکت اونجا نوشته میشه ) و بعد یک نرم افزار کلاینت که وظیفه اصلیش ارائه رابط کاربری هست می آد از این سرور اطلاعاتت رو درخواست میکنه و میگیره که این کار مزایای زیادی داره .....

انشاا... وقتی که در برنامه نویسی دو لایه (همینی که الان نوشتین) ماهرتر شدین و پروژه های بزرگتر گرفتین و احساس کردین به مزایای برنامه نویسی چند لایه احتیاج دارید اونوقت دنبال برنامه نویسی چند لایه هم میرید و هم از مزایاش مطلع میشید هم سختیهاش رو می بینید .

امیدوارم همینطوری پیشرفت کنید و هیچ وقت به جمع اونایی نپیوندید که وقتی چیزیرو بلد نیستند میگن این در شان من نیست ;) بلکه با همین پیگری سعی کنید تا چیزهای جدید رو هم یاد بگیرید.
----------------------------
اندکی ویرایش
امضاء: mzjahromi
اخطار(قانون شماره 12) (http://www.barnamenevis.org/forum/showthread.php?t=30377)

rahele_sa
دوشنبه 12 تیر 1385, 10:03 صبح
ممنون از راهنمایی های شما دوستان