2012-02-12 27 views
9

Tôi đang học CodeIgniter và các mẫu phần mềm của nó. Mà nên được tạo ra đầu tiên, xem hoặc bộ điều khiển?Mẫu MVC: những gì cần phải được tạo đầu tiên?

+1

Nói chung, tôi đồng ý với @Shiplu rằng câu hỏi quá rộng. Tuy nhiên, tôi nghĩ rằng nó thực sự dẫn đến một số câu trả lời tích cực, vì vậy nó chỉ hữu ích này một lần. Tôi sẽ đề nghị người qua đường kiểm tra một số câu trả lời khác nhau được cung cấp. – rdlowrey

+0

Số câu trả lời khác nhau thú vị. Vì vậy, tôi nghĩ câu hỏi hay. Cá nhân tôi nghĩ rằng phần lớn điều này phụ thuộc vào sự đơn giản của dự án và số lượng tài nguyên trong nhóm. Tôi nghĩ rằng rất nhiều nhà phát triển duy nhất sẽ di chuyển nhanh hơn làm việc trên xuống, ui để mô hình hóa. Và ở một số công ty, các thông số kỹ thuật sẽ là khung dây hoặc HTML.Tôi nghi ngờ có một câu trả lời phù hợp với tất cả. – Gavin

Trả lời

11

Mẫu vì đó là ứng dụng của bạn. Controller và View chỉ tạo thành một giao diện cho Model. Người ta có thể nói, bộ điều khiển là cánh cửa đến nhà bạn. Bạn xây dựng cái gì trước? Cánh cửa hay ngôi nhà? Phải, vì vậy hãy xây dựng Mô hình trước. Sau đó, thêm một giao diện cho nó.

+0

+1 Đây là cách chúng ta 'làm việc', tôi nghĩ nó dẫn đến một mô hình/api phát triển tốt hơn và hỗ trợ TDD. Thỉnh thoảng chúng tôi phá vỡ quá trình và làm việc trên xuống mặc dù, thường là khi chúng tôi có yêu cầu được xác định kém, hoặc tham gia quá nhiều chủ sở hữu cổ phần và các cuộc biểu tình. Nó cũng cho phép backlog được tách ra trên nhiều nhà phát triển/nhà thiết kế dễ dàng hơn, tức là phụ trợ/ui. – Gavin

0

Bộ điều khiển, bạn cần nó để giao tiếp giữa mô hình và chế độ xem. Không có bộ điều khiển, mô hình không thể tương tác với chế độ xem.

1

Bộ điều khiển là phải. Bởi vì bạn không thể thực thi/hoàn thành công việc mà không cần có bộ điều khiển. Vì vậy, điều khiển đến trước vì sau,

  1. Bạn có thể tắt chế độ xem khi cần thiết
  2. Bạn có thể thiết lập các biến có liên quan đến quan điểm thông qua bộ điều khiển
  3. Tương tác với các mô hình được thực hiện bởi bộ điều khiển, vì vậy khi bạn yêu cầu dữ liệu bộ điều khiển đến trước tiên
  4. Bạn có thể chuyển hướng người dùng đến bộ điều khiển khác
  5. Bạn có thể hiển thị chế độ xem khác dựa trên yêu cầu. Đối với máy tính xem A và đối với thiết bị di động, xem B, giống như khôn ngoan
  6. Chế độ xem là bản trình bày, vì vậy trước tiên bạn cần dữ liệu để trình bày.
7

Tôi luôn luôn bắt đầu bằng Chế độ xem. Kịch bản là, tôi đã thiết kế cơ sở dữ liệu của mình, đã chọn công nghệ. Đây là luồng công việc của tôi trên mẫu MVC.

  1. Tạo mẫu html với CSS/hình ảnh vv
  2. Tùy thuộc vào những dữ liệu được hiển thị trên xem tôi có thể tạo các phương pháp điều khiển.
  3. Tôi đặt dữ liệu giả trong các phương pháp điều khiển để tôi có thể xem trang động điều chỉnh chế độ xem đúng cách.
  4. Theo dữ liệu bộ điều khiển của tôi cần tôi tạo Phương thức mô hình.

Trong quá trình này, tôi không bao giờ tạo bất kỳ phương thức hoặc khối mã bổ sung nào. Nó ngăn chặn để thêm mã mà chúng ta thường nghĩ rằng "có thể là cần thiết". Nhưng họ không bao giờ cần thiết.

Bằng cách này, bạn đang tạo đặc điểm kỹ thuật trước, sau đó triển khai nó trên mỗi bước. Vì vậy, nó giống như, View tạo ra các yêu cầu dữ liệu cho nó. Controller cung cấp nó. Và tạo ra đặc tả dữ liệu cho Model. Cuối cùng, Model chỉ cung cấp những dữ liệu được gọi hoặc cần thiết.

+0

Chăm sóc để giải thích phiếu bầu? –

+0

+1 Đây là phương pháp tiếp cận từ trên xuống hoàn toàn hợp lệ. Chắc chắn hoạt động tốt khi lên đặc tả logic phía trước hoặc thiết kế mô hình bị thiếu/không được coi là sử dụng hợp lệ nỗ lực. Tất cả phụ thuộc vào hoàn cảnh và yêu cầu của QA. Đối với nhiều ứng dụng không có gì có thể được dễ dàng hơn hoặc nhanh hơn sau đó làm việc trên xuống. – Gavin

