ورود

View Full Version : سوال: برنامه 30 کاربره



naeemeh
پنج شنبه 21 مرداد 1389, 08:23 صبح
سلام ، من یک برنامه باید بنویسم که 30 کاربر دارد و باید به صورتی باشد که اگر اطلاعاتی اضافه یا کم یا ویراش شد تمامی کاربران حتی با باز بودن برنامه آنرا متوجه بشوند ، راهنمایی کنید که از چه ارتباطی ( ADO یا BDE) و به چه صورت این برنامه را انجام بدم که به مشکل نخورم.

حمیدرضاصادقیان
پنج شنبه 21 مرداد 1389, 08:55 صبح
سلام.
شما دو روش توسعه در پیش رو دارید. یکی معماری CLient/Server یکی هم معماری N-Tier.
در معماری Client /Server تمامی کنترلها رو باید روی سرور انجام بدید و شاید دستتون رو مقداری ببنده.
بهتره از معماری N-Tier استفاده کنید.
در این معماری یک لایه میانی طراحی میکنید در این لایه میانی تمامی کنترلهای روی نرم افزار رو انجام میدید و ارتباط بین لایه اینترفیس و بانک اطلاعاتی تون همین لایه میانی هست. که این امکان رو به شما میده حتی کاربران به صورت آفلاین کارکنند و در صورت نیاز اطلاعاتشون رو با سرور یکی کنند.
برای اطلاعات بیشتر میتونید به سایت زیر مراجعه کنید.
ابزار های توسعه معماری N-tier هم یکی در خود دلفی هست که به DataSnap معروفه و یک ابزار قدرتمند دیگه هم به نام Remobjects وجود داره که پیشنهاد میکنم با گزینه دوم شروع به کار کنید.
N-tier (http://www.delphi3000.com/articles/article_3209.asp?SK=)

tdkhakpur
پنج شنبه 21 مرداد 1389, 11:43 صبح
و ارتباط بین لایه اینترفیس و بانک اطلاعاتی تون همین لایه میانی هست. که این امکان رو به شما میده حتی کاربران به صورت آفلاین کارکنند و در صورت نیاز اطلاعاتشون رو با سرور یکی کنند.

یعنی یه دیتابیس مانند sql بنویسیه؟!!!
در مورد متوجه ساختن سایر کاربران بصورت استیشن میشه کاری کرد ولی در مورد اینکه کاربران را متوجه کنه کدام سطر از جدول ویرایش میشه و یا اضافه میشه آن هم بصورت offline راهی جز طراحی یک دیتا بیس بصورت سرور جدا ندارد!

Ropser
پنج شنبه 21 مرداد 1389, 11:54 صبح
یعنی یه دیتابیس مانند sql بنویسیه؟!!!بار سی و پنجمه دارم متن رو می خونم(به اَشکال و با انالیزهای مختلف)، ولی هنوز نتونستم همچین برداشتی بکنم.

در مورد متوجه ساختن سایر کاربران بصورت استیشن میشه کاری کرد ولی در مورد اینکه کاربران را متوجه کنه کدام سطر از جدول ویرایش میشه و یا اضافه میشه آن هم بصورت offline راهی جز طراحی یک دیتا بیس بصورت سرور جدا ندارد! خوب مگه کسی حرفی غیر از این زد؟!

tdkhakpur
پنج شنبه 21 مرداد 1389, 12:04 عصر
بار سی و پنجمه دارم متن رو می خونم(به اَشکال و با انالیزهای مختلف)، ولی هنوز نتونستم همچین برداشتی بکنم.
خوب مگه کسی حرفی غیر از این زد؟!
ندانستم کی هستی ولی یه بار دیگه بخوان تا بشه 36.
ایشان می خواهند وقتی کسی به بانک دسترسی داشت همه کاربران از محل دسترسی اطلاع پیدا کنند.
ولی ایشان مطرح کرده که باید یک اینترفیس بنویسه تا رابط میانی با دیتابیس باشه؟
حالا بگیریم شخص offline شد و به دیتا بیس وصل نیست داده را کجا نگهداری کنه اگر منظور این هست که داخل استیشن خودش شاید کاربران دیگر هم همچین داده ای داشتند اونوقت قضیه میشه ایجاد سروهای لوکال و ارتباط دهی با سرور اصلی و برو تا به آخر قضیه برسی...
برداشتم ار ایجاد دیتابیس این بود که یعنی داخل اینترفیس الگوریتم بررسی دستورات کوئری درج شه!!
هر چمد به موردی اشاره کردند که استفاده ای ازش نکردم ولی به گمانم نتونه همچین مشکلی را به این آسونی و بی دردسر حل کنه.

Ropser
پنج شنبه 21 مرداد 1389, 12:19 عصر
ندانستم کی هستی ولی یه بار دیگه بخوان تا بشه 36.منم ندانستم کی هستی ولی شد 40.

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

tdkhakpur
پنج شنبه 21 مرداد 1389, 12:26 عصر
بذار اگه صحبتی می شه علمی باشه تا منه تازه کار که فرق بین Presentation Layer با Data Layer را نمی دونه این وسط کسب فیضی کنم.
ببین قرار نیست حرفمان را بپیچونیم بحث این وسط OffLine بودن هست حالا کی خواسته Presentation Layer با Data Layer را بدونه؟
من سوال کردم


یعنی یه دیتابیس مانند sql بنویسیه؟!!!

جواب سوال رو ندام که ازم بازخواست میکنی؟

حمیدرضاصادقیان
پنج شنبه 21 مرداد 1389, 18:15 عصر
سلام.دوست عزیز شما وقتی دارید برنامه رو به صورت چند لایه پیاده سازی میکنی اصولش این هست که در لایه میانی که همون لایه Business layer هست کنترل روی دیتای شما اونجا انجام میشه. از ابزارهایی هم در لایه اینترفیس مانند clientdataset استفاده میشه که دیتا رو کش میکنه و به شما اجازه میده به صورت offline کار کنید بعد هنگام بروز رسانی مواردی مانند reconcile error هم برای مدیریت تداخل اطلاعات وجود داره. در لایه میانی نیازی نیست شما یک sql بنویسید.به جای اینکه دستوراتی از قبیل بدست آوردن نتایج، اضافه و اصلاح در لایه اینترفیس نوشته بشه به لایه میانی انتقال پیدا میکنه که در این حالت امنیت دیتا هم تامین میشه.چون قبل از اینکه مستقیما دیتا به دیتابیس ارسال بشه در این لایه صحت اون کنترل میشه .به همین خاطر هست که میتونن حتی به صورت آفلاین هم کار کنند.نرم افزارهای مختلفی هم با این روش کار میکنند.مثلا همکاران سیستم خیلی از سیستمهاش به این صورت باهم فعالیت میکنند.بعد هم در اینجا دیگه مطرح نیست یک کاربر داره اطلاعاتی رو اصلاح یا اضافه میکنه چون عملا داره روی دیتای خودش که در کش وجود داره این تغییرات رو اعمال میکنه.زمانی که دیتا از لایه میانی عبور کرد و در دیتابیس قرار گرفت اون موقع میشه با استفاده از سرویس Notification خود ویندوز به مابقی کاربرانی که به سرور متصل هستند پیغام فرستاد و دیتاشون رو بروز کرد که در Remobjects این قابلیت نیز تعبیه شده.
بازم سوالی بود در خدمتم.
موفق باشید

tdkhakpur
پنج شنبه 21 مرداد 1389, 18:26 عصر
چون قبل از اینکه مستقیما دیتا به دیتابیس ارسال بشه در این لایه صحت اون کنترل میشه

با کدام داده صحت کنترل میشه؟در ضمن این اینترفیس میانی باید کجا استارت بشه استیشن یا سرور؟

Ropser
جمعه 22 مرداد 1389, 00:28 صبح
حالا کی خواسته Presentation Layer با Data Layer را بدونه؟
کسی نخواست بدونه؛ولی کمی اشنایی باهاش برای شما لازمه.:لبخندساده:

حمیدرضاصادقیان
جمعه 22 مرداد 1389, 12:40 عصر
با کدام داده صحت کنترل میشه؟در ضمن این اینترفیس میانی باید کجا استارت بشه استیشن یا سرور؟
سلام.برنامه لایه میانی یک نرم افزار جداگانه هست که هیچ اینترفیسی نداره و به صورت یک سرویس اجرا میشه. در اون لایه شما با دیتابیس ارتباط برقرار میکنید و تمامی کنترل ها روی اون انجام میشه.برنامه کلاینت توسط پروتکلهایی مثل tcp به لایه میانی وصل میشوند با یک ip و پورت خاص و اطلاعات رو ارسال کرده و دریافت میکنند.
این اینترفیس میتونه هم روی کلاینت اجرا بشه هم روی سرور ولی جاهای بزرگ معمولا روی یک سرور جداگانه اونو اجرا میکنند.

tdkhakpur
جمعه 22 مرداد 1389, 13:21 عصر
در اون لایه شما با دیتابیس ارتباط برقرار میکنید و تمامی کنترل ها روی اون انجام میشه

پس این لایه برای خودش دیتابیس خاص داره درسته؟ حالا به فرض 10 کلاینت رکوردی به شماره های مختلف را به اینترفیس فرستاد و اینترفیس هم دریافت و داخل کش خودش یا همان دیتا بیس خودش ثبت کرد اونوقت این اینترفیس هم که احتمالا با سرور اصلی off هست اگر این داده ها داخل سرور اصلی وجود داشته باشند و یا وجود نباشند عکس العملی که سرور باید از خودش نشان بده چی هست؟رد میکنه یا میمونه بعدا که وضعیت سرور on شد نتیجه را به کلاینت ها برگردونه؟به فرض 10 روز دیگه on بشه مشتری باید منتظر نتیجه باشه؟

vcldeveloper
جمعه 22 مرداد 1389, 17:00 عصر
پس این لایه برای خودش دیتابیس خاص داره درسته؟ حالا به فرض 10 کلاینت رکوردی به شماره های مختلف را به اینترفیس فرستاد و اینترفیس هم دریافت و داخل کش خودش یا همان دیتا بیس خودش ثبت کرد اونوقت این اینترفیس هم که احتمالا با سرور اصلی off هست اگر این داده ها داخل سرور اصلی وجود داشته باشند و یا وجود نباشند عکس العملی که سرور باید از خودش نشان بده چی هست؟رد میکنه یا میمونه بعدا که وضعیت سرور on شد نتیجه را به کلاینت ها برگردونه؟به فرض 10 روز دیگه on بشه مشتری باید منتظر نتیجه باشه؟
برای اینکه این بحث رو متوجه بشید، باید با معماری چند لایه (n-tier) آشنا بشید.
دز مثالی که آقایا صادقیان مطرح کردند، اساسا کلاینت ها اتصال مستقیمی به بانک اطلاعاتی ندارند. کلاینت ها فقط یک سرور رو می شناسند، اون هم لایه میانی یا همون (Application Server) هست. اینکه لایه میانی داده ها را از کجا میاره، یا داده هایی که توسط کلاینت هاثبت میشند را چطور مدیریت میکنه، ارتباطی به کلاینت ها نداره. همانطور که وقتی شما از سرویس ایمیل یاهو یا جی میل استفاده می کنید، مرورگر اینترنت شما، یا شما به عنوان کاربر، اطلاعی ندارید که در پشت صحنه، سایت مربوطه به چه سرورهایی متصل میشه، داده های شما را از کدام سرور میگیره، با چه فرمتی میگیره، نوع بانک اطلاعاتی اش چی هست، داده های شما را چطور پردازش میکنه، و غیره. تنها چیزی که برای شما مهم هست، و شما ازش اطلاع دارید، این هست که سایت مربوطه اطلاعات مورد نیاز شما را برای شما فراهم میکنه.

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

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

لازم نیست برای مدیریت تمامی جزئیاتی که توضیح داده شد، خودتان کد بنویسید، بلکه برای نوشتن نرم افزارهای چند لایه فریم ورک های مختلفی در محیطهای برنامه نویسی مختلف وجود دارند، مثلا در دلفی به طور پیش فرض DataSnap وجود داره، و علاوه بر اون کامپوننت های شرکت های مختلف مثل RemObjects SDK + RemObjects DataAbstract، Kmw, Astra و غیره وجود دارند.

tdkhakpur
شنبه 23 مرداد 1389, 00:13 صبح
برای اینکه این بحث رو متوجه بشید، باید با معماری چند لایه (n-tier) آشنا بشید.

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


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


خب اینجا مسئله داده های مشترک هست نه یونیک - شما داخل یاهو و جی میل با همچین اشتراکی مواجه نیستی فقط اونجا اگر قضیه ای در بین باشه قضیه نگهداری داده ها تا on شدن کلاینت یا سرور هست.


لازم نیست برای مدیریت تمامی جزئیاتی که توضیح داده شد، خودتان کد بنویسید، بلکه برای نوشتن نرم افزارهای چند لایه فریم ورک های مختلفی در محیطهای برنامه نویسی مختلف وجود دارند

حالا بگیریم به فرض من همچین مشکلی دارم میشه الگوریتم این مشکل را توضیخ بدید؟

vcldeveloper
شنبه 23 مرداد 1389, 00:44 صبح
هزار نوع اگوریتم برای معماری چند لایه وجود داره و برای هر کدام یه بحث جداست نمیشه صرف دانستن موضوع چند لایه بودن مسئله را حل شده دونست.
دانستن مفاهیم پایه ایی یک موضوع یک چیز هست، و دانستن چگونگی پیاده سازی آن، یک چیز دیگه. چیزی که برای شما توضیح دادم، کلیات یک سیستم 3-لایه مبتنی بر بانک اطلاعاتی بود. این مفهوم ثابت هست، حالا شما ممکنه برای پیاده سازی آن از n روش مختلف استفاده کنید.


حالا بگیریم به فرض من همچین مشکلی دارم میشه الگوریتم این مشکل را توضیخ بدید؟
دقیقا کدوم مشکل، من در پست قبل یک روال کلی از نحوه عملکرد یک سیستم 3-لایه رو توضیح دادم، مشکلتون دقیقا کدوم بخشش هست؟


خب اینجا مسئله داده های مشترک هست نه یونیک - شما داخل یاهو و جی میل با همچین اشتراکی مواجه نیستی فقط اونجا اگر قضیه ای در بین باشه قضیه نگهداری داده ها تا on شدن کلاینت یا سرور هست.
نه، بحثی که مطرح می کنید، با چیزی که موضوع تاپیک هست، و چیزی که خودتون قبلا گفتید، تفاوت داره:


ببین قرار نیست حرفمان را بپیچونیم بحث این وسط OffLine بودن هست حالا کی خواسته Presentation Layer با Data Layer را بدونه؟

اینجا بحث این نیست که فقط یک کاربر متصل بشه یا داده ها مشترک باشند و اینجور چیزها؛ این شرکت ها که نمیان برای هر کاربر یک دیتابیس ایجاد کنند! یک یا چند دیتابیس در پشت صحنه وجود دارند که به همه کاربران سرویس میدند. داده های درخواستی کاربر هم ممکنه بعضا مشترک یا غیرمشترک باشه، مثلا در یک سیستم Online Collaboration این داده ها اکثرا بین چند کاربر مشترک هستند، و در یک سیستم ایمیل اکثر داده های رد و بدل شده مشترک نیستند. همین روند در یک برنامه شما هم میتونه وجود داشته باشه، کلاینت های شما ممکنه به طور همزمان روی داده های مشترک کار کنند، یا هر کدام از آنها با بخشی از یک داده بزرگتر درگیر باشند.

بحث تاپیک این نیست، بحث تاپیک درباره کار با داده ها در سمت کلاینت حتی در صورت قطع اتصال از سرور، و همچنین ارسال پیام از سرور به کلاینت ها ست، و مشترک بودن یا نبودن داده ها ربطی به موضوع بحث نداره.

tdkhakpur
شنبه 23 مرداد 1389, 14:30 عصر
کلاینت های شما ممکنه به طور همزمان روی داده های مشترک کار کنند، یا هر کدام از آنها با بخشی از یک داده بزرگتر درگیر باشند.


نه منظور از اشتراک داده ها بریا استفاده همزمان نیست منظور درخواستی هست که بصورت مشترک هست ولی سرور حتما باید به یکی جواب بده و این جواب باید یونیک باشه مثلا شما تقاضای یک فضا از سرور میکنید یا یک شماره خاص.حالا سرور که نمیتونه به هر دو داده مشترک یا یک شماره بده! و بیشتر این حالت زمانی شکل میگیره که سرور در حالت off باشه.
البته برای گریز از همچین مشکلی راهی هم هست و منظورم هم از ارسال توضیحات همین بود.


بحث تاپیک این نیست، بحث تاپیک درباره کار با داده ها در سمت کلاینت حتی در صورت قطع اتصال از سرور، و همچنین ارسال پیام از سرور به کلاینت ها ست،
ببینید خب خودتان هم میدانید برای ارسال پیغام on یا off برای کلاینتها احتیاج به آدرس هر کلاینت هست و یا اینکه کلاینتها این تقاضا رو انجام بدند که چه پیامهایی در حالت off داشتن تا سرور بهشان ارسال کنه و این کار را رابط میانی و یا خود کلاینت با تقاضا میتونه حل کنه.

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

vcldeveloper
شنبه 23 مرداد 1389, 18:38 عصر
اتفاقا این موضوع به درد می خوره تا مطالب قبلی.
بحث اینکه شما چه موضوعی رو به درد بخور تشخیص بدید نیست، بحث بر سر موضوع تاپیک و سوال مطرح شده توسط کاربر سوال کننده هست.


راستی اون پست 4 رو شما بودید زدید؟
نه، من اگر بخوام در این سایت پستی ارسال کنم، نیازی ندارم که از یک ID دیگه استفاده کنم، با همین ID خودم پست رو ارسال میکنم.

naeemeh
یک شنبه 24 مرداد 1389, 11:23 صبح
آقای صادقیان سلام
ممنون از راهنماییتون من این کامپوننت را از کجا می توانم تهیه کنم . و یک نکته اگر کسی اطلاعات را اضافه کند یا کم کند کاربران دیگر که مثلاً صفحه نمایش آن ها باز است می توانند متوجه اضافه یا کم شدن بشوند.