11

Tôi đã sử dụng Django trong nhiều năm (kể từ Django 1.2). và trong quá khứ, tôi đã sử dụng các loại khung web khác nhau (chẳng hạn như CakePHP, Rails, ASP.NET MVC và một số khung công tác toàn diện khác). Django không phải là khuôn khổ đầu tiên của tôi.Mô hình khung giống như Django

Các khuôn khổ khác nhau có sự khác biệt về cách tiếp cận và lợi ích của chúng. Có một phần nào đó của khung tôi thích và tôi thì không. Trong bối cảnh này, tôi muốn nhìn vào thiết kế của Django Framework cụ thể hơn.

Sau khi chuyển sang Django, tôi thích cách thiết kế khung của nó. Khi học một ngôn ngữ mới (như Go, Scala, Ruby, Haskell), tôi cố gắng tìm một khuôn khổ có một số điểm tương đồng trong thiết kế của nó, đặc biệt là những gì tôi đã đề cập sau.

Sau đây là 2 Django quyết định thiết kế khuôn khổ đó là rất khác nhau:

  • nó khuyến khích ứng dụng pluggable hoặc ứng dụng có thể dùng lại. Do đó:
  • nó sử dụng Model View Template thay vì cổ điển MVC:
    • được đề cập trong FAQ.
    • xem mô tả mà dữ liệu được trình bày
    • mẫu mô tả cách thức dữ liệu được trình bày
    • một cái nhìn bình thường đại biểu cho một mẫu
    • khiển có lẽ là khuôn khổ bản thân: các máy móc mà gửi yêu cầu đến chế độ xem phù hợp, theo cấu hình URL Django.

Tôi sẽ không tin rằng tính năng tiên phong của Django như vậy. Tôi tin rằng mô hình này rất phổ biến trong Framework Design. Chỉ là tôi không có ý tưởng, mẫu thiết kế (thiết kế) này được gọi là gì? Khái niệm này rất hữu ích để được áp dụng trong khuôn khổ khác. Tôi tin rằng biết tên của mô hình có thể giúp tôi hiểu hoặc thậm chí xây dựng một khuôn khổ mới về ngôn ngữ khác nhau với cùng một khái niệm.

Hiện tại có rất nhiều khung công tác web, hầu hết trong số họ đang theo mẫu MVC cổ điển. Một số sử dụng khái niệm plugin để thêm khả năng nhất định. Tuy nhiên, Plugin giải quyết khả năng sử dụng lại theo cách tiếp cận khác nhau tùy thuộc vào ngữ cảnh.

Vì vậy, tôi đã cố gắng tìm hiểu nhiều khuôn khổ tôi có thể để tìm một khung thay thế bằng các ngôn ngữ khác nhau. Hy vọng rằng tôi có thể tìm ra mô hình mà Django sử dụng.Tuy nhiên, tôi rất khó học được all of them. Trong thực tế, tôi đã không tìm thấy một cho đến nay.

Tôi đã được tìm kiếm:

Thật không may, không ai trong số họ thực sự, làm nổi bật khái niệm mà tôi quan tâm.

Trong Q & A, tôi muốn biết mọi người gọi khung như thế nào? (Hoặc những gì mô hình là Django sử dụng?) Sẽ là tốt nếu bạn có thể cung cấp cho một tài liệu tham khảo trong thiết kế này mà khuôn khổ khác có thể đã được sử dụng nó quá?

+0

Đừng rơi vào điều này giống như để so sánh. Thật ra tôi cũng đang tìm kiếm mẫu này nhưng tôi thấy rằng không phải mọi ngôn ngữ đều mang lại cùng một trải nghiệm và sức mạnh biểu cảm như một thứ khác. PHP khác với ruby ​​và Scala khác với Go. Khung của họ cũng khác nhau. Django là duy nhất cho nó là gì. –

+0

@FanisDespoudis, Đồng ý rằng chúng tôi không nên tìm ra khung sự thật duy nhất, khung công tác khác nhau có khả năng khác nhau. Họ cũng phục vụ tốt hơn trong miền khác nhau. Chỉ cần câu hỏi này là nhằm mục đích học mẫu, để chúng ta có thể áp dụng cho các miền khác nhau. – Yeo

+0

Tôi không chắc chắn lý do tại sao những người downvoters nên downvote câu hỏi này. Hy vọng chúng tôi không so sánh khung nào tốt hơn. Nhưng thay vào đó chúng ta học những gì chúng ta có thể từ các khuôn khổ khác nhau. Câu hỏi – Yeo

Trả lời

1

