רעיון עתיק ביותר. הנה סיפור
מקום שעבדתי בו לפני 15 שנה. מיקרוסופט וwindows היו הדבר הכי חם בשוק...
מערכת ענקית שהתעקשו לפתח כל חלק בה שיהיה עצמאי לגמרי, ללא תלויות, קופסה שחורה, ניתנת להחלפה, קרא לזה איך שאתה רוצה.
בזמנו היו כותבים קבצי DLL ומשתמשים בעיקר בCOM. הרעיון היה שאתה יכול לפזר את המודולים האלה איפה שתרצה, לבזר אותם, להריץ אותם כסרביס, לעטוף אותם, מה שרק תרצה. זה היה כל כך גנרי שאפילו הקריאות לפונקציות נעשו דרך פרוטוקול שתיאורטי יכל לתמוך בכל שפה מה שהיה בזמנו נחשב למשהו די חדשני, אנחנו מדברים בשנים שלפני הWS כשהXML היה בשורה עולמית...
בסוף מה שקרה זה שכמה אלפי קומפוננטות היה צריך לפנות אליהם ולתחזק בדרך מסורבלת ומעצבנת. כמובן ש90% מהקוד היה פנימי לחלוטין וללא שום סיבה הגיונית שאי פעם יחליפו אותו או ירצו לבזר אותו.
עכשיו, אני לא בעד או נגד מיקרו שרותים או כל דבר אחר אבל זה בוודאי שלא קונספט חדש, ויותר חשוב: כמו כל ארכיטקטורה חשוב לקחת את זה בפרופורציות, להבין חסרונות ויתרונות ולנסות להשתמש בזה שיש לכך סיבה.
יש מקרים שיותר נכון לפתח חלקים שתלויים אחד בשני וחולקים משאבים משותפים ויש מקרים שבאמת זה טוב להפריד ולבזר.
הדוגמא הכי בנאלית זה כששני סרביסים לא מסתכלים על אותו מידע persistence (במילים אחרות, לא מחוברים לאותו DB). אז נכון, אפשר להגדיר קריאות ושירותים וממשק ביניהם וכל אחד שולח לשני ומה לא, אבל לפעמים יותר פשוט ונכון יהיה ששניהם כותבים וקוראים מאותו מקום למרות שזה פחות מגניב במצגות בכנסים.