PDA

View Full Version : حرفه ای: بهبود معماري پروژه



sky_in_iran
سه شنبه 24 فروردین 1389, 16:21 عصر
سلام دوستان عزيز
من يك پروژه بايد هرچه سريع به استاد تحويل بدم تو اين پروژه ميخوام از معماري استفاده كنم كه تركيبي از سادگي ، كار آمدي و ... باشه اگه امكان داره اين برنامه رو ببينيد بعد نظر بديد براي بهبود چيكار كنم خيلي ممنون ميشم .
توضيح برنامه :
برنامه ثبت شكايات در روابط عمومي هست .
اين برنامه كه براتون ميزارم اصلا قابل اجرا شدن نيست چون فقط رو معماريش دارم فكر مي كنم و اين و در آوردم .
روند كار اينجوري كه اطلاعات از فرم به لايه business ميره اونجا روش كارهايي انجام ميشه مثلا صحت اطلاعات يا كمبودات و يا ... بعد اطلاعات به لايه security ميره اونجام از روشي استفاده كردم كه 4 كلاس كه هر يك يه كار انجام ميدن يكي insert يكي update والي اخر
اينارم به صورت partial قراردادم كه بعد در allcollection همرو يكي كردم بعد در securitycollection به صورت public براي استفاده در business قرار دادم .
سوالات :
1- آيا كارم خوبه و منطقيه ؟
2- چه گونه بهترش كنم ؟
3-آيا همرو از يكپارچگي دربيارم و لايه security رو يك كلاس كنم همرو بريزم توش ؟
از كمكتون پيشا پيش خيلي ممنونم
موفق باشيد

اَرژنگ
سه شنبه 24 فروردین 1389, 17:44 عصر
در مورد لایه نویسی، روند کار مهم نیست،به اینکه هر لایه‌ای چه مسعولیت(هایی) بر عهده دارد فکر کنید، وابستگی بین لایه‌ها را توضیح بدید، کدام لایه از لایه هایه دیگر استفاده میکند؟

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

اَرژنگ
سه شنبه 24 فروردین 1389, 18:17 عصر
تعریفها را چرا گزاشتید در سکیوریتی؟
اینها اشیا منطقی برنامه هستند و جاشان در لایه بیزینس است.
سکیوریتی از اسمش بیشتر وضائف بر عهده دارد، فقط باید کارهایه امنیتی را انجام بده.
کارهایه داتابیسی را در لایه داتالایر انجام بدید.

sky_in_iran
سه شنبه 24 فروردین 1389, 22:30 عصر
استاد آرژنگ ممنون از راهنماييتون
من قصدم اينه كه دراين برنامه در ui فقط و فقط دريافت و نمايش اطلاعات داشته باشم در Business تايين صحت اطلاعات ورودي ودر لايه security كارهايي اتصال به بانك براي ثبت و خواندن اطلاعات شايد اسمي كه گذاشتم مناسب نباشه اما اگه ببينيد من لايه dal بردم تو security قصدم اينه ..
به نظر شما ايني كه ميرم خوبه يا از سه لايه Business و dal و entity استفاده كنم ؟
ممنون از راهنماييتون
موفق باشيد

sky_in_iran
چهارشنبه 25 فروردین 1389, 11:29 صبح
از دوستان كسي نظري نداره نميخواد راهنمايي كنه من خيلي نياز به راهنمايي و كمكه شما اساتيد و دوستان دارم لطفا كمك بفرماييد
موفق باشيد

اَرژنگ
چهارشنبه 25 فروردین 1389, 11:51 صبح
از دوستان كسي نظري نداره نميخواد راهنمايي كنه من خيلي نياز به راهنمايي و كمكه شما اساتيد و دوستان دارم لطفا كمك بفرماييد
موفق باشيد
به این :
http://barnamenevis.org/forum/showthread.php?p=952137#post952137
یک نگاه بنداز نظر بده. همینطوری بعد از چند بار به کارهایه همدیگر نگاه کردن جلو بریم،

اَرژنگ
چهارشنبه 25 فروردین 1389, 12:24 عصر
من قصدم اينه كه دراين برنامه در ui فقط و فقط دريافت و نمايش اطلاعات داشته باشم

درست



در Business تايين صحت اطلاعات ورودي


خوب



ودر لايه security كارهايي اتصال به بانك براي ثبت و خواندن اطلاعات شايد اسمي كه گذاشتم مناسب نباشه اما اگه ببينيد من لايه dal بردم تو security قصدم اينه ..

به نظر شما ايني كه ميرم خوبه

بله



يا از سه لايه Business و dal و entity استفاده كنم ؟

