PDA

View Full Version : سوال: اسلوب صحیح برنامه نویسی - بازنویسی برنامه



یوسف زالی
جمعه 11 آذر 1390, 06:59 صبح
با سلام.
بنا به دلایلی مجبور به نوشتن دوباره برنامه ای هستیم که از سالها قبل نوشته شده. (بالای 10 سال)
برنامه به صورت دو لایه طرح ریزی شده که UI با اشیای ADO به SP ها کانکت می شه.
وجود SP دست ما رو در تغییرات محلی باز گذاشته که در صورت نیاز قطعاتی رو در برنامه اصلاح یا تعویض کنیم.
مخصوصا در گزارشات خیلی به درد بخور بوده و ما رو از کامپایل مجدد بی نیاز می کرده.
حالا سوالاتی که دارم این هاست:
1- با وجود حجم بالای برنامه کامپایل شده با XE2 (که برای یک برنامه عادی 6 - 7 MG هست) اگر نیاز هست که مهاجرت کنم (از دلفی 7) شما چه راهکار یا نسخه ای پیشنهاد می کنید؟
2- آیا همین رویه رو نگه دارم و دولایه کار کنم یا شما ساختار جدیدی پیشنهاد می دید؟ تا جایی که فهمیدم و از مطالب دستگیرم شد در حالت سه لایه باید لایه مبانی در هر سیستم کلاینت کپی بشه. این کار فلسفه استفاده از اون رو زیر سوال نمی بره؟
3- در خصوص ساخت فریم ورک چه نظری دارید؟

مشخصات برنامه: روی هم در حدود 800,000 خط کد دلفی 7 و دیتابیس SQL 2008 با 1800 تا SP. (در خصوص دیتابیس آپدیت شدن اصلا مشکلی نیست)
برنامه خودش شامل 14 زیر برنامه هست که توسط یک برنامه پایه فراخوانی می شه.

لازم نیست تمام کد ها از نو نوشته بشن. در حدود 70 - 80 درصد اونها فقط کپی پیست می شن.
دوستان لطفا از نظر دهی دریغ نکنید. ممنون

Mahmood_M
جمعه 11 آذر 1390, 16:40 عصر
من تجربه ی زیادی ندارم ، اما فکر میکنم قاعده ی مشخصی برای این کار وجود نداره ! ، درواقع روش صحیح تا حدود زیادی به ابزارها بستگی داره ، یعنی اینکه برنامه ی اولیه با چه ابزاری نوشته شده و چه ابزاری قراره برنامه رو ارتقا بده یا بازنویسی در چه ابزاری انجام میشه و همینطور به این بستگی داره که قصد دارید در ساختار برنامه تغییراتی ایجاد کنید یا اینکه صرفا باید در نسخه های جدید دلفی پروژه کامپایل بشه تا ادامه ی پروژه مثلا در نسخه های جدید انجام بشه
در مورد بانک اطلاعاتی و دو لایه بودن برنامه فکر نمی کنم مشکلی داشته باشید ، چون تفاوت چندانی بین نسخه ی 7 و نسخه های جدیدتر وجود نداره

پیشنهاد می کنم ابتدا پروژه رو با همون نسخه ی قدیمی بازنویسی کنید ! و سعی کنید وابستگی پروژه به ویژگی های اون نسخه از دلفی رو از بین ببرید یا کاهش بدید ، در این صورت در انتقال برنامه مشکلتون خیلی کمتر میشه نکته ی دیگه اینکه Modular بودن برنامه خیل کار رو راحت می کنه ، سعی کنید تا جایی که امکان داره برنامه رو Modular کنید ، خیلی از چیزها هست که شاید کوچک به نظر بیان ولی در عمل مشکلات زیادی ایجاد می کنن ، مثل Unicode !

من با نسخه های XE و XE2 کار نکردم اما از دلفی 2010 کاملا راضی هستم و یک پروژه ی در حد متوسط ( و نه بزرگ ) رو از دلفی 7 به 2010 انتقال دادم و مشکل چندانی نداشتم

تا انتقال پروژه رو شروع نکنید ، مشکلات انتقال و روش صحیحش پیدا نمیشه ، چون این موضوع کاملا به ساختار پروژه بستگی داره

منظورتون رو از " در خصوص ساخت فریم ورک چه نظری دارید؟ " متوجه نمی شم !

به هر حال ، موفق باشید ...

یوسف زالی
جمعه 11 آذر 1390, 16:54 عصر
ممنون از آقا محمود.
برنامه باید با نسخه های جدید تر نوشته شه.
در این خصوص کاملا حق با شماست.
اما می خواستم بببینم که اگر قرار هست که سه لایه نوشته بشه باید به چه صورت ادامه بدم؟ گشتم اما متاسفانه در مسائلی مثل قرار گیری هر لایه در کجا ... مشکل دارم.
فریم ورک هم منظورم مثلا تعدادی DLL هست که بستر برنامه رو تشکیل می ده و کارهای روتین به اونها سپرده می شه.
در حال حاضر تمام برنامه خلاصه می شه در چند EXE.
گفتید یونیکد! اصلا حواسم به این جریان نبود. ممکنه کجا ها اشکال درست کنه؟
ممنون از اینکه در این بحث شرکت می کنید.

Felony
جمعه 11 آذر 1390, 20:45 عصر
1- با وجود حجم بالای برنامه کامپایل شده با XE2 (که برای یک برنامه عادی 6 - 7 MG هست) اگر نیاز هست که مهاجرت کنم (از دلفی 7) شما چه راهکار یا نسخه ای پیشنهاد می کنید؟
حالا که قراره برنامه رو باز نویسی کنید با آخرین نسخه Stable باز نویسی کنید که خوسبختانه XE2 تا الان نسخه پایداری نشون داده .