Điều gì là về django mà bạn không thể làm bằng các ngôn ngữ khác?

  • là truy cập vào cơ sở dữ liệu hay mô hình? - không, python cũng có SQLAlchemy; ruby có Active Record ...
  • là chế độ xem hoặc khung web? - không, bạn có thể cung cấp chế độ xem với Flask, Pyramid, rails, php ...
  • đó là hệ thống templating? - không, bạn cũng có Jinja; mustache, Liquid ...
  • là gói admin contrib? - không, bạn có phpmyadmin, workbench ...
  • là một bộ thư viện để giúp bạn phát triển dễ dàng? một bộ công cụ?

django có công cụ tuyệt vời , nhiều gói bạn có thể sử dụng; nó là nền tảng , có nghĩa là nó có đủ cốt lõi làm điểm xuất phát của nhiều dự án và đủ cộng đồng đằng sau nó để có nhiều gói để tích hợp vào giải pháp chìa khóa trao tay một cách dễ dàng.

django sử dụng DRY (Don't Repeat Yourself) nguyên tắc làm triết lý thiết kế. Từ điểm có thể sử dụng lại, việc giữ các trách nhiệm rõ ràng cho từng phần/ứng dụng giúp dễ dàng sử dụng lại các thành phần. Nhưng điều đó không có một nền tảng được thiết kế tốt; sự nhấn mạnh nên được trên các thành phần được viết theo một cách để được tái sử dụng. Ví dụ. gắn thẻ chung, cấu hình/data-driven linh kiện ...

+0

Tôi quan tâm đến khả năng sử dụng lại ứng dụng. Tôi đồng ý với các khía cạnh bạn đã đánh dấu. Chúng là phổ biến trong hầu hết các khuôn khổ, nhưng không phải là ứng dụng reusability. Bạn đã nghe về [Flask-blueprint] (http://flask.pocoo.org/docs/latest/blueprints/). Nó cũng sử dụng cùng mẫu với các ứng dụng Django. – Yeo

+0

nếu bạn ngụ ý nguyên tắc ** DRY ** (không lặp lại chính mình), vâng, 'django' sử dụng nguyên tắc đó làm triết lý thiết kế/hướng dẫn. – dnozay

+0

Tuyệt. Một điểm: Tôi sẽ không so sánh Django 'admin' với 'phpmyadmin' hoặc' workbench' mặc dù, thậm chí không đóng. – Wtower

2

Nhìn vào Django design philosophies

Tôi nghĩ rằng họ sử dụng/kết hợp rất nhiều mẫu thiết kế khác nhau cố gắng để thực hiện triết lý. Thật khó để lập bản đồ cho một khái niệm duy nhất.

Mẹo là xem Software Design Pattern và có thể xác định nhiều mẫu được sử dụng trong django. Nhiều mô hình tất nhiên cũng phổ biến trong các khung công tác khác.

Ví dụ (mẫu ít nhiều đã qua sử dụng):

  • modelform_factory bản đồ để "Builder"
  • QuerySet có thể được ánh xạ tới "Lazy khởi"
  • Các ORM/cơ sở dữ liệu ánh xạ tới "Adapter"
+0

Cảm ơn bạn đã đưa ra một số ví dụ về cách các mẫu thiết kế được áp dụng và ánh xạ trong các phần khác nhau của Django trong nội bộ. Tôi đã bao gồm một số tham chiếu đến mã nguồn django vào ví dụ của bạn. – Yeo

0

Django là MVC.

MVC là mẫu không phải là khung quy tắc nghiêm ngặt phải áp dụng. Mẫu cố gắng đưa ra một giải pháp thường được chấp nhận cho một vấn đề thường gặp. Vấn đề là "Làm thế nào để tổ chức đúng một khuôn khổ web" và giải pháp là "bằng cách tách dữ liệu, logic và giao diện người dùng" trong các mô-đun có ý nghĩa.

Do đó Django là MVC. Django phân tách logic các khái niệm đó (và nhiều khái niệm khác) trong các mô-đun. Đó là những gì quan trọng IMO. Django xem là không giống như MVC xem, nhưng ... poteto potato ...

Về ứng dụng có thể dùng lại:

Django là Khung web cho cầu toàn (...)cầu toàn (hoặc đơn giản là các nhà phát triển giỏi) viết mã tái sử dụng được. Điều này được thể hiện bởi Django DRY philosophy và materializes trong các ứng dụng Django.

Tôi khá chắc chắn bạn có thể thiết kế các thành phần giống như ứng dụng với các khung công tác web khác. Tất nhiên, kể từ khi ứng dụng là trong bản chất của Django kể từ nhiều năm, nó có hỗ trợ tốt hơn nhiều!

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