2010-06-22 26 views
6

Ý tôi là, bây giờ chúng tôi có tất cả chuyển động này để tách dấu html của bạn khỏi mã của bạn càng nhiều càng tốt bằng cách sử dụng các công cụ mẫu hiện đại (trong những ngày lập trình viên thường chỉ giữ các chuỗi nối trong php, điều đó thật khủng khiếp.)Có sử dụng một cái gì đó giống như MvcContrib Grid một bước lùi trong khả năng đọc mã?

sau đó, tôi nhìn vào mã một đồng nghiệp của để tạo ra một bảng html, và có vẻ như:

<% Html.Grid(Model).Columns(column => { 
    column.For(x => Html.ActionLink("Edit", "Edit", new { id = x.Id })).Attributes(width => "30px").DoNotEncode(); 
    column.For(x => Html.ActionLink("Delete", "Delete", new { id = x.Id }, new { @class = "delete" })).Attributes(width => "95px").DoNotEncode(); 
    column.For(x => x.Id).Named("Code"); 
    column.For(x => x.Name).Named("Name").HeaderAttributes(align => "left"); 
    column.For(x => x.CPF).Named("CPF"); 
}) 
.Attributes(width => "100%", border => "0", cellpadding => "0", cellspacing => "0", @class => "data-table") 
.Empty("No users found!") 
.RowStart(row => string.Format("<tr class='row{0}'>", row.IsAlternate ? "-alternating" : "")) 
.Render(); 
%> 

Ông cho rằng đó là tuyệt vời, tôi nghĩ nó khá xấu xí, vì vậy tôi muốn biết ý kiến ​​của nhiều người dân.

+1

Một người đàn ông 'xấu xí' là 'vợ' của một người đàn ông khác. Quá chủ quan và cởi mở để trả lời; nó chỉ là số tiền để thảo luận, mà là rõ ràng chán nản ở đây. Bỏ phiếu để đóng. –

Trả lời

1

Cái nhìn xấu xí của nó ngay từ cái nhìn đầu tiên, nhưng tôi nghĩ nó khá ngắn gọn và chăm sóc rất nhiều logic. Ví dụ: đầu ra MVC tiêu chuẩn để làm điều gì đó gần với điều này (không có đánh dấu)

<table> 
    <% dim index as integer = 0 
     if model.count > 0 then %> 
     <tr> 
     <th>Edit</th> 
     <th>Delete</th> 
     <th>Code</th> 
     <th align="left">Name</th> 
     <th>CFP</th> 
     for each item in model 
     if index mod 2 = 0 then%> 
      <tr> 
     <%else%> 
      <tr class ="alternate"> 
     <%end if%> 
      <td><%= html.actionLink("Edit", "Edit", New With {.id = item.id})%></td> 
      <td><%= html.actionLink("Delete", "Delete", New With {.id = item.id})%></td> 
      <td><%: item.id%></td> 
      <td><%: item.Name%></td> 
      <td><%: item.CPF%></td> 
     <% index += 1 
      Next%> 
    <%Else%> 
     <tr><td>No Rows Found</td></tr> 
    <%end if%> 

</table> 

Và tôi khá chắc chắn tôi đã bỏ lỡ một vài điều trong đó. Đi truyền thống, tôi phải theo dõi số lượng hàng hoặc một số cách để biết đó có phải là hàng xen kẽ hay không, có trường hợp khi tôi không có hồ sơ và thường có rất nhiều thẻ <% %> để xử lý các khối mã đó.

1

Tôi đồng ý rằng nó không phải là rất đẹp, nhưng nếu bạn bắt đầu xác định quy ước cho một bảng nên xem xét, bạn có thể bắt đầu refactor để mở rộng phương pháp để làm sạch này lên rất nhiều. Sau đó, nó thậm chí DRYs lên định nghĩa bảng của bạn. Dưới đây là một ví dụ (trừ các extensionthods thực tế).

