سؤال

لدي سؤال محدد، يمكن أن تستخدم إجابة عامة ... عند بناء تطبيقات متعددة الطبقات في PHP، هل يجب القيام بكل شيء في طبقة منطق العمل، أو هل يمكن لأي طبقة تعمل ... مثال، دعني أقول 'M بناء تطبيق يظهر معلومات المستخدم (من قاعدة البيانات) على طبقة العرض التقديمي. يجب أن أستخدم طبقة العمل لتمرير البيانات ببساطة إلى طبقة العرض التقديمي، أو فقط احصل على المعلومات من قاعدة البيانات مباشرة ضمن طبقة العرض التقديمي. إذا تم استخدام طبقة العرض التقديمي فقط لعرض البيانات، فإن طبقة الملحق المستخدمة فقط للحصول على البيانات، ويتم تنفيذ كل العمل في طبقة العمل؟

أيضا، التحدث عن الطبقات المختلفة، هل من الأفضل القيام بالأشياء من الناحية الإجرائية، أو استخدام OOP (مثل استخدامها لإظهار القوالب VS باستخدام فئة لتضمين القوالب، والتحقق من صحة البيانات إجرائيا باستخدام فئة، أو وظائف فئات مقابل الحصول عليها البيانات من قاعدة البيانات، وما إلى ذلك)

كما ترون، أحاول أن أفهم كيف تعمل الأمور، وأفضل طريقة للقيام بالأشياء. التي يقال، إذا كان لديك أي نصيحة، أو أي نصائح عامة حول الموضوع ... يرجى تركها ..

شكرا

هل كانت مفيدة؟

المحلول

تطبيقات الويب و N-Tier مثيرة للاهتمام، ومعظمها لأن فكرة N-Tier قد توسعت مع اعتماد JSON و AJAX أو Flash و XMLRPC. هذه الرسم البياني على Webopedia. يعرض خطا أزرق متداخلا يعبر عن هذا جيدا. لتلخيص: عملك، الملحق، ومنطق العرض التقديمي لا يمكن أن يكون موجودا فقط على الخادم - ولكن في بعض الحالات، مباشرة في المتصفح. نية n-tier، ومع ذلك، فصل. وبعد إذا كنت بحاجة إلى تغيير UI أو قاعدة البيانات الخاصة بك، أو أضف UIS آخر، فلا يجب أن تؤثر على منطق عملك. وهذا ما سيحدد واجهة برمجة التطبيقات الخاصة بك - توقع في اليوم الذي يتم فيه التخلص من HTML و CSS الخاص بك ل Flex، ويتم تغيير mysql لأوراكل.

هذه هي المتطلبات المحددة، وفي بعض تطبيقات الويب التي استخدمتها، يتم استخدام اختلافات N-Tier في وقت واحد. خذ على سبيل المثال Lyrishq (البريد الإلكتروني ASP). لديهم تطبيق ويب للعملاء. في الآونة الأخيرة، يحدقون دفع تطبيقهم القائم على الفلاش. هذا بوضوح هو شحن الكثير من البيانات الحق في المتصفح، وربما يكون هناك جزء من المنطق التجاري المكرر في واجهة المستخدم فلاش. يجب أن يحافظوا على كلا الطلبين، ومع ذلك، لأن أحدهما ضروري لمتطلبات مختلفة (وتداخل).

معظم تطبيقات PHP شيوعا لا تفكر في الشحن الكثير من البيانات غير المنسقة إلى المتصفح. ولكن إذا كنت قد أبلغكم بسرعة أكبر بكيفية ترغب في تصميم واجهات برمجة التطبيقات الخاصة بك. من المحتمل جدا، كنت تريد أن تتحدث أجهزة التحكم التي يمكن أن تتحدث xmlrpc أو بقية أو صابون ... بالإضافة إلى فئة وحدة تحكم داخلية مماثلة تستخدم قوالب عرض PHP الخاص بك. هذا يعني بدقة للحصول على صفحة بسيطة تسجيل دخول الويب، سيكون لديك قالب PHP لنموذج تسجيل الدخول الذي تحدث إلى فئة LoginController. وسوف تستخدم واجهة XML نفس فئة LoginSontroller نفسها. تماما كما تفترض أنك ستكون Bonkers لكتابة SQL في طلب AJAX ... ستتمكن من تجنب استفسارات الكتابة بدقة في قوالب العرض التقديمي.

