ما معمارية البرمجيات؟
الدرس 3 من 38 · الأساسيات · 11 دقيقة و53 ثانية
الفيديو الأصلي باللغة الإنجليزية. إذا تعذّر تشغيله هنا، شاهده على موقع المؤلف. التفريغ النصي العربي الكامل أدناه.
الموارد
- شرائح الفيديو
- من يحتاج إلى معماري؟ بواسطة مارتن فاولر
- الكتاب: تصميم ذلك! بواسطة مايكل Keeling
- الكتاب: Head First معمارية البرمجيات راجو غاندي، مارك ريتشاردز، نيل فورد
التفريغ النصي
[00:03] دعونا نجيب على سؤال المليون دولار. ما هي معمارية البرمجيات بالضبط؟ أو على الأقل سنتحدث عن ما نعنيه بالمعمارية لأغراض هذه الدورة. لذا إذا فكرنا في المعمارية بطريقة بديهية، فإن التعريف الذي قد يظهر هو أن المعمارية تدور حول بنية النظام. هذا منطقي، أليس كذلك؟ لأنه بنفس الطريقة التي المعمارية للمنزل هو حول هيكل المنزل، والمعمارية لقطعة من البرمجيات هو حول أساس البرنامج، لبنات البناء حيث كل من القطع الأخرى من البرنامج سوف يجلس على رأس.
[00:42] وأعتقد أن هذا هو التعريف الصحيح. من الصعب المجادلة في ذلك لأن المعمارية هي بالتأكيد حول هيكل النظام. ولكن هذا يؤدي إلى السؤال، ما هو بالضبط هيكل النظام وكيف يمكننا تعريف هيكل قطعة من البرمجيات، سواء كان الواجهة الأمامية أو الخلفية؟ الكثير من الناس يكافحون مع هذا السؤال. حتى أفضل المعماريين يواجهون صعوبة في تحديد ما هو بالضبط المعمارية.
[01:05] وإحدى القطع المفضلة لدي التي تحكي قصة أحد هذه الصراعات هي مقالة مارتن فاولر، التي كتبها قبل أكثر من عقدين عندما كان يحاول إيجاد تعريف للهندسة المعمارية، لكتاب كان يكتبه كان يحمل اسم المعمارية. لذلك شعر أنه مضطر للتوصل إلى تعريف جيد. وفي هذه المقالة، يتحدث عن محادثة أجراها مع رالف جونسون، مهندس برمجيات أسطوري آخر. قد تعرفه كأحد مؤلفي كتاب أنماط التصميم الكلاسيكي، وكانوا يناقشون تعريفات مختلفة للهندسة المعمارية.
[01:46] وأحد تلك التعريفات التي يلقونها في هذه المحادثة هو أن المعمارية هي القرارات التي تتمنى أن تحصل عليها في وقت مبكر من المشروع. الآن، أنا أحب هذا التعريف لأنه يتحدث عن المعمارية كونها مجموعة من القرارات. هذه هي المرة الأولى التي نرى فيها أنها مرتبطة بالقرارات التي نتخذها. والسبب وراء رغبتنا في الحصول على هذه القرارات في وقت مبكر هو أن هذه هي القرارات التي يصعب تغييرها.
[02:09] إذن الاستنتاج من هذا هو أن المعمارية هي الأشياء التي يرى الناس أنه من الصعب تغييرها، أي شيء نعتقد أنه من الصعب تغييره، وهذا جزء من المعمارية. ولكن مرة أخرى، هذا يؤدي إلى سؤال آخر مثل كيف نجد ما يصعب تغييره؟ كيف نشير إلى شيء ونقول، هذا من الصعب تغييره أو هذا سهل التغيير؟
[02:34] بعد فترة من هذه المناقشة، توصلوا إلى استنتاج مفاده أن المعمارية تدور حول الأشياء المهمة، أيا كان ذلك. وهذا هو تعريفي الشخصي المفضل للهندسة المعمارية. وأنا أستخدم هذه طوال الوقت، ولكن مع ذلك، كما يطرح السؤال، ما هي الأشياء المهمة؟ كيف نحدد كيف تبدو الأشياء المهمة؟
[02:51] لذلك بالنسبة لهذه الدورة، أردت أن يكون لدي تعريف أكثر اكتمالاً، شيء يمكننا أن نشير إليه ونقول، حسناً، المعمارية هي هذا. ومفضلتي، أفضل واحدة يمكنني العثور عليها، تلك التي أحبها أكثر هي هذه من هذا الكتاب المسمى Design It. إنه كتاب رائع من تأليف مايكل كيلنغ، والذي سنشير إليه كثيرًا في هذه الدورة، لأن الكثير من المفاهيم التي يتحدث عنها مايكل في هذا الكتاب، هناك أشياء تتعلق بفهم المشكلات وحلها وتصميم الحلول، وهو بالضبط كيف يتم وضع هذه الدورة.
[03:26] لذلك سنشير إلى هذا الكتاب كثيرا. الآن، تعريف المعمارية في التصميم هو أن بنية برمجيات النظام هي مجموعة من قرارات التصميم المهمة حول كيفية تنظيم البرنامج لتعزيز سمات الجودة المطلوبة وغيرها من الخصائص. الآن، وأنا أعلم أن الكثير من الكلمات، لذلك نحن ذاهبون إلى كسر عليه قليلا.
[03:45] أول شيء يعجبني في هذا التعريف هو أنه يصف المعمارية كمجموعة من القرارات. وهذا يتماشى مع التعريف السابق الذي رأيناه والذي نعرّف فيه المعمارية بأنها القرارات التي نتمنى أن نحصل عليها في وقت مبكر. لذلك في كلتا الحالتين، نرى أن المعمارية ليست أكثر من قرارات. إذا كان بإمكاننا الإشارة إلى القرارات التي نتخذها، فهذه هي، هذه هي المعمارية.
[04:08] هناك يمكننا أن نرى أن هذه قرارات مهمة. والسبب في أهميتها هو أنها تتعلق بالأشياء التي يصعب تغييرها وهي تتعلق بكيفية تنظيم البرنامج، والتي تعود مرة أخرى إلى الهيكل. هيكل النظام هو كيف ننظمه.
[04:27] وأخيرًا، فإن الهدف الشامل الشامل لهذه البنية هو تعزيز سمات الجودة وغيرها من الخصائص. سنتحدث عن ما تعنيه هذه بالضبط في الفيديو اللاحق، ولكن في الوقت الحالي، اعلم فقط أن سمات الجودة هي أشياء مثل الأداء أو إمكانية الوصول، أو قابلية النشر، وقابلية التوسّع، وما إلى ذلك. كل الأشياء التي نريد أن تعززها المعمارية.
[04:51] وبعبارة أخرى، كلمة أخرى لهذا هو أن هذه هي الأشياء الهامة، يمكننا أن نفكر في هذا كأشياء مهمة في معماريتنا المعمارية. لذا إذا فكرنا في الأمر والسبب الذي يجعلني أحب هذا التعريف أكثر، هو أن هذا يجمع بين سماتنا لجميع التعريفات الأخرى التي رأيناها سابقًا. إنه يتعلق بالقرارات، إنه يتعلق بالأشياء التي يصعب تغييرها، إنه يتعلق بالهيكل. الأمر يتعلق بالأشياء المهمة.
[05:19] الآن، أحب هذا التعريف كثيرًا لوصف ماهية المعمارية، لكننا لم نحدد بعد كيف تبدو المعمارية، وكيف يمكننا الإشارة إلى شيء ما ونقول إن هذه هي المعمارية. ولهذا أحب استخدام هذا الإطار من بنية برمجيات Head First.
[05:30] هذا كتاب جديد جداً لقد صدر هذا العام، لكن الإطار ينبع من كتاب سابق كتبه مارك ريتشاردز ونيل فورد قبل عدة سنوات، وهو كتاب مشهور جدًا يسمى أساسيات معمارية البرمجيات. هذا هو نسخة محدثة من الإطار الذي اقترحوه في ذلك الكتاب، ويتيح لنا رؤية المعمارية، أو تقسيم المعمارية، إلى أربعة أبعاد.
[05:56] لدينا الأسلوب المعماري، والخصائص، والقرارات المعمارية والمكونات المنطقية، والطريقة التي نحدد بها هذه الأبعاد، أو أن المؤلفين يحددون الأبعاد في الكتاب من خلال إجراء تشابه مع أبعاد المنزل أو الغرفة. لذا بنفس الطريقة التي يمكننا بها وصف غرفة معينة في المنزل من خلال الحديث عن ارتفاعها وعرضها وعمقها. ثم يمكننا التحدث عن المعمارية من خلال الحديث عن هذه الأبعاد الأربعة المختلفة.
[06:28] ولكن الطريقة التي أحب أن أصفها هي التفكير في المعمارية كما لو كانت شخصية في لعبة فيديو. الآن إذا كان هذا لا معنى له، وأعدكم أنه سيكون من المنطقي في دقيقة واحدة. فكر الآن في لعبة فيديو، مثل دور يلعب لعبة فيديو أو لعبة لعب الأدوار حيث يكون لديك شخصية يجب عليك تحديد سمات مختلفة لإنشاء شخصيتك، أليس كذلك؟
[06:54] هذه الشخصيات عادة ما يكون لها فئة. في هذه الحالة، إنه آرتشر. يمكن أن يكون محاربا. يمكن أن يكون، كما تعلمون، ساحر أو ساحر أو شاعرية، اعتمادا على اللعبة. وهذا يحدد الشكل العام وشكل ومظهر الشخصية. تحتوي الشخصيات أيضًا على سلسلة من الإحصائيات التي هي أشياء مثل القوة أو السرعة أو البراعة التي تحدد بعض قدرات الشخصيات ونقاط قوتها وضعفها.
[07:23] وكل شخصية، حتى لو كانوا من نفس الفئة. سيكون كل حرف فريدًا اعتمادًا على كيفية الجمع بين هذه الإحصائيات المختلفة. ثم لدينا خلفية الشخصية. هذه هي الخلفية. شخصيتهم، قصتهم الأصلية، كما تعلمون، كل الأشياء التي مروا بها، الأشياء التي يهتمون بها، القرارات التي سيتخذونها.
[07:45] وأخيرًا، تمتلك الشخصيات سلسلة من المهارات التي يمكن أن تكون هذه القدرات قدرات خاصة أو يمكن أن تكون قدرات مشتركة، مثل رمي سهم أو أي شيء. الآن، السبب في أننا نتحدث عن شخصية لعبة فيديو هو أنني أعتقد أن هذه الأشياء الأربعة التي يمكننا استخدامها لتحديد شخصية، يمكننا تعيينها بشكل جيد حقًا لهذه الأبعاد الأربعة لمعمارية البرمجيات.
[08:09] فئة الشخصية، مثلًا، تقابل النمط المعماري بصورة واضحة. فقد يكون النمط المعماري خدمات مصغّرة، أو معمارية طبقية، أو معمارية أحادية البنية، أو معمارية قائمة على الأحداث، وهكذا. وكما تحدّد فئة الشخصية شكلها وطابعها العام، يحدّد النمط الشكل العام للمعمارية.
[08:34] في كثير من الحالات، أشرنا حتى إلى المعمارية أو إلى أسلوب المعمارية مثل المعمارية نفسها. نقول عادة أن لدينا بنية الخدمات المصغرة، حتى لو كان ذلك لا يقول الصورة بأكملها بالضرورة.
[08:48] ثم لدينا إحصاءات الشخصية، وهي تقابل الخصائص المعمارية؛ وهذا اسم آخر لما سمّيناه سابقًا سمات الجودة. المعنى واحد، لكن المعماريين يستخدمون أحيانًا أسماء مختلفة للشيء نفسه. ومن أمثلتها الأداء وقابلية التوسّع والموثوقية والمرونة وقابلية النشر. كثير منها يُعرف بالإنجليزية باسم «ilities» لأن أسماءها تنتهي بالمقطع «ility»؛ فإذا رأيت اسمًا بهذه النهاية، فغالبًا يكون من هذه الخصائص.
[09:16] وبنفس الطريقة التي تعطي بها كل بنية الأولوية لأشياء مختلفة، أو كل شخصية في لعبة فيديو ستعطي الأولوية لأشياء مختلفة. سيكون لكل بنية مجموعة مختلفة من الأولويات عندما يتعلق الأمر بالخصائص التي تدعمها. وكما هو الحال مع هذه الشخصية، لا يمكننا حقًا منحهم نقاط القوة في جميع المجالات. لا يمكننا أن نعطيهم 100 نقطة في جميع إحصائياتها.
[09:41] لا يمكننا أيضًا تحديد أولويات جميع الخصائص في نفس الوقت. يتعلق الأمر باختيار الأولويات أو ما هي الأشياء التي نهتم بها أكثر من غيرها، مما سيساعدنا على تقييم المقايضات المختلفة.
[09:51] ثم لدينا قصة الخلفية، وأعتقد أنني أحب أن أفكر في هذا كقرارات معمارية. سنتحدث عن القرارات المعمارية في مقطع فيديو لاحق، ولكن في الوقت الحالي يمكنك التفكير فيها كدليل هيكلي. في بعض الأحيان هناك قواعد، في بعض الأحيان، أو معظم الوقت هناك مبادئ توجيهية من شأنها أن تساعد فريقك نوع من التنقل تعقيدات تنفيذ فعلا قطعة من البرمجيات.
[10:15] على سبيل المثال، في بنية الخدمات المصغرة. أحد القرارات التي قد تتخذها هو كيف ستتواصل الخدمات المختلفة مع بعضها البعض؟ لذلك سوف تشمل هذه ما هي البروتوكولات التي يجب عليك استخدامها أو القواعد التي يجب اتباعها عند التواصل مع خدمات مختلفة والأهم من ذلك، القيام به. كما تعلمون، ما هو البروتوكول المدعوم أو ما هو القرار، هو توثيق لماذا اتخذنا هذا القرار.
[10:37] لذلك هذا ما سنتحدث عنه عندما نتحدث عن سجلات القرارات المعمارية لاحقًا في وحدة متابعة.
[10:45] وأخيرا، لدينا مهارات الشخصية التي في ذهني أنها خريطة بشكل جيد حقا إلى المكونات المنطقية. هذه هي الوحدات الخاصة بك، مكونات واجهة المستخدم، نظام التصميم الخاص بك، الطبقات الخاصة بك، وظائف الخاص بك، أساسا كل من اللبنات الأساسية التي تجعل فعلا المعمارية الخاصة بك أو البرنامج الخاص بك.
[11:04] لذا بنفس الطريقة التي يمكننا بها التفكير في الشخصية في لعبة الفيديو كمزيج من كل تلك الأشياء والسمات والخصائص المختلفة، يمكننا التفكير في المعمارية كمزيج من هذه الأبعاد الأربعة.
[11:19] إذا أردنا وصف ما هي المعمارية وكيف تبدو، فعلينا استخدام هذه الأبعاد الأربعة لأن استخدام واحد أو اثنين منهم فقط سيعطينا صورة غير مكتملة. شيء آخر أحبه في هذا النموذج هو أن كل الأشياء التي كنا نتحدث عنها عامة حقًا. لقد استخدمنا الخدمات المصغرة هنا كمثال، ولكن في الواقع كل هذه المفاهيم تنطبق بغض النظر عن أي جزء من هذه المكدس كنت تعمل مع، مما يعني أنه يمكننا استخدامه كذلك لوصف ما نعنيه المعمارية الواجهة على وجه التحديد.
[11:50] وهذا ما سنفعله في الفيديو التالي.