<% Html.Grid(Model).Columns(column => { 
    InsertEdit(column).Width(30); 
    InsertDelete(column).Width(95); 
    column.For(x => x.Id).Named("Code"); 
    column.For(x => x.Name).Named("Name").LeftAlignHeader(); 
    column.For(x => x.CPF).Named("CPF"); 
}) 
.ApplyDefaultStyle() 
.Class("data-table") 
.Empty("No users found!") 
.DefaultAlternatingStyle() 
.Render(); 
%> 
+1

Tôi thích tiện ích mở rộng của bạn! Và tôi là đồng nghiệp của Daniel. – Zote

5

Đối với nhà thiết kế, đó là bước lùi về khả năng đọc mã, không có hai ý kiến ​​ở đây.

Từ quan điểm của nhà phát triển, điều đó sẽ phụ thuộc. Một số người như những người khác thì không. Cá nhân tôi thích nó và thích nó hơn so với kỹ thuật foreach tiêu chuẩn hơn. Tại sao?

Bạn bắt đầu với một đơn giản <table>foreach. Sau đó, một số người dùng nói rằng bạn cần xử lý các kiểu hàng xen kẽ. Bạn bắt đầu bằng cách thêm ifs. Sau đó, một người dùng khác nói rằng bạn cần có thể đặt hàng theo cột đã cho. Bạn xử lý điều này với một số khác ifs. Người dùng thứ ba yêu cầu bạn xử lý phân trang => nhưng một số khác là ifsforeach trong chế độ xem của bạn. Bạn kết thúc với spaghetti.

Kết luận: sử dụng đúng khẩu súng cho đúng mục tiêu. Đối với các bảng đơn giản, cách tiếp cận thông thường hoạt động độc đáo, nhưng một khi bạn bắt đầu thực hiện các công cụ nâng cao hơn, hãy sử dụng những người trợ giúp.

+1

Hoặc bạn có thể sử dụng công cụ xem Spark và quên những ifs ;-) – queen3

+1

@ queen3, phải mất độ tuổi để tìm cú pháp chính xác mà không có Intellisense. Chỉ đùa thôi :-) –

+2

Có, nhưng Spark có sự hấp dẫn, nếu người ta cần điều đó để học; mặc dù hiện tại tôi chỉnh sửa nó trong trình soạn thảo HTML VS. Spark thực sự rất đơn giản. Lần đầu tiên tôi sử dụng lưới MvcContrib và người trợ giúp. Nhưng khi tôi bắt đầu sử dụng Spark, cuối cùng tôi đã thay thế tất cả chúng (và những "người trợ giúp" khác) với đánh dấu HTML/Spark sạch hoàn toàn. Vấn đề là, "một khi bạn bắt đầu đi công cụ tiên tiến hơn" sau đó người giúp đỡ (như lưới) phá vỡ. Thật khó để xử lý các thẻ lồng nhau phức tạp, thuộc tính có điều kiện, v.v. Người trợ giúp thêm trừu tượng qua HTML và cuối cùng nó bị rò rỉ. – queen3

2

MVC Contrib Grid trông đáng sợ chỉ vì nó có tấn và tấn khả năng. Đó là một phần mở rộng HTML cấp quân đội swiss làm tất cả mọi thứ cho tất cả mọi người. Như những người khác lưu ý làm điều đó bằng tay thậm chí còn khó khăn hơn hoặc vụng về. Tôi nhớ lại trên máy tính để bàn, viết mã vụng về như nhau để cấu hình các điều khiển lưới và bảng tính để có được hiệu ứng đúng.

Tuy nhiên, nhu cầu của bạn là khiêm tốn hơn, chỉ cần viết của riêng bạn. Phil Haack đã có một bài viết tuyệt vời trên một số code based repeater. Ngoài ra còn có một số Grid View Helpers nhẹ hơn có thể hỗ trợ bạn. Những cái này mạnh mẽ, nhưng có thể phù hợp hơn với một số công việc nhất định trong ứng dụng của bạn.

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