يمكن أن تكون طبقات العمل أكثر أو أقل صارمة، لأنها غالبا ما يكون هناك متطلبات لا تبديل العلامات التجارية في نهاية قاعدة البيانات. في تصميم صارم N-Tier، كيف ستتحدث كائنات عملك إلى قاعدة البيانات الخاصة بك كما لو كنت تستطيع التبديل من MySQL إلى MS SQL دون إعادة كتابة المستوى التجاري. في بعض الأحيان يتم ذلك عن طريق كائنات النمذجة لكل جدول (بوابة الجدول)، كل صف (سجل نشط)، كل تعليق، أو كل معاملة. هذا هو المكان الذي يكون فيه شيء مثل PDO أو PHP-ADO مفيدا، ولكنه غير كاف لعزل كامل. توضح طبقات Orm / الثبات في Java مثل السبات أفضل هذا النوع من العزلة، وغالبا من خلال توفير لغة استعلام كائن (OQL).

نفسي، أنا حاليا إجراء انتقال خلفي من تطبيق PHP المستند إلى MySQL إلى MS-SQL One. لقد استخدم التطبيق فقط استعلامات SQL مباشرة. تخيل اختيار كيفية اتخاذ سلسلة من الاستفسارات في الفصل وإما تجريبي لهم، أو الفئة الفئة الفرعية، ونأمل في عدم تغيير منطق الأعمال. في الحد الأدنى، سوف ترغب في جعل كل مكالمات SQL الخاصة بك غير مباشرة. فيلذلك نشر على أورم فب.)

