# فناوری جاوا > برنامه‌نویسی جاوا > Java EE : نگارش سازمانی جاوا >  معماری نرم افزار

## javaphantom

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

معماری نرم افزار چیست و تفاوت آن با مهندسی نرم افزار چیست؟
به چه کسی معمار نرم افزار گفته می شود؟
به چه کسی مهندس نرم افزار گفته می شود؟
معماری J2EE چیست و آیا ما معماری Net. یا معماری delphi یا معماری دیگری هم داریم اگر داریم لطفا توضیح دهید؟

----------


## javaphantom

تعریف معماری نرم افزار یا همان software architecture
توی قدیم ها وقتی می خواستن یک برنامه درست کنند خوب اون موقع که مثل الان زبانهای سطح بالا نبود وقتی می خواستن یک محصول تولید کنند باید از لحاظ سخت افزاری مثل حافظه cpu و خیلی چیزها رو در نظر می گرفتن با دستورات محدود یک ریزپردازنده برنامه نویسی می کردند. تا اینکه زبان های برنامه نویسی تونستن یک سری data type ها رو دورست کنند و روند برنامه نویسی رو راحتر کنند مانند زبان Fortran که در این زبان یک سری data type های اولیه وجود دارد. بعد از آن بر این عقیده شدند که در صورتی که بتوان یک ساختما داده از قبل تعیین شده داشته باشیم می توان یک محصول نرم افزاری صیحیح و درست تولید کنیم. این آرزو برآورده شد و کم کم به تعداد datatype ها افزوده شد که این data type ها رو می شد بصورت انتزاعی تعریف کرد و خود بصورت ماژولهای جدا ازهم می شدند. همین امر باعث شد که زبانهای سطح بالا بحث و مفهوم abstract data type استفاده بشه و بتوان ساخمتان داده های خواسته شده بصورت ماژولهای جدا از هم هستند را پیاده سازی کرد. از طرفی هرچی سیستم نرم افزاری بزرگتر می شد در این زبانها پیچیدگی و ارتباط بین این ماژولها دیگر از حالت الگوریتمهای ساده پیروی نمی کرد و نیاز بیک آنالیز و مدیریت دقیق بین این ماژولها و ترکیبی از آنها و همچینن ارتباط بین آنها باشد. در اینجا بود که دید کلی به سیستم چه از لحاظ سخت افزاری چه از لحاظ نرم افزاری و چگونگی پیاده سازی در فازهای اولیه حائز اهمیت بود. اینجا بود که برای پیاده سازی این سیستم ها بحث معمار و پیاده سازی کنند آن معمار نرم افزار بوجود آمد.

معماری JEE
کلا سکوی Jee سکویی است برای تولید و تهیه استاندارد  معماری چند لایه ای برای برنامه های سازمانی. معماری JEE برای پشتیبانی برنامه های مولفه ای یا همان component-base می باشد بطوری که بتوان این component ها را همان طور که گفته شد در لایه های مختلف ایجاد کرد و از آنها پشتیبانی کرد.
این لایه به سه لایه فیزیکی و کلی تفسیم می شوند که عبارتند از
client tier:
 که تمام کامپوننت های servet و jsp در این لایه قرار دارند و واسطه ای برای Middle tier بشمار می آید
Middle tier:
به آن server tier هم گفته می شود که در این لایه web application برای مدیرت کامپوننت های business را کنترل می کنند.
Enterprise data tier:
لایه data ها ما می باشد که کلا تمام اطلاعات سازمانی ما دراین لایه قرار دارد که می تواند از نوع persistence یا relational باشد.

----------


## unhandled_event

سلام


 نرم افزارهای بیمارستانی که مد نظر شما هستن بنام سیستمهای HIS الان وجود دارن میشه ازشون ایده گرفت.
در مورد معماری نرم افزار  بطور تجربی و تئوری چیزایی فهمیدم خوشحال میشم اگر جایی اشتباه میکنم تصحیح بشه : 
معماری نرم افزار در چند جنبه مطرح میشه هم در سطح برنامه نویسی هم طراحی و هم نیازمندیهای سازمانی و business.

از جنبه برنامه نویسی : 
   ساختارگرا :  که میگه هرچی هست و  بنویس بیا پایین و تمام کارهای مجزا رو به فانکشنهای واگذار کن. این روش هنوز هم در بسیاری از ماژولهای نرم افزارهایی مثل سیستم عاملها وجود داره. 
شی ء گرا  : در این روش تلقی هرچیز و هر موجودیتی بصورت شی ء و کلاس  هست 
 و  بتدریج   design pattern ها و کامپوننتها رو داریم تاثیر این دیدگاه در مدل طراحی معماریهای مختلف در تکنولوژی Java خیلی زیاده. 

دیدگاه جدید سرویسگرا   : همه چیز رو بجای کامپوننت سرویس میبینیم اما هنوز جدیده و خیلی مشخص و ملموس نیست. 
از دیدگاه طراحی (که به Java EE یا همون J2EE مربوط میشه)
معماری یک نرم افزار بمعنی ساختار اجزاء اون و نحوه ارتباط و تعامل اونها و اینکه شکل ارتباط و دانش  هرکدام از این اجزاء نسبت به هم چقدره که در واقع این همون سطح abstraction میشه . ما گاهی مجبوریم این معماری رو مدل کنیم تا بهتر بتونیم مشکلاتش رو  حل کنیم.
در واقع از دید RUP بزرگترین ریسک طراحی نرم افزار  بعد از تکنولوژی همین معماریه که درستی و کارایی اون باید برای ذینفع یا کارفرما بنحوی اثبات بشه یعنی اینکه مثلا این ساختار علاوه بر درست کارکردن همیشه با این اجزاءش میتونه نیاز سازمان شما رو از نظر هزینه ،  ارزش افزوده و کارایی مرتفع کنه . 

از دید کلی تر دغدغه معماری  نرم افزار از قدیم وجود داشته و به نسلهای جدید نرم افزار لزوما ارتباط نداره  میشه به اینها اشاره کرد :

1-معماری تک جزئی یا single
 در این ساختار اجرای برنامه  ، exe  و ماژولهای برنامه یا ذخیره سازی اطلاعات همه  در یک جا جمع شدن و خلاصه یک کاربره و یک کامپیوتر. 

2- معماری main-frame و dump-terminal : در این معماری یک ترمینال وجود داره که کاربر پشت ترمینال که چیزی بجز ارسال کننده فرمان و گیرنده جواب اون نیست قرار گرفته و
 تمام پردازشها بر اساس الگوریتمهای زمانبندی و تقسیم منابع در   سیستم عامل سرور  انجام میشه  برنامه و دیتابیس و هرچی دیگه هست در سرور یا همون main frame قرار داره. 

3- معماری کلاینت-سرور  یعنی یک کلاینت سطح عالیتر وجود داره و مقدار بیشتری از پردازش بر روی این کلاینت و  مقداری هم   بر روی سرور انجام میشه مثل اکثر برنامه های تجاری تحت ویندوز موجود که با VB  یا دلفی یا دات نت نوشته میشن که exe روی کلاینت و ذخیره سازی بر روی database server انجام میشه.
4- معماری چند لایه یا Multi Tier (معمولا سه لایه)  : 
    در این نوع معماری که فعلا فقط در تکنولوژی Java EE عملیاتیه  بصورت استاندارد  سه طرف حساب داریم : 

1- لایه Presentation یا User Interface یا رابط کاربر که میتونه یک Web Client یا دستگاه کارت هوشمند  خوان  یا یک کلاینت دسکتاپ مثل ویندوز باشه. این کلاینت بسته به نوع کارش فقط در حد پردازشهاییه که ماهیتا به ارتباط کاربر با نرم افزار  مربوط میشن مثل ارسال فرمانها یا دریافت و نمایش نتیجه  و یا مثلا عدم نمایش دکمه حذف درصورت نادرست بودن متغیر دسترسی به عمل حذف. 

2- لایه میانی یا Middle Tier که معمولا وظیفه انجام داددن منطق  برنامه رو داره مثلا در سیستم بیمارستان قوانین پذیرش بیمار ،حسابداری ، محاسبات بیمه یا زمانبندی کشیکها و از این قبیل. در نرم افزارهای بزرگ 24x7 یا Enterprise Application یک ظرف که بخشی از  application server  هست وظیفه ساختن و از بین بردن نمونه از کلاسها و طول عمرشون  و   در کل اجرای کدهای کامپوننتهای لایه میانی رو انجام میده  و درصورت نیاز به پردازش زیاد یا وجود صدها request در ثانیه ، میشه این کدها رو بین سرورها پخش کرد و بصورت توزیع شده درآورد که کار ساده ای هم نیست.

3-  لایه مدل یا دیتا   که Persistant یا ذخیره کردن اطلاعات بصورتهای مختلف که بشکل معمولش همون دیتابیس های رابطه ای یا relational هستن توسط کامپوننتی در این لایه انجام میشه.  مدل بصورت مستقیم یا توسط واسط دیگری با لایه میانی یا application  و در معماری MVC بصورت غیر مستقیم با لایه presentation  هم در ارتباط هست. فکر کنم مثال خوب لایه application و model و نحوه ارتباطشون  EJB 3 هست که در پست دیگه ای توسط شما مطرح شده و دنیای جدیدیه.



موفق  باشید

----------


## javaphantom

دوست عزیز از تمام گفتهای شما بسیار متشکرم. من خیلی خوشحال شدم که دیدم یک نفر پیدا شده و می فهمه که اهمیت دید کار از نظر آنالیز-طراحی - معماری و  pattern هایی که وجود داره  بسیار مهم است و از اینکه به این گونه وقت گذاشته اید و تعریف کرده اید بیشتر متشکرم.
من راستش رو بخواهید هیچ پروژه بیمارستانی ندارم و اصلا بهتر بکم درس نرم افزار ۲ ندارم. هدف از مطرح کردن این سوال برای این بود که من در چند پست دیگر مطالبی از بعضی ها خواندم که واقعا جای تعجب داشت و نشان می داد که بسیار از موضوع خارج هستند. زبان جاوا یک ابزاری است برای استفاده از تکنولوژی های موجود در جاوا بدرد بخور است و من سعی دارم می کنم که به کسانی که در فروم هستند و دوست دارند پیشرفت کنند اینرو بقبولونم که زبان یک وسیله است نه یک هدف. من انقدر که در مورد IDE کتاب و فیلم آموزشی توی این فروم دیده ام در کمتر فروم های خارجی با همچین چیزی برخورد کردم یا اصلا بهتر بگم اصلا برخورد نکردم. 
بهترین فیلم آموزش جاوا
بهترین محیط IDE
سخنی در باب جاوا
و بک سری سوالات دانشگاهی که اصلا مربوط با جاوا هم نیست که می توان آنها را با VB هم انجام داد.
از نظر من دونستن مفهوم و دلیل انتخاب جاوا یا هر تکنولوژی دیگر برای یک پروژه کار نشانه دید مهندسی و علمی است نه مطرح کردن چند الگوریتم یا ۱۰۰ خط یا ۱۰۰۰ خط کد.
در هر صورت نوشته های شما قابل تامل و مطالعه بیشتر هستند برای کسانی که دوست دارند درست یاد بگیرند. من بازم می گم مجبور شدم خودم از خودم سوال طرح کنم و امید وارم که ققط خودمم نباشم که جواب بدم.

----------


## najafzade

> تعریف معماری نرم افزار یا همان software architecture
> توی قدیم ها وقتی می خواستن یک برنامه درست کنند خوب اون موقع که مثل الان زبانهای سطح بالا نبود وقتی می خواستن یک محصول تولید کنند باید از لحاظ سخت افزاری مثل حافظه cpu و خیلی چیزها رو در نظر می گرفتن با دستورات محدود یک ریزپردازنده برنامه نویسی می کردند. تا اینکه زبان های برنامه نویسی تونستن یک سری data type ها رو دورست کنند و روند برنامه نویسی رو راحتر کنند مانند زبان Fortran که در این زبان یک سری data type های اولیه وجود دارد. بعد از آن بر این عقیده شدند که در صورتی که بتوان یک ساختما داده از قبل تعیین شده داشته باشیم می توان یک محصول نرم افزاری صیحیح و درست تولید کنیم. این آرزو برآورده شد و کم کم به تعداد datatype ها افزوده شد که این data type ها رو می شد بصورت انتزاعی تعریف کرد و خود بصورت ماژولهای جدا ازهم می شدند. همین امر باعث شد که زبانهای سطح بالا بحث و مفهوم abstract data type استفاده بشه و بتوان ساخمتان داده های خواسته شده بصورت ماژولهای جدا از هم هستند را پیاده سازی کرد. از طرفی هرچی سیستم نرم افزاری بزرگتر می شد در این زبانها پیچیدگی و ارتباط بین این ماژولها دیگر از حالت الگوریتمهای ساده پیروی نمی کرد و نیاز بیک آنالیز و مدیریت دقیق بین این ماژولها و ترکیبی از آنها و همچینن ارتباط بین آنها باشد. در اینجا بود که دید کلی به سیستم چه از لحاظ سخت افزاری چه از لحاظ نرم افزاری و چگونگی پیاده سازی در فازهای اولیه حائز اهمیت بود. اینجا بود که برای پیاده سازی این سیستم ها بحث معمار و پیاده سازی کنند آن معمار نرم افزار بوجود آمد.
> 
> معماری JEE
> کلا سکوی Jee سکویی است برای تولید و تهیه استاندارد معماری چند لایه ای برای برنامه های سازمانی. معماری JEE برای پشتیبانی برنامه های مولفه ای یا همان component-base می باشد بطوری که بتوان این component ها را همان طور که گفته شد در لایه های مختلف ایجاد کرد و از آنها پشتیبانی کرد.
> این لایه به سه لایه فیزیکی و کلی تفسیم می شوند که عبارتند از
> client tier:
> که تمام کامپوننت های servet و jsp در این لایه قرار دارند و واسطه ای برای Middle tier بشمار می آید
> Middle tier:
> ...


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

با تشکرات فراوان

----------


## fkohantorabi

> من انقدر که در مورد IDE کتاب و فیلم آموزشی توی این فروم دیده ام در کمتر فروم های خارجی با همچین چیزی برخورد کردم یا اصلا بهتر بگم اصلا برخورد نکردم.


یک دلیلش می تواند این باشد که در غرب Java IDE یعنی Eclipse بخاطر اینکه معروف هستش و مجانی. خیلی ها اصلا IDE دیگری نمی شناسند. 

HIS مطلب جالبی هستش و ممنون میشم اگه مطالب جالبی که پیدا می کنی رو به ما هم بگی.


فرزاد-

----------