+0

+1 Trong những ngày cũ, khi chúng tôi sử dụng notepad để preapre trang tĩnh, tất cả chúng ta đều sử dụng thiết kế đầu tiên apprach. Trong những ngày xưa nó có ý nghĩa hoàn hảo mặc dù nó có lẽ rất nhiều dựa trên sự lựa chọn cá nhân. Tôi tin rằng nếu bạn đang phát triển một dự án của riêng bạn thì điều này tạo nên một cảm giác hoàn hảo. –

0

Tôi sẽ nói tay mô hình và bộ điều khiển trong tay.

Nếu không có mô hình, bạn sẽ biết điều gì sẽ là luồng trong bộ điều khiển?

Nếu không có bộ điều khiển, bạn sẽ biết phương pháp nào cần thiết trong mô hình?

Đôi khi, mô hình được ưu tiên, đôi khi điều khiển tùy thuộc vào tình huống.

1

Mặc dù câu hỏi đã có câu trả lời được chấp nhận nhưng tôi muốn đưa ra cách tiếp cận từ quan điểm kiểm tra. Các khung làm sẵn thường là không thiết kế bộ điều khiển của họ với khả năng kiểm tra trong tâm trí, do đó, loại câu hỏi này liên tục nảy sinh.

Một bài báo hay, kiểm chứng điều khiển nên có quan điểm như một sự phụ thuộc tiêm qua phương pháp của bộ điều khiển __construct. Tuy nhiên, tôi không biết liệu các bộ điều khiển CodeIgniter có cho phép chức năng này hay không. Trong mô hình MVC, Bộ điều khiển "tập hợp" các phần tử của View và Model, vì vậy, giống như bất kỳ phụ thuộc hành vi nào, nếu các đối tượng này cung cấp bất kỳ chức năng nào ngoài lưu trữ dữ liệu "câm", chúng sẽ được đưa vào bộ điều khiển của bạn tại thời điểm khởi tạo để chúng có thể được chế nhạo nhằm mục đích thử nghiệm. Vì vậy, bạn sẽ thực hiện một số việc như sau:

$view = new SmartyView; 
$model = new UserModel; 
$controller = new LoginController($view, $model); 

Thông thường, mô hình không cung cấp bất kỳ phương thức "hành vi" công khai nào và hoạt động như một thực thể lưu trữ dữ liệu cơ bản. Nếu đây là trường hợp, với cùng lý do bạn không cần phải tiêm một cấu trúc dữ liệu mảng vào bộ điều khiển của bạn để tạo mảng mới, bạn có thể an toàn tạo ra các trường hợp mô hình mới trong điều khiển của bạn mà không bị mất testability:

class LoginController 
{ 
    protected $view; 

    public function __construct(ViewInterface $view) 
    { 
    $this->view = $view; 
    } 
    public function doLogin($user, $pass) 
    { 
    $userModel = new UserModel(); 
    // do stuff with model to determine if user/pass was valid 
    } 
} 

$view = new SmartyView; 
$controller = new LoginController($view); 

Đối với testability, thực hành tốt nhất là để tránh kết nối chặt chẽ bộ điều khiển của bạn để quan điểm và các mô hình của bạn. Đây là lý do tại sao bạn nên tránh sử dụng từ khóa new bên trong mã điều khiển của mình. Bộ điều khiển của bạn - và bất kỳ đối tượng nào khác, cho rằng vấn đề - nên ASK cho các phụ thuộc của nó, không phải XEM cho chúng. Điều này sẽ dẫn đến các API minh bạch hơn, nhiều mã có thể kiểm thử hơn, ít rắc rối gỡ lỗi hơn và bạn hạnh phúc hơn.

+0

Phần này làm tôi bối rối một chút. Làm thế nào bạn sẽ kết thúc việc cung cấp thông tin liên quan đến điều khiển trong suốt vòng đời yêu cầu? Nói chung, bộ định tuyến/bộ điều phối thực hiện cuộc gọi rất đơn giản như '$ route-> set ('/ uri/to/match', 'ControllerName', 'controllerAction'); ' Những gì bạn mô tả là cái gì đó sẽ vô cùng tẻ nhạt để viết mã trong một dự án lớn, bao gồm việc áp dụng một số chức năng ẩn danh cho router/dispatcher mà sau đó xử lý các instantiations trước khi truyền chúng cho bộ điều khiển. Và nếu một mô hình phụ thuộc vào các mô hình khác thì sao? – AgmLauncher

0

Tôi biết đây có thể là câu hỏi cũ, nhưng bây giờ tôi đã gặp phải vấn đề này.
Và người khác có thể cần đến sau. Vì vậy, tôi quyết định tóm tắt nó.
Tôi nghĩ rằng cách tiếp cận của bạn sẽ phụ thuộc vào hoàn cảnh.
Hãy thứ tự của các hoạt động bạn thực hiện được điều này MVC
Và phép gọi nó là dưới-To-Top cách tiếp cận. Trường hợp và lý do cho điều này được cung cấp bởi @Gordon here.
Và một trường hợp khác cho phép gọi số này là Top-To-Bottom, khi bạn bắt đầu với giao diện người dùng. Trường hợp và lý do cho điều này được cung cấp bởi @ shiplu.mokadd.im here.
Đánh giá trường hợp của riêng bạn và chọn một trong số họ. Chúc may mắn!

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