وأخيرا، لسؤالك حول OOP: استخدمه كيف يجب عليك الوفاء بمتطلباتك. تقنياتي الشخصية هي البدء في المنطق الحق في قالب عرض PHP لبضع دقائق للحصول على المتداول الكرة، قريبا جدا سوف أعد الاندماج ذلك في فئة وقوالب. إذا كان لدي أفكار مشتركة، فأنا اخترع الروتين في فصول مشتركة، واستراتيجية للحفاظ على مبدأ DNRY. (أ لذلك نشر ذلك هنا. OOP ليس شرطا أساسيا لتصميم N-Tier. Dnry مهم جدا للحفاظ على شهادة رمزك، ثو. في كثير من الأحيان المواعيد النهائية والنطاق - تدمير API. إعادة تكوينه حتى تحصل على ما تحتاجه للحفاظ على الذهاب. أراهن أن OOP سوف تساعد في الحصول على هناك.

نصائح أخرى

قرأت مرة واحدة قائلة إن النماذج الكبيرة (طبقة العمل) يجب أن تكون المفضلة على وحدات التحكم الكبيرة (طبقة الملحق).

أيضا: يعتمد حقا على المشروع. في عيني، لا معنى لها دائما استخدام OOP لكل شيء (ربما لن يوافق الجميع هنا)، خاصة في لغات البرمجة النصية مثل PHP، من الأسهل ببساطة القيام بالمصادف كوظائف ...

أنا بالتأكيد أنصحونك بعدم الحصول على مكالمات قاعدة البيانات في طبقة العرض التقديمي، من شأنها أن تهزم الغرض منها.

هناك مناهج مختلفة ل هندسة متعددة الطبقة ولهم توصيات مختلفة.

Zend Framework الذي عملت معه هو عادة من نوع النموذج الدهون / وحدة تحكم رقيقة.

إذا وجدت هذه المقالة ملاحظات على اختيار إطار PHP أن تكون جيدا في مقارنة (في هذه الحالة) CakePhp إلى إطار zend.

الفرق الأكبر في أوفيونيون هو النهج المفرط من الاتفاقية التي اتخذتها CakePhp التي تختلف اختلافا جدا عن التركيز التكوين في إطار Zend.

باستخدام إطار عمل، مما يجعل الكثير من الشعور إذا كان تنفيذ هندسة متعددة الطبقات، فإنك في وسيلة أجبرت أو على الأقل دفعت إلى استخدام OOP، وهذا ليس شيئا سيئا.

يمكن أن تنفذ بالطبع، كما يقول بنية 3 طبقات مع مكالمات وظيفية خالصة، لكنها لن تتجاوز تلك التي تستند إلى تجربتي.

للحصول على موقع على شبكة الإنترنت نمط MVC الذي هو في الواقع مختلفا تماما بسبب الطريقة التي تتواصل فيها Tiers، هي خيار جيد.

الفرق بين "عادي" 3 رقص "المستوى 3 - نمط MVC هو أن الرأي لديه إمكانية الوصول إلى كل من وحدة التحكم وطبقة النماذج، حيث يتمكن طبقة العرض التقديمي فقط من الوصول إلى طبقة المنطق من القوس 3-Tier.

وأنا أتفق مع ما قاله فرانز، خاصة حول أفضل النماذج الكبيرة على مراقبين أكبر .. يمكنك أيضا استخدام قاعدة إبهام للمساعدة في التمييز حيث يجب أن تذهب الكود: إذا كان لديه أي علاقة مع هيكل / تدفق UI، ضعه في مراقب؛ إذا كان منطق الأعمال الخالص، فإنه يذهب في النموذج ..

سأضيف ذلك كمطور Java كان لديه الكثير من الخبرة مع الدعامات قبل اختبار مياه PHP، استغرق الأمر مني بعض الوقت لفهم كيفية تطبيق أفكار MVC بلغة البرمجة النصية .. لقد وجدت شخصيا أن استخدام نظام مثل Codeignitor. ساعد كثيرا .. يوفر الإطار، مثل الدعامات، ويشجع أنماط MVC جيدة ..

عالم بلدي يبدو وكأنه هذا:

DB1 <- model1 لتوفير وظائف الملحقات ونزاهة البيانات والقواعد التجارية لهذه البيانات تعيين DB2 <- model2 لتوفير وظائف الملحقات ونزاهة البيانات والقواعد التجارية لهذه البيانات

تحكم: يتحكم في تدفق البيانات إلى المشاهدات، المرشحات / تنظم البيانات من المشاهدات. ينفذ قواعد الأعمال للنظر تطبيق. وبعد يعرف قواعد الأعمال ما بين عارضات ازياء.

المشاهدات: لا شيء أكثر من القوالب التي تعرض البيانات المقدمة من وحدة التحكم. اجتياز جميع البيانات إلى وحدة التحكم. لا يوجد لديه معرفة نموذجية أو نموذج 2 أو منطق الأعمال الذي يحكمهم.

أوصي بعمل بعض الأبحاث على أنماط التصميم لأن هذه هي القطعة المفقودة من اللغز الخاص بك. هناك عدد من الكتب الخاصة ب PHP التي تغطي هذا الموضوع (تلك الموجودة من البرنسيين جيدة) وكذلك "الكتاب المقدس" لأنماط التصميم: "أنماط التصميم: عناصر البرامج الموجهة نحو الكائنات القابلة لإعادة الاستخدام"

دعنا ننتظر نسخة أكثر استقرارا من عقيدة 2.

يتم تطويرها مع فلسفة كائن المجال الجاهل للمثابر. سيكون من الأسهل بكثير تطوير تطبيق متعدد الطبقات بمساعدة هذا الإطار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top