2- آیا همین رویه رو نگه دارم و دولایه کار کنم یا شما ساختار جدیدی پیشنهاد می دید؟ تا جایی که فهمیدم و از مطالب دستگیرم شد در حالت سه لایه باید لایه مبانی در هر سیستم کلاینت کپی بشه. این کار فلسفه استفاده از اون رو زیر سوال نمی بره؟
نه , از نظر من و خیلی ها ... ۳ لایه بهتره و در به روز رسانی های بعدی دستتون رو بیشتر باز میزاره , دقیقا مثل همون SP که گفتید دستتون رو باز گذاشته .


3- در خصوص ساخت فریم ورک چه نظری دارید؟
هر چه برنامه ماجولار تر باشه در تغییرات دستتون باز تر هست , ولی خیلی حواستون به نحوه پیاده سازی این سیستم ماجولار باشه , چون پیاده سازی غلط اون بدتر دست و بال آدم رو میبنده .


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

من هم الان تو شرکت درگیر همچین موضوعی هستم , برنامه ای تخصصی ( پزشکی ) با حدود یک و نیم میلیون خط کد دلفی ( ۶ سال پیش در دلفی ۷ نوشته شده ) و بدون حتی ۱ خط Comment و Document ! بدون استفاده از SP و رعایت کوچکترین اصول ! و حالا که نیاز به تغییرات اساسی در برنامه هست اینقدر حجم برنامه زیاد هست که هیج راهی جز بازنویسی برنامه برامون نزاشته و متاسفانه برنامه اینقدر پر کاربرد هست که تمام مشتری ها ( نزدیک به چند هزار آزمایشگاه و بیمارستان ) گفتن که تمام اطلاعات قبلی رو تو برنامه جدید نیاز دارن و فعلا مثل ... تو گل موندیم که چطور اطلاعات برنامه قبلی رو به برنامه جدید منتقل کنیم !

یوسف زالی
جمعه 11 آذر 1390, 21:36 عصر
آقا مجتبی دقیقا غصه من هم همینه. یک خط هم مستند نذاشتن نامردا!
در خصوص اینکه سه لایه کار بشه ببینید درست می گم؟
1- لایه UI روی هر سیستم جداگانه قرار می گیره.
2- لایه Business ؟؟؟؟
3- لایه DAL ???
لطفا در این مورد کمی راهم بندازید.
کلیات رو می دونم. اما تو مسایل خیلی جزیی گیر کردم. اگر قراره لایه میانی روی هر سیستم جدا وجود داشته باشه چه کمکی می کنه و مزیتش به دو لایه چی می شه؟

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

پست بالا هم نا تموم ارسال شده !:بامزه:

Felony
شنبه 12 آذر 1390, 09:38 صبح
1- لایه UI روی هر سیستم جداگانه قرار می گیره.
بله .


2- لایه Business ؟؟؟؟
بستگی داره داده هاتون چقدر نیاز به اعتبار سنجی و پردازش اضافی داشته باشن ، اگر این پردازش ها زیاد هست بهتره Business Layer رو در سمت Client ها پیاده سازی کنید تا بار زیادی روی Server تحمیل نشه ؛ تو این برنامه که من در حال بازنویسیش هستم داده ها بسیار حجیمی وارد برنامه میشن و روشون پردازش های سنگینی انجام میشه ، در نسخه فعلی برنامه به صورت چند لایه طراحی نشده و تمام پردازش ها سمت سرور انجام میشه و سرعت در آزماشگاه های بسیار بزرگ که سرورهای بسیار قوی هم دارن ( یکیشون حدود 2 میلیارد تومن پول سرورهاشون هست ) بسیار پایین هست ، ولی تو نسخه جدید که در حال نوشتنش هستم Business Layer رو به Client ها انتقال دادم تا خود سیستم Client کار اعتبار سنجی و پردازش اطلاعات ورودی رو انجام بده و بعد اون رو به Server ارسال کنه که تا الان خیلی بهتر از روش قبلی جواب داده .


اگر قراره لایه میانی روی هر سیستم جدا وجود داشته باشه چه کمکی می کنه و مزیتش به دو لایه چی می شه؟
مزیتش این هست که میتونید پردازش ها و اعتبار سنجی ها رو به سرور یا کلاینت بسپرید ؛ البته در برنامه نویسی 2 لایه هم این کا رو میشه کرد ولی پیاده سازی به صورت 3 لایه توسه نرم افزار رو راحت تر میکنه .


3- لایه DAL ???
اون هم بستگی به نحوه پیاده سازی شما و امکانات و سرعت شبکه و ... داره ولی بیشتر مواقع این لایه در سمت Server قرار میگیره .


شما در خصوص تبدیل یونیکد و اصولا مهاجرت به سمت بونیکد از انسی به چه مشکلاتی برخوردید؟
شدید ... !
بخش ارسال و دریافت اتوماتیک SMS و E-Mail کلا از کار افتاد و در ذخیره اطلاعات در بانک هم مشکلات عجیب و غریبی به وجود اومد که مجبور شدیم کلا برنامه قبلی رو بیخیال شیم و یک تحلیل جدید و یک برنامه جدید ...

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

یوسف زالی
شنبه 12 آذر 1390, 10:24 صبح
مرسی.
لایه DAL خودش DLL هست؟
SP ها چی می شن؟ آیا درون لایه DAL نوشته می شن؟
اگر نه، پس من کلا از سه لایه چیزی نفهمیدم! :لبخند:
و در پست های دیگه ای باید بپرسم.