در تصویر زیر معماری نرم افزار در محیط شبکه داخلی را نمایش میدهد. مشابه این معماری برای نرم افزار نصبی در شبکه خارجی (اینترنت) نیز وجود دارد. تنها تفاوت آن در این است که برخی از زیر ساختها نظیر مدیریت جریان کار، درصورت عدم کاربری می توانند وجود نداشته باشند.
شرح معماری
لایه واسط کاربری (User interface Layer)
در بخش Back Office از یک فریم ورک متن باز جاوا اسکریپت به نامISOMORPHIC SMART-CLIENT، استفاده شده است. ارتباط لایه واسط کاربری با برنامه از طریق ارسال و دریافت درخواستها به صورت REST FUL می باشد. این قابلیت باعث میشود تا هر زمان که بخواهیم تکنولوژی لایه واسط کاربری را جایگزین نماییم. همچنین بسیاری از سرویس ها نیز در غالب REST میتواند به سایر اپلیکیشنها مانند پرتال وب پروژه نیز ارائه شود. لازم به ذکر است که تمامی این سرویسها در لایه امنیت که در ادامه توضیح داده خواهد شد کنترل میگردد. همچنین لایه واسط کاربری به صورت SPA (SINGLE PAGE APPLICATION) طراحی شده است. درخواستهای مربوط به ایجاد گرافیک واسط کاربری و اطلاعات مربوط به فرمها نیز طی درخواستهای جداگانه مدیریت میشوند.
لایه امنیت (Security)
در این لایه از فریم ورک Spring Security به عنوان هویت شناسی و مجاز شناسی (Authentication & Authorization) کاربران استفاده شده است. یکی از نکات مهم در این لایه سفارشی سازی Spring Security میباشد که به صورت اتوماتیک بخشهای مختلف کد را که توسط Developer توسعه یافته است، ایمن میسازد. در این لایه کلیه URLهایی که از سمت کلاینت میآید کنترل شده در صورت مجاز بودن کاربر برای دسترسی به آن URL سرویس مورد نظر صدا میشود.
لایه کنترلرها (Controller)
هدف اصلی این لایه ایجاد سرویسهای Restful میباشد. هسته اصلی این لایه بر روی فریم ورک Spring MVC بنا نهاده شده است. یکی از نکات مهم در این لایه این که است که توسعه دهنده سیستم درگیر چگونگی پیادهسازی سرویسهای Restful نمیباشد و این کار به صورت اتوماتیک و با توجه به نوع درخواست ارسالی از سمت کلاینت به صورت اتوماتیک انجام میشود. همچنین همان طور که در پاراگراف قبلی نیز توضیح داده شد، تمامی این سرویسها به صورت اتوماتیک توسط لایه امنیت کنترل میشوند. در این لایه متدهای اصلی سرویسهای هسته برنامه صدا شده و خروجی آنها به کلاینت ارسال میشود. این لایه دارای یک مکانیزم عمومی جهت کنترل Exception ها و ارسال پیامها به سمت کلاینت نیز میباشد.
لایه سرویس (Service Layer)
منطق اصلی برنامه و توابع عملکردی سیستم در این لایه پیادهسازی میشوند. متدهای این لایه که کار دستکاری و تغییر اطلاعات را انجام میدهند به صورت اتوماتیک در بخش مدیریت تراکنشها کنترل میشوند. اساس این لایه Spring Core میباشد که توسط Spring AOP کار مدیریت تراکنشها انجام میپذیرد. مدیریت وابستگیها نیز از طریق Spring IOC انجام میشود.
لایه دیتا (Data Layer)
هدف اصلی از این لایه مدیریت اطلاعات و ارتباط با پایگاه داده میباشد. در این لایه از JPA با پیادهسازی Hibernate، استفاده شده است. این لایه شامل موجودیتهای سیستم و متدهای مورد نیاز برای لایه سرویس میباشد.
مدیریت فایل ها و مستندات (DMS)
با توجه به اینکه فرآيند ممکن است نیاز به نگهداری اسناد و مدارک فنی یا مالی داشته باشد، با توجه به بالا بودن حجم این مستندات، در این معماری پیشنهاد میشود که فایلها بر روی File System نگهداری شوند. این لایه مدیریت ذخیره و بازیابی مستندات به صورت امن را بر عهده دارد.
مدیریت گردش کار(Workflow Engine)
زیر ساخت و لایه مدیریت گردش کار، وظیفه مدیریت طراحی، بارگزاری و مدیریت فرایند و گزارشات و نظارت بر فرایند را بر عهده دارد. این ابزار علاوه به منعطف سازی ساختار نرم افزار، امکان ایجاد فرآيندهای پچیده و بزرگ را در سامانه نرم افزار محقق می سازد. همچنین کاربران از طریق کارتابل الکترونیکی قادر به انجام وظایف خود خواهند بود.
امنيت اطلاعات و سامانه
1) رمز نگاری اطلاعات (Data Encryption) : به منظور حفظ محرمانگی اطلاعات در پايگاه داده و جلوگيری از انتشار آن به صورت مجزا از برنامه کاربردی، کليه اطلاعات کاربران و رمزهای عبور در فايل پايگاه داده رمز نگاری میشوند.
2) رمزنگاری رشته اتصال (Connection String): چنانچه امنيت سرور در اختيار داده شده تضمين نگردد، به منظور ايجاد امنيت بيشتر Connection String های نرم افزار همگی رمز نگاری میگردند.
3) جلوگيری از SQL Injection: معماری و روش توسعه نرم افزار مورد نظر به گونه ای است که از تزريق دستورات مخرب و نفوذی SQL به سامانه جلوگيری مینمايد.
یک خط تولید ERP، سه مشخصه اصلی فن آوری خط تولید نرم افزار که (1) انعطاف پذیری، (2) نظم و (3) مدیریت کیفیت فرآیند تولید نرم افزار می باشد را با سه ویژگی مهم سیستم های ERP که (1) یکپارچگی و فرآیندمحوری، (2) قابلیت تغییر سیستم از طریق تنظیمات بدون برنامه نویسی و تغییر در کد برنامه و (3) به روش های کسب و کاری (best practice) ازپیش ساخته، ترکیب می کند. ولی بر خلاف ERP، خط تولید ERP اجازه تغییرات در آن به روش های کسب و کاری از پیش ساخته را از طریق اعمال تنظیمات و یا تولید کد فراهم می آورد.
خط تولید ERP برای سازمان هایی طراحی شده است که نمی توانند یا نمی خواهند خود را با به روش های از پیش تعریف شده در سیستم های ERP، تطبیق دهند، اما می خواهند تا حدی که فرهنگ سازمانی و استراتژي مدیریت کلان سازمان اجازه می دهد خود را به این به روش ها نزدیکتر کند. فلسفه خط تولید ERP می گوید به جای اینکه فرآیندهای بهینه و به روش های یک ERP را به زور وارد یک سازمان کرد که به هیچ وجه آمادگی پذیرش آن ها را ندارد، باید فرآیندهای واقعی و جاری آن سازمان را وارد بستر یک سیستم یکپارچه کرد که قابلیت پذیرش آنها را داشته باشد.
در حالی که خط تولید نرم افزار یک بستر تولید برای نرم افزارهای عمومی است و ERP یک سیستم سازمانی یکپارچه بهینه ولی سلب، خط تولید ERP یک محیط جامع برای تولید اولیه و توسعه مستمر یک ERP تغییر پذیر بر اساس نیازهای سازمان و رشد بلوغ سازمانی در طول زمان، فراهم می آورد.
گرچه به صورت مفهومی میتوان خط تولیدERP یا «ERP Production Line» را به عنوان تلفیقی از دو مفهوم «خط تولید نرمافزار»[1] و «سیستم برنامهریزی منابع سازمانی»[2] توصیف نمود، ولی در حقیقت خط تولید ERP نه یک خط تولید نرمافزار است و نه یک ERP.
محصولات خط تولید نرمافزار غالباً یک زیرساخت فنی برای تولید نرمافزار، توسط واحد فناوری اطلاعات در سازمانهای بزرگ را فراهم میآورند، با این هدف که زمان و هزینه تولید سیستمهای اطلاعاتی سازمانی را کاهش داده و کیفیت تولید آن سیستمها را بالا ببرند. ولی این زیرساختها، چون بیشتر از منظر یک رویکرد فنی برای حل مسایل سازمانی طراحی شدهاند، غالباً با مفاهیم کسب و کاری که دغدغه سازمانهای بزرگ است، فاصله دارند.
دغدغه خط تولید نرمافزار، فراهم آوردن ابزارها و یا قطعات از پیشساختهای از کد برای مدیریت و حل مسایل فنی و low-level سیستم مانند فرم، فیلد، class، ذخیره و بازیابی دادهها و object ها، مدیریت دسترسیها و گزارشسازی میباشد. ولی دغدغه IT در سازمانهای بزرگ، در سطح مفاهیم high-level سیستم، مانند انعکاس آنی رویدادهای فرآیندهای تولید، انبار، خرید، فروش و یا نگهداری و تعمیرات در سیستم مالی شرکت، قرار دارد. در نتیجه، رسیدن از ابزارهای خط تولید نرمافزار به تولید سیستمهای یکپارچه و پیادهسازی منطق پیچیده کسب و کار سازمانهای بزرگ، در عمل امری است بسیار پرریسک و زمانبر است که مستلزم تولید و نگهداری حجم بالایی از کد میباشد.
سیستمهای ERP مشکل پیادهسازی منطق پیچیده کسب و کاری که خطهای تولید نرمافزار در سازمانهای بزرگ با آن مواجه هستند را حل میکنند، زیرا یک ERP از ابتدا، با دید پیادهسازی بهروشهای (best practices) کسب و کاری برای صنایع خاص طراحی شده است. ERP یک سیستم وسیع و یکپارچه است که همه فرآیندهای اصلی یک سازمان را بر اساس برخی از بهترین استانداردهای روز دنیا مکانیزه مینماید. ولی حقیقت این است که بسیاری از سازمانهای ایرانی، آمادگی و توان تطبیق ساختارها و فرآیندهای جاری خود را با بهروشهای ارائه شده توسط ERP های شناختهشده دنیا ندارند.
این ERP ها برای سازمانهایی طراحی شدهاند که سالیان طولانی است که همه فرآیندهای اصلی خویش را با پیادهسازی سیستمهای اطلاعاتی کارآمد ولی مجزا، مکانیزه نمودهاند و دغدغه امروزشان، جایگزین نمودن همه آن سیستمهای جزیرهای با یک سیستم جامع و یکپارچه به منظور بهینهسازی و ارتقای حداکثری بازدهی خویش، میباشد. اغلب سازمانهای ایرانی ، با آن نقطه فاصله زیادی دارند. هیچ سازمانی نمیتواند در یک جهش بزرگ، از وضعیتی که در آن فرآیندهای اصلی کسب و کارش سیستمی نیست، به یک ERP از پیش ساختهشده برسد، زیرا ERP اصلاً برای این نوع سازمانها طراحی نشده است.
در نتیجه، ERP های موجود، دست سازمانها را در خروج از چارچوبی که نرمافزار برای کسب و کار آنها تجویز میکند کاملاً میبندند. در حقیقت این ERP نیست که خود را با سازمان تطبیق میدهد، بلکه سازمان است که باید خود را با ERP تطبیق دهد و در صورتی که بخواهیم با استفاده از Customization، رفتار ERP را در هر سازمان تغییر دهیم تا اندکی مطابق با فرآیندهای سازمانی شود، این تغییرات باعث ایجاد ناهماهنگی در بلوک های از پیش ساخته شده بدنه ERP می شود.
[1] خط تولید نرم افزار ترجمه اصطلاح Software Production Line یا SPL میباشد.
[2] سیستم برنامهریزی منابع سازمانی ترجمه اصطلاح Enterprise Resource Planning یا ERP میباشد.