ها؟ :گیج: فرقش با چیزی که بالا گفتید چیه؟ من فکر کردم که فقط اسماً به جایه "دال" بهش "سکیوریتی" گفتید. اینکه شد همان چیزی که بالا گفتید.
یک چیزه مهم را هم فراموش نکنید، اگر این یک کار کوتاه زمان است که فوری باید تحویل داده بشه، بیخیال معماری درست، هر جوری که میتونید پیش برید، ولی اگر قصد یادگیری معماری است و زمان به اندازه کافی دارید در همان پروژه‌ای که بهش لینک دادم به ۴ قسمت تقسیم شده بود:
GUI فقط برایه دریاف و نشان دادن اطلاعات
BLL برایه مدیریت و جمع نگهداشتن منطق برنامه.
(BO (Business Objects/Entities برایه تعریف داده ها.
(DB (DAL برایه ارتباط با داتابیس.
اگر وقت داشتید به این کتابها هم نگاه بندازید:
Microsoft .net Archtecting Applications for the Enterprise
#Domain Driven Design and Development with C
معماری درست چیزی نیست که یکباره یاد بگیرید، اینکه چطوری معماری را بنا بر احتیاجها تغییر بدید را فقط با انجام پروژها‌یه متعدد و اینکه چه کار میکنه و چی کار نمیکنه یاد میگیرید.

sky_in_iran
پنج شنبه 26 فروردین 1389, 11:06 صبح
ممنون از توجه شما استاد آرژنگ ، برنامه اي كه گزاشته بوديد ديدم حالا يه سوال ما زماني كه داريم اطلاعات و در ui دريافت مي كنيم و بعد به ترتيب به بزينيس و dal ميفرستيم و بعد ثبت در بانك مي كنيم خوب يه روند معموله اما بعضي اوقات ديده ميشه از ليست ها استفاده ميشه دليل اينكار چيه ما كه اطلاعات و يك به يك ثبت بانك مي كنيم مثلا تو يه برنامه مثل اتوماسيون اداري چرا ديگه در داخل ليست ها قرار ميدن ؟ آيا اينم ربطي به معماري برنامه داره ؟ يا نه اين كار دليل خاص ديگه داره ؟ مثلا تو برنامه فروشگاه استفاده از ليست هارو درك كرد اما تو اتوماسيون اداري يا اين برنامه شما نميتونم بفهمم ؟

اَرژنگ
پنج شنبه 26 فروردین 1389, 11:45 صبح
ممنون از توجه شما استاد آرژنگ ، برنامه اي كه گزاشته بوديد ديدم حالا يه سوال ما زماني كه داريم اطلاعات و در ui دريافت مي كنيم و بعد به ترتيب به بزينيس و dal ميفرستيم و بعد ثبت در بانك مي كنيم خوب يه روند معموله اما بعضي اوقات ديده ميشه از ليست ها استفاده ميشه دليل اينكار چيه ما كه اطلاعات و يك به يك ثبت بانك مي كنيم مثلا تو يه برنامه مثل اتوماسيون اداري چرا ديگه در داخل ليست ها قرار ميدن ؟ آيا اينم ربطي به معماري برنامه داره ؟ يا نه اين كار دليل خاص ديگه داره ؟ مثلا تو برنامه فروشگاه استفاده از ليست هارو درك كرد اما تو اتوماسيون اداري يا اين برنامه شما نميتونم بفهمم ؟
لیست چی؟ اگر در لیست نباشد در چی است؟
کی و چه چیزی برایه چه کاری در لیست قرار میگیره؟
اتوماسیون اداری از چه لحاضی با برنامه فروشگاه فرق دارد؟ یک مثال اتوماسیون اداری بزنید، چونکه من مطمعن نیستم که مقصود Office Automation هست واگر هست از چه لحاضی و یا اینکه یک چیزه دیگر است؟

sky_in_iran
جمعه 27 فروردین 1389, 11:08 صبح
استاد منظورم از ليست استفاده از كالكشناست مثلا

Dictionary<Int32, String>
از اينا استفاده ميشه دليلش و نمي فهمم ما كه اطلاعات و مستقيما ثبت بانك مي كنيم چه نيازي به ثبت تو اينجور ليست هاست ؟؟؟ اتوماسيونم كه مثلا زدم منظورم اين بود چون ديدم جايي اما هركاري مي كنم دليلش و نميتونم درك كنم مثلا تو برنامه فروشگاه خوب اول بايد خريدا معلوم بشه بعد ثبت بانك بشه اونجا خوب ميگم اطلاعات ثبت ليست ميشه بعد ليست ثبت بانك ميشه اما جاهايه ديگه مثل اون چيزي كه مثال زدم دليلش چيه جزو معماري كاره ؟

اَرژنگ
یک شنبه 29 فروردین 1389, 10:26 صبح
استاد منظورم از ليست استفاده از كالكشناست مثلا

Dictionary<Int32, String>
از اينا استفاده ميشه دليلش و نمي فهمم ما كه اطلاعات و مستقيما ثبت بانك مي كنيم چه نيازي به ثبت تو اينجور ليست هاست ؟؟؟ اتوماسيونم كه مثلا زدم منظورم اين بود چون ديدم جايي اما هركاري مي كنم دليلش و نميتونم درك كنم مثلا تو برنامه فروشگاه خوب اول بايد خريدا معلوم بشه بعد ثبت بانك بشه اونجا خوب ميگم اطلاعات ثبت ليست ميشه بعد ليست ثبت بانك ميشه اما جاهايه ديگه مثل اون چيزي كه مثال زدم دليلش چيه جزو معماري كاره ؟

در مورد استفاده


Dictionary<Int32, String>
در جاههایی که دیدید از چه خصوصیتاییش اشتفاده میشه؟

از IList معمولی برایه کار با کالکشنهایه اشیا منطقی استفاده میشه، به این شکل به جایه استفاده از اشیا سطح پایین Low Lvel Objects داتابیسی کار بشه ، به جاش یک لایه در سطح بالاتر تشکیل میدن.
سوالتان را درست فهمیدم یا اینله سوال چیزه دیگریست؟

sky_in_iran
دوشنبه 30 فروردین 1389, 10:03 صبح
منظورم همين بود استاد
منظورتون از سطح پايين چيه ؟ لايه بالا ؟

اَرژنگ
دوشنبه 30 فروردین 1389, 11:04 صبح
منظورم همين بود استاد
منظورتون از سطح پايين چيه ؟ لايه بالا ؟

شاید بله،
اگر برداشتمان از لایه پایین مانند زبانهایه برنامه‌نویسی باشد که :
زبانهایه سطح پایین (Lower Level) : مانند اسمبلی ، ماشین کد...

زبانهایه سطح بالا (Higher Level) : مانند زبانهایه برنامه نویسی پاسکال، دلفی ، سی ++ ،

به این شکل سطح بالا از بر سطح پائین استوار است.

داده‌هایی که در داتابیس هست سطح پایین باید به حساب بیان، چونکه منطق ندارند ونمیشه روشان به هیچ شکلی حساب کرد، با بوجود آوردن کلاسهایی در سطح بالاتر (یک لایه بالاتر)، میشه منطق و قوانین را درشان جایگزین کرد، مثلا سن نباید از x کمتر باشد، و ...

sky_in_iran
سه شنبه 31 فروردین 1389, 10:18 صبح
ممنون استاد پس براي پيدا كردن يك الگو بستگي به خودمون داره كه به چه صورت و به چه راهي بريم درسته ؟ درباره بهترين روش به نظر شما چه شاخصي هست كه درستي كارو تاييد كنه ؟
بايد به مرور به همچين چيزي برسيم يا نه ؟

اَرژنگ
چهارشنبه 01 اردیبهشت 1389, 07:19 صبح
ممنون استاد پس براي پيدا كردن يك الگو بستگي به خودمون داره كه به چه صورت و به چه راهي بريم درسته ؟ درباره بهترين روش به نظر شما چه شاخصي هست كه درستي كارو تاييد كنه ؟
بايد به مرور به همچين چيزي برسيم يا نه ؟



الگو برایه چه کاری؟ تقسیم بندی پروژه به قطعهایه کوچک منطقی که قابلیت دوباره استفاده شدن داشته باشند؟

اگر منظور از نتیجه کار "وضعیت زمانی پروژه" است. ادمه مطالعه این مفهومات را توصیه میکنم:
-Develoment Extreeme and Agile Programming
Complexity Measures
Software Engineering
OO Design and Implementation
Refactoring
Code Review


بعضی خصوصیات پروژه،کد، برنامه‌نویسی را میشه اندازه گرفت به مفهومات در Code Metrics , complexity نگاه بندازید. http://en.wikipedia.org/wiki/Cyclomatic_complexity

اندازه‌گیری و خوب بودن بعضی از خصوصیات برمیگرده به :
مینیمم بودن(مینیمیز کردن) Coupling
ماکسیمم بودن (ماکسیمیز کردن) Cohesion
پنهان کردن جزعیات (این را به اشتباه قایم کردن اطلاعات گفتند information hiding ، ولی نشان ندادن جزعیات واژه بهتریه).

برایه شروع خواندن این کتاب توصیه میشه:
http://www.amazon.com/Software-Engineering-7th-Ian-Sommerville/dp/0321210263

sky_in_iran
چهارشنبه 01 اردیبهشت 1389, 09:51 صبح
استاد ممنون
من متاسفانه زبانم ضعيفه اما با خوندن كتاب بهتر ميشه انشاالله ، حالا اين و چجوري تهيه كنم من نه مستر دارم نه كارتي تو ايران جايي هست بشه خريد ؟