2011-01-29 31 views
7

Tôi đã đăng một số câu hỏi trong các tháng về cấu trúc của các ứng dụng ASP.NET và Lớp trừu tượng cơ sở dữ liệu, với mục đích viết lại (từ nền tảng), một ứng dụng web cũ. Gần đây tôi đã tình cờ gặp MVC3/Entity-Code-First và sau khi dành thời gian với nó, đã yêu thích cách thức hoạt động, cách mọi thứ được trừu tượng hóa và tôi đang tìm bất kỳ lý do gì để sử dụng nó! Ứng dụng kế thừa là dịch vụ windows C++/CLI tạo ra HTML riêng của nó (HTML rất cũ ở trường với CSS chỉ được sử dụng cho màu sắc, và nhiều bảng), và với giao diện được kết hợp chặt chẽ với logic nghiệp vụ . Về cơ bản, bất cứ điều gì sẽ là một sự cải tiến. Tuy nhiên, và có lẽ điều này là bởi vì tôi đã không dành đủ thời gian chưa với MVC, tôi có một vài nghi ngờ dai dẳng và tự hỏi nếu một số bạn MVC-Pros có thể waft kinh nghiệm của họ theo hướng của tôi.Viết lại một ứng dụng Web độc quyền di sản cho MVC3/Entity-Code-First

  • Ứng dụng di sản sử dụng điều khiển tùy chỉnh (theo mẫu riêng của nó trong số họ) để ràng buộc kết hợp hộp số liệu, và tự động phục hồi lại phụ thuộc kết hợp hộp dựa trên sự lựa chọn trong một. Trong ASP.NET, câu hỏi này được trả lời dễ dàng như là một trong những chỉ ném một điều khiển asp:DataList trên trang, liên kết nó với một nguồn dữ liệu và thì đấy. Một chút mã đơn giản cho phép bạn lọc các hộp kết hợp khác trên giá trị đã chọn. Nó cũng sẽ dễ dàng trong ASP.NET, để thực hiện một danh sách dữ liệu mà ngay cả dữ liệu tự động phụ thuộc trong thời trang này (mà sẽ bắt chước hành vi của ứng dụng cũ khá độc đáo). Tôi dường như không thể tìm thấy một khái niệm về điều khiển tùy chỉnh trong MVC, mặc dù tôi cho rằng loại công cụ này được xử lý bởi các cuộc gọi jQuery để lấy dữ liệu và ném nó vào một hộp tổ hợp. Nhưng điều này có được thực hiện cho mọi combo box trên mỗi trang có một? Đây có phải là một trường hợp cho quan điểm một phần với các thông số thích hợp được thông qua, hoặc điều này chỉ ngu ngốc? Tôi đoán điều này liên quan nhiều hơn đến Khuôn khổ thực thể hơn MVC, nhưng hầu hết các ví dụ tôi đã tìm thấy trên web và các hướng dẫn, thực hiện các truy vấn LINQ để trả về một tập hợp các đối tượng để hiển thị, vd, từ Ví dụ MvcMovie:

    public ActionResult Index() 
    { 
        var movies = from m in db.Movies 
           where m.ReleaseDate > new DateTime(1984, 6, 1) 
           select m; 
    
        return View(movies.ToList()); 
    } 
    

    Sau đó, kết quả được hiển thị bằng cách sử dụng vòng lặp @foreach trong chế độ xem. Đây là tất cả tuyệt vời. Ứng dụng kế thừa có một trang duyệt duy nhất được sử dụng bởi tất cả các khu vực khác của hệ thống (có hơn 50). Nó thực hiện điều này bằng cách kiểm tra thứ tự cột được xác định cho người dùng đăng nhập, làm phẳng bất kỳ khóa ngoại nào (để trường trên bảng ngoài được hiển thị trái ngược với giá trị khóa chính không thân thiện với người dùng) và cũng cho phép người dùng áp dụng bộ lọc tùy chỉnh cho bất kỳ cột nào. Nó cũng làm điều này cho các bảng có tối đa 100 nghìn hàng. Làm thế nào sẽ đi về viết một cái gì đó tương tự bằng cách sử dụng khung Entity và quan điểm? Trong ASP.NET tôi có lẽ sẽ giải quyết điều này bằng cách tự động tạo ra một khung lưới của một số loại và có nó tự động tạo ra các cột và áp dụng các bộ lọc. Điều này có vẻ như tôi có thể làm việc nhiều hơn trong MVC. Tôi đang thiếu cái gì đó?

  • Ứng dụng cũ có một số thao tác hoạt động trên nhiều tập dữ liệu lớn. Bây giờ bởi vì nó là một dịch vụ, nó có thể khởi chạy các chủ đề này mà không phải lo lắng về việc bị đóng cửa. Một trong những câu hỏi của tôi ở đây về SO là về các nhà quản lý tĩnh xung quanh và việc giới thiệu một AppPool tái chế, nhưng tôi đã quyết định rằng có một dịch vụ phụ trợ là một lựa chọn tốt. Điều đó nói rằng, ứng dụng cũ áp dụng một tuyên bố cập nhật cho các nhóm lớn các bản ghi chứ không phải là các hàng đơn lẻ. Điều này có thể thực hiện với Entity-Framework mà không cần viết SQL tùy chỉnh đối với cơ sở dữ liệu mà bỏ qua các mô hình bình thường không?Tôi hy vọng tôi không cần phải làm điều gì đó như thế này (không phải là tôi sẽ, đây chỉ là ví dụ)

    var records = from rec in myTable 
           where someField = someValue 
           select rec; 
    foreach(rec in records) 
        rec.applyCalculation(); 
    db.SaveDbChanges(); 
    

    tôi nghi ngờ này có thể mất rất nhiều thời gian, trong khi các ứng dụng di sản sẽ chỉ làm:

    UPDATE myTable 
    SET field1 = calc 
    WHERE someField = someValue 
    

    Vì vậy, không hoàn toàn rõ ràng đối với tôi cách chúng tôi sử dụng mô hình theo cách này.

  • Ứng dụng cũ có một số bảng dữ liệu trong bố cục được thực hiện xung quanh bất kỳ trang nào bạn đang truy cập. Nhìn vào đây trên Stackoverflow, tôi đã tìm thấy câu hỏi this, ngụ ý rằng mỗi chế độ xem cần phải chuyển thông tin này đến bố cục? Đây có phải là, hoặc là có một cách tốt hơn? Lý tưởng nhất, tôi muốn bố cục của tôi có thể truy cập vào một mô hình/kho lưu trữ cụ thể và hiển thị dữ liệu trong bảng điều khiển bên cạnh. Thêm vào mỗi trang xem có thể khá lặp đi lặp lại và dễ bị lỗi. Chưa kể đến thời gian cần thiết nếu tôi cần sửa đổi thứ gì đó. Một phần xem sẽ làm ở đây, nhưng một lần nữa tôi không chắc chắn làm thế nào để vượt qua một mô hình với nó trên trang bố trí.

  • Cuối cùng, tôi đã thất vọng, sau khi cài đặt Ef-Code-First, để thấy rằng một thuộc tính thực sự tốt đẹp, SourceName chưa thực hiện được. Điều này sẽ rất tốt đẹp trong việc lập bản đồ chống lại các bảng/cột cũ và tôi không hoàn toàn chắc chắn tại sao nó lại bị bỏ sót tại thời điểm này (ít nhất, intellisense của tôi nói nó không có!) Có ai có ý tưởng khi điều này có thể xảy ra không? Tôi có thể làm mà không có nó trong một thời gian, nhưng cuối cùng nó sẽ vô cùng hữu ích.

Xin lỗi vì câu hỏi dài. Sau tuổi tác của công việc điều tra trong ASP.NET và MVC3, tôi thực sự muốn đi với MVC3!

+0

Đọc tiêu đề và dòng cuối cùng ... mọi thứ khác quá nhiều đọc. Bạn đã nói nó dài dòng, hãy thử cô đặc nó thành một câu hỏi có thể quản lý được. –

+0

cho các công cụ jQuery với mvc nhìn ở đây http://awesome.codeplex.com/ – Omu

Trả lời

3

Nếu tôi quản lý để trích xuất các câu hỏi một cách chính xác thì đây sẽ là câu trả lời của tôi:

  1. Bạn đang ngay trong suy nghĩ của bạn về tổng thể - Dropdowns chi tiết (hoặc điều khiển khác, cho rằng vấn đề). Các cuộc gọi jQuery AJAX/JSON (chủ yếu là GET) sẽ là những gì bạn cần. Nếu bạn chỉ có một dropdown trên trang của bạn, thì tất nhiên bạn không cần kiểu tương tác đó - bạn chỉ có thể chuẩn bị mô hình cho nó trong hành động điều khiển của mình (bạn tạo một đối tượng SelectList).

  2. Ở đây, bạn có thể sẽ sử dụng một số loại hệ thống lưới như jqGrid hoặc Flexigrid. Họ thực hiện hầu hết nội dung liên quan đến việc lọc/tìm kiếm/truy vấn. Tuy nhiên, bạn sẽ phải cung cấp các hành động điều khiển JSON sẽ phục vụ dữ liệu.

  3. Có, bạn có thể thực thi SQL qua EF. Có ExecuteStoreQuery()ExecuteStoreCommand(). Dưới đây là thông tin chi tiết về những người này http://msdn.microsoft.com/en-us/library/ee358769.aspx

  4. Bạn có thể gọi RenderAction() từ chế độ xem và thực hiện hành động này (bất cứ khi nào bạn gọi) và hiển thị chế độ xem một phần (hoặc bình thường) nó. RenderPartial() hơi vụng về với điều này - nó yêu cầu bạn phải có sẵn mô hình trong chế độ xem mà bạn đang gọi RenderPartial(). RenderPartial() không bao giờ quay lại hành động điều khiển - nó chỉ hiển thị HTML được xác định trong mẫu bằng cách sử dụng mô hình bạn đã cung cấp trong cuộc gọi của nó từ bên trong khung nhìn.

  5. Rất tiếc, tôi không biết câu trả lời cho điều này.

HTH

+0

Trong 4. bạn cũng có một tùy chọn để tạo một lớp cơ sở cho các mô hình của bạn. Lớp này sẽ có các thuộc tính cho dữ liệu mà bạn muốn có sẵn trên tất cả các khung nhìn. Nhưng tôi thích RenderAction() này. – mare

+0

Cảm ơn phản hồi này, nó vô cùng hữu ích! –

1

Bạn có thể không thích nó, nhưng nó có thể có ý nghĩa hơn rất nhiều để chỉ cấu trúc lại các ứng dụng C++. Đặc biệt là để kinh doanh. Không có gì sai khi tạo html. Dễ dàng hơn để cấu trúc lại thành html/css hiện đại hơn một tập hợp các mẫu.

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