سؤال

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

أنا البرمجة كبير تطبيقات الويب (PHP) و نحن باستخدام MVC و البرمجة رقيقة تحكم مثلا(الزائفة رمز يلي)

public savePersonAction() {
    $input = filter($_GET);
    ... input validation ...

    $result = $this->_service->savePerson( ? );

    ... etc
}

يجب أن savePerson في خدمة تأخذ حجة كامل $إدخال هيكل أو إطار (في PHP, مجموعة النقابي)?

E. g.هذا -

public function savePerson(array $input) {

أو يجب فصل جميع حقول الإدخال وتقديم "من الصعب" واجهة مثلا

public function savePerson($title, $firstName, $lastName, $dateOfBirth, ... etc.. for many more) {

شكرا

بول

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

المحلول

إذا كنت ستتبع روح MVC الخاص بك savePerson يجب ألا تقبل الطريقة المدخلات الأولية. لا ينبغي أن يقترن مباشرة بتنسيق البيانات القادمة من واجهة المستخدم. بدلاً من ذلك ، يجب أن تقبل الإدخال المحدد في شروط مجال الخدمة ، مثل كائن "الشخص". (يمكن أن يكون هذا مجرد مجموعة نقاطية مثل Cobby اقترح). ستكون مهمة طريقة إجراء وحدة التحكم في تعيين المدخلات الأولية للتنسيق المطلوب من قبل الخدمة.

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

بينما مثالك مثل savePerson($title, $firstName, $lastName...) هي الفكرة الصحيحة ، فهي عادة علامة سيئة عندما يكون لديك أساليب مع أكثر من 2 أو 3 وسيطات. يجب أن تكون قادرًا على تجميع الحجج المتعلقة بـ نوع من الكائنات ذات المستوى الأعلى.

نصائح أخرى

بلدي MVC التطبيقات منظم مثل هذا:تحكم -> الخدمات> ORM/مكتبة أخرى

للإجابة على سؤالك عادة في وحدة التحكم الخاصة بك وسوف يكون الحصول على نموذج البيانات مجموعة ، أي$form->getValues() أو شيئا من هذا القبيل.من حيث الصيانة فمن الأفضل إذا كان لديك الخدمات باستثناء المصفوفات كما الحجج بهذه الطريقة إذا قمت بإضافة حقل آخر إلى شكل, لديك فقط لتحديث نموذج الخدمة الخاص بك وحدة تحكم يمكن أن تبقى كما هي و لا تزال تعمل.

لذلك أعتقد مع المثال الأول:

public function savePerson($personArray);

وعلاوة على ذلك, يجب أن لا تحتاج إلى "الصعب" واجهة لأن شكل المكتبة سوف تأخذ الرعاية من التحقق من صحة/الترشيح/الإبراء لذلك يمكننا أن نفترض أن النقابي سيكون ساري المفعول بالإضافة إلى تعريف الأسلوب سوف تحصل طويلة يبعث على السخرية مع اسمه المعلمات.

أود أن أفصل جميع حقول الإدخال وأقدم واجهة "صلبة" في الخدمة على سبيل المثال

public function savePerson($title, $firstName, $lastName, $dateOfBirth) {...}

أنظفها ولا توجد افتراضات مطلوبة.

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