Câu trả lời:
Nếu một khung có ý kiến, nó sẽ khóa hoặc hướng dẫn bạn cách làm việc của họ.
Ví dụ: một số người tin rằng một hệ thống mẫu không nên cung cấp quyền truy cập vào các phương thức và chức năng do người dùng xác định vì nó để hệ thống mở để trả về HTML thô. Vì vậy, một nhà phát triển khung có ý kiến chỉ cho phép truy cập vào các cấu trúc dữ liệu. Theo thiết kế, phần mềm đang giới hạn và khuyến khích người thiết kế thực hiện mọi thứ theo cách của họ.
Một ví dụ khác ( lấy từ liên kết tín hiệu ) là wiki . Các nhà thiết kế của wiki đã có rất nhiều ý kiến. Họ nghĩ rằng HTML quá phức tạp đối với mọi người để viết, vì vậy họ đã nghĩ ra những gì họ cảm thấy là một cách tự nhiên hơn để cập nhật nội dung. Họ cũng loại bỏ thiết kế lạ mắt vì họ cảm thấy trọng tâm phải tập trung vào nội dung hơn là thiết kế.
Apple có ý kiến mạnh mẽ khi thiết kế sản phẩm của mình.
Thiết kế phần mềm không có ý kiến giống như PERL / PHP. Nó cho phép nhà phát triển và tin tưởng nhà phát triển đưa ra quyết định đúng đắn và đặt quyền kiểm soát nhiều hơn trong tay họ.
Tôi cũng sẽ đặt Microsoft trong cột không có ý kiến. Một ví dụ điển hình về khung Microsoft không được đề cập : .NET
. Bằng cách mở CLR và thông số kỹ thuật, nó đã mở nó cho tất cả các loại ngôn ngữ và phong cách triển khai.
Phần mềm ý kiến có nghĩa là về cơ bản có một cách ( đúng cách ™) để làm mọi thứ và cố gắng làm khác đi sẽ rất khó khăn và bực bội. Mặt khác, thực hiện mọi thứ đúng cách ™ có thể giúp phát triển phần mềm rất dễ dàng vì số lượng quyết định mà bạn phải đưa ra giảm đi và khả năng của các nhà thiết kế phần mềm tập trung vào làm cho phần mềm hoạt động được tăng lên. Phần mềm ý kiến có thể là tuyệt vời để sử dụng, nếu được thực hiện tốt, nếu vấn đề của bạn ánh xạ vào giải pháp độc đáo. Nó có thể là một nỗi đau thực sự để giải quyết những phần của vấn đề của bạn mà không ánh xạ lên các công cụ được cung cấp. Một ví dụ ở đây sẽ là Ruby on Rails.
Phần mềm không có ý kiến, mặt khác, để lại rất nhiều tính linh hoạt cho người dùng (nhà phát triển). Nó không đăng ký một phương pháp giải quyết vấn đề, nhưng cung cấp các công cụ linh hoạt có thể được sử dụng để giải quyết vấn đề theo nhiều cách. Nhược điểm của điều này có thể là do các công cụ rất linh hoạt, có thể tương đối khó để phát triển bất kỳ giải pháp nào. Nhiều hơn nữa giải pháp có thể phải được mã hóa bằng tay bởi người dùng (nhà phát triển) vì khung không cung cấp đủ trợ giúp. Bạn cũng phải suy nghĩ nhiều hơn về cách cung cấp giải pháp và các nhà phát triển tầm thường có thể kết thúc bằng các giải pháp kém hơn so với việc họ đã mua vào một số phần mềm gây tranh cãi. PERL có lẽ là ví dụ kinh điển của phần mềm không có ý kiến.
Lý tưởng của tôi là một khuôn khổ không quan điểm, nhưng một khuôn khổ với những quy ước mạnh mẽ. Tôi sẽ đặt ASP.NET MVC trong danh mục này. Trong thực tế, tất cả các phần mềm đều được đánh giá ở một mức độ nào đó (mặc dù có lẽ không phải PERL). MVC có các quy ước mạnh mẽ trong việc lựa chọn mô hình nhưng cung cấp nhiều cách khác nhau để giải quyết các vấn đề trong các quy ước đó. Một số trong những cách thậm chí có thể phá vỡ mô hình. Được sử dụng một cách chính xác, tuy nhiên, theo các quy ước phát triển trong một khung như vậy có thể là một niềm vui thực sự.
Về cơ bản, phần mềm hoạt động theo cách mà các tác giả của nó nghĩ rằng nó nên hoạt động, thay vì cố gắng làm hài lòng tất cả mọi người. Điều đó có nghĩa là nhiều người sẽ không thích nó, nhưng những người sẽ thích nó.
Rails có lẽ là ví dụ điển hình của một khung có ý kiến: bạn làm mọi thứ theo cách của họ, và mọi thứ đều suôn sẻ. Nếu bạn không, bạn đang đau. Nhưng điều đó không sao - nếu bạn không muốn làm mọi thứ theo cách của họ, bạn không muốn sử dụng Rails.
Để cân bằng, tôi sẽ cung cấp một mô tả (khá quan điểm) có lợi hơn cho cách tiếp cận có ý kiến (ngược lại với một số câu trả lời khác).
Các khung ý kiến cung cấp một "con đường vàng", được cho là cách thực hành tốt nhất cho hầu hết mọi người và hầu hết các kịch bản (trong mắt các tác giả).
Tuy nhiên, điều này không nhất thiết có nghĩa là khóa. Nó có nghĩa là nó có thể đòi hỏi một số nỗ lực thêm để làm những việc khác nhau.
Các khung ít quan tâm hơn cung cấp một số tùy chọn khác nhau và tùy thuộc vào bạn để quyết định.
Các khung ý kiến thường loại bỏ gánh nặng từ nhà phát triển để phát minh lại bánh xe hoặc suy nghĩ lại cùng một vấn đề và do đó giúp tập trung vào vấn đề thực sự trong tay.
Trong thế giới nguồn mở, bạn có thể tìm thấy nhiều khung công tác đang cạnh tranh, vì vậy bạn vẫn có một sự lựa chọn. Bạn chỉ cần chọn con đường vàng của riêng bạn.
Phần mềm ý kiến được xây dựng và thiết kế theo cách mà nó giúp bạn dễ dàng thực hiện mọi việc theo một cách nhất định. Nó ủng hộ các mẫu thiết kế nhất định hơn các mẫu khác. Trong quá trình đó, nó làm cho khó đi chệch khỏi phong cách phát triển phần mềm mà nó được phát triển. Một cách khác để đặt nó là nó ủng hộ "Công ước về cấu hình". tức là các tùy chọn cấu hình rất hạn chế vì phần mềm đảm nhận nhiều khía cạnh cấu hình. Phần mềm ý kiến thường nhanh hơn để làm chủ một khi các giả định được hiểu.
Mặt khác, phần mềm không được khuyến khích đưa ra một vài giả định. Và kết quả là, các khung phát triển phần mềm / phần mềm không được chú ý thường có nhiều tùy chọn cấu hình. Một nhà phát triển thường phải đưa ra nhiều quyết định liên quan đến các khía cạnh khác nhau của phần mềm. Thông thường, các công cụ khác nhau được phát triển để làm cho việc xử lý các tùy chọn khổng lồ này dễ dàng hơn. vd
tl; dr :
Rất nhiều người đang tham khảo ASP.NET MVC như là một khung "không được đề cập" và tôi chỉ muốn cân nhắc với một vài suy nghĩ về điều đó.
Đúng là ASP.NET MVC không bắt buộc quá nhiều; bạn có thể sử dụng bất kỳ giải pháp kiên trì nào bạn thích, có thể là Linq-to-SQL, ADO.NET Entities, NHibernate, v.v.
Mặt khác, khung công tác MVC có xu hướng ủng hộ "quy ước về cấu hình", để trích dẫn Phil Haack, trong đó gợi ý rất nhiều về mô hình được xác định trước để định vị bộ điều khiển, khung nhìn, mô hình và mã khác. Mặc dù bạn có thể thay đổi hành vi này, nhưng việc bơi theo dòng chảy sẽ dễ dàng hơn và đối với hầu hết mọi người, không có vấn đề gì khi làm điều đó.
Ngoài ra xung quanh ASP.NET MVC còn có rất nhiều người có quan điểm, mà tôi thấy dẫn đến rất nhiều hướng dẫn thiên vị đòi hỏi phải bao quát, ví dụ thử nghiệm đơn vị và tiêm phụ thuộc; Tôi là tất cả để kiểm tra tốt và phân tách các mối quan tâm, nhưng tôi nhận thấy rằng các chủ đề như vậy bị đẩy xuống cổ họng một chút, thường đi trước để bao quát những điều cơ bản hữu ích hơn.
Một lần nữa, tôi phải thừa nhận rằng trong các lĩnh vực đó, khung công tác hoàn toàn mở để áp dụng bất kỳ giải pháp thử nghiệm đơn vị nào bạn muốn, cũng như bất kỳ khuôn khổ tiêm và phụ thuộc nào bạn muốn sử dụng, vì vậy tôi đoán rằng nó cung cấp một ví dụ khác về tính linh hoạt, ngay cả trong "bash bible" của thử nghiệm đơn vị, vv dường như đang diễn ra.
Đó là số lượng các công ước được thực hiện trong một khung hình và số lượng quyết định đã được đưa ra.
Ví dụ, nếu có 5 (hoặc nhiều hơn) các cách khác nhau để gửi dữ liệu biểu mẫu cho một hành động của bộ điều khiển (đó là trường hợp trong ASP.NET MVC), thì khung có vẻ khá "không có ý kiến" - quyết định được đưa ra gửi bạn
Tuy nhiên, nếu khung cho phép (thông qua vô hiệu hóa trực tiếp các cách khác hoặc bằng cách khuyến khích mạnh mẽ) chỉ một cách để thực hiện điều đó (đó là trường hợp với Fubu MVC), bạn có thể nói rằng quyết định đã được đưa ra bởi khung , do đó làm cho khung ý kiến.
Ví dụ bạn sẽ thấy rất nhiều tại thời điểm này là khung công tác ASP.NET MVC. Nó có thể mở rộng đáng kinh ngạc nhưng đó là sự sụp đổ của nó trong một số khía cạnh, không có thịt cho nó. Bạn muốn truy cập dữ liệu? Bạn sẽ phải tự viết nó. Bạn muốn một số AJAX đang diễn ra? Như trên.
Tuy nhiên, vì nó có khả năng mở rộng rất cao, nếu bạn xây dựng dựa trên nó, bạn có thể biến nó thành một khung công tác. Đây là những gì mà MVCContrib thích, họ cung cấp cho bạn các phương thức cụ thể để thực hiện những việc đó có nghĩa là bạn phải viết ít mã hơn.
Điều này không có nghĩa là nếu bạn muốn thoát khỏi ý kiến, thường có nhiều việc phải làm hơn là nếu bạn đang làm việc trên phiên bản vanilla. Đây là một kịch bản 80/20 mặc dù. Nếu bạn chọn đúng khung ý kiến của mình, bạn sẽ chỉ muốn thoát khỏi các ý kiến 20% thời gian và bạn sẽ có năng suất cao trong 80% thời gian khác.