سلام
نرم افزارهای بیمارستانی که مد نظر شما هستن بنام سیستمهای 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 هست که در پست دیگه ای توسط شما مطرح شده و دنیای جدیدیه.
موفق باشید