2012-02-04 39 views
5

Tôi đang lập kế hoạch viết lại một ứng dụng sử dụng Zend FrameworkTwilio (để gửi và nhận tin nhắn SMS). Nhìn lại, tôi không nghĩ rằng tôi đã đặt tất cả các chức năng SMS ở đúng nơi. Điều này đã làm cho việc nâng cấp trang web trở nên khó khăn.Vị trí bao gồm chức năng SMS trong ứng dụng MVC?

Hiện tại, tôi có bộ điều khiển SMS xử lý các yêu cầu từ Twilio (đối với tin nhắn đến). Tôi thực hiện một máy trạng thái hữu hạn (có, trong một phương thức hành động lớn) có thể xử lý các lệnh khác nhau. Phản hồi được gửi trực tiếp từ bộ điều khiển này, nhưng cũng từ các mô hình mà bộ điều khiển của tôi quản lý. Bởi vì điều này, tôi đã kết thúc với các mẫu tin nhắn SMS trùng lặp và nhầm lẫn về nơi chính xác một tin nhắn đã bắt nguồn.

Tôi nên làm điều này như thế nào? Tin nhắn SMS có nên được phân tích cú pháp và xử lý trong mô hình riêng của mình không? Hiện tại, tôi không có mẫu SMS - chỉ là một bộ điều khiển SMS. Hoặc, những gì bạn đề nghị?

Nếu có vấn đề, tôi đang lên kế hoạch viết lại ứng dụng của mình bằng CakePHP.

+2

Vâng, nó phải ở trong Model. Mô hình chứa Logic ứng dụng. Xem và điều khiển tạo thành một (nhiều người có thể) Giao diện người dùng cho Mô hình. Bạn muốn bộ điều khiển và mô hình chất béo mỏng. – Gordon

+0

bản sao có thể có của [trong MVC, bạn vẽ đường thẳng giữa bộ điều khiển và mô hình ở đâu?] (Http://stackoverflow.com/questions/3499336/in-mvc-where-do-you-draw-the-line- giữa-a-bộ điều khiển và mô hình) – Gordon

Trả lời

3

Tôi đã phát triển hơn một vài ứng dụng ZF sử dụng Twilio. Tôi có xu hướng hoặc sử dụng thư viện trợ giúp PHP của họ trong bộ điều khiển, hoặc (nếu nó là bất cứ điều gì khác hơn là một ứng dụng đơn giản) bọc helper của họ trong một lớp dịch vụ: Application_Service_SMS.

Vào thời điểm đó, gửi một tin nhắn SMS sẽ giống như thế này trong bộ điều khiển:

$sms->send($from, $to, $body); //$sms is a service object of the twilio lib 

Nhưng đó chỉ là phần gửi các câu hỏi, làm thế nào để bạn có được $body? Vì bạn đang chạy trong một khung công tác MVC, đề xuất của tôi là tách hai lớp (mô hình và khung nhìn), giống như bạn sẽ làm ở bất kỳ điểm nào khác.

Nếu mô hình xác định nội dung của Thông tin về, làm một cái gì đó như thế này trong điều khiển của bạn:

$this->view->model = $model; 
$body = $this->view->render('sms/' . $command . '.phtml'); 

Bạn sẽ phải chắc chắn rằng cơ thể ít có 160 ký tự (hoặc chia trên đó, và gửi nhiều tin nhắn). Và bạn đã thực hiện tin nhắn SMS có thể chỉnh sửa mà không thay đổi mô hình của bạn (vì thư thực sự là một phần của lớp xem).

Và vì với Twilio bạn có thể gửi tin nhắn SMS như một phần của TwiML một cuộc gọi thoại, bạn cũng có thể sử dụng lại thông điệp mẫu như thế này:

//inside a TwiML script 
<Sms> 
    <?php echo $this->partial('sms/cmd.phtml', array('model' => $this->model)); ?> 
</Sms> 
+0

D'oh! Tại sao tôi không nghĩ đến việc sử dụng các khung nhìn để tạo ra các tin nhắn? Đây là một cách tiếp cận tuyệt vời, cảm ơn bạn! –

+0

@SimpleCoder Một cái gì đó bạn có thể thấy hữu ích khi làm việc với Zend và Twilio: http://prezi.com/aee_eujg7grb/twilio-the-zend-framework-twiliocon-2011/ –

1

Phần ứng dụng phải chịu trách nhiệm gửi, nhận dữ liệu là mô hình.

Làm gì với chúng khi chúng được phân tích cú pháp chính xác là điều mà bộ điều khiển cần quan tâm.

Tôi coi câu trả lời dài hơn nhưng đây là câu trả lời cho câu hỏi của bạn ... Nếu bạn có bất kỳ câu hỏi con nào, vui lòng hỏi trong nhận xét.

+0

Ok cảm ơn. Vì vậy, tôi nên xác nhận đầu vào trong bộ điều khiển trước khi chuyển nó vào mô hình? –

+0

@SimpleCoder Nó phụ thuộc ... Loại xác thực là gì? Nếu bạn xác thực đầu vào biểu mẫu, bạn nên kiểm tra dữ liệu trong bộ điều khiển. Nếu nó kiểm tra đối với một số ký tự đặc biệt trong văn bản của sms, mô hình nên có một phương pháp để xác nhận hợp lệ dữ liệu (và kiểm tra chúng nội bộ trước khi gửi). Có thể viết trình xác nhận của riêng bạn. Nó nên được khá nhiều như chèn dữ liệu vào cơ sở dữ liệu. Có thể: 'ModelSMS' (không có xác nhận đầu vào),' ModelSMS_Reminder mở rộng ModelSMS' kiểm tra id người dùng hợp lệ. – Vyktor

+0

Ví dụ: một số lệnh nhất định chỉ có thể được gọi từ các số cụ thể. Ngoài ra, các số có thể bị chặn từ các lệnh gọi. Một cái gì đó như thế là khó khăn cho tôi để xác định xem nó nên được mô hình hoặc điều khiển. –

Các vấn đề liên quan