2010-02-16 22 views
6

Chúng tôi hiện đang bắt đầu thay thế ngăn xếp ADO.NET trong ứng dụng C# của chúng tôi bằng LINQ.Các chiến lược để thay thế các đối tượng hệ thống

Bởi vì ứng dụng không được cấu trúc với lớp trừu tượng dữ liệu, nên có các cuộc gọi ADO trong toàn bộ lớp của ứng dụng ở mức độ như vậy, bất kỳ một đối tượng nào và cố chuyển đổi thành LINQ có nghĩa là bạn chạy xuống mê cung của các lỗ thỏ. Những gì tôi đang yêu cầu, là stategies hoặc cách tiếp cận để giải quyết những thay đổi hệ thống bán buôn như vậy trong khi đảm bảo kiểm tra thích hợp và tối thiểu 'thả các công cụ' gió xuống thời gian (kệ làm thay đổi tại một thời điểm thông báo và quay trở lại nó sau này ngày).

Chúng tôi đã đùa giỡn với những điều sau đây:

  • Tạo một đối tượng phản chiếu của từng đối tượng với mã mới = phải duy trì 2 cơ sở mã đến khi chuyển đổi đầy đủ
  • Prefix tất cả các tên hàm chức năng ADO với ADO_ và tạo các phiên bản Linq với tên gốc
  • Có một hệ thống FLAG rộng để biểu thị có sử dụng ADO hoặc LINQ và bọc mọi cuộc gọi ADO nếu (FLAG) {ADO} khác {Linq} = phải quay lại sau khi chuyển đổi và xóa tất cả ADO refs

Mọi đề xuất cho đến nay đều rất đáng giá.

Các bạn/các bạn đề xuất điều gì?

LƯU Ý: Tôi đã xóa '(ADO thành liên kết)' khỏi tiêu đề vì tôi đang tìm các câu trả lời và thực hành chung hơn và không chỉ giới hạn trong ADO để chuyển đổi LINQ được sử dụng làm ví dụ ở đây.

Trả lời

3

Bạn thực sự nên có các bài kiểm tra đơn vị tự động trước khi thực hiện bất kỳ thay đổi nào. Trên thực tế, bạn không nên thực hiện thay đổi nào đối với mã không được kiểm tra đơn vị tối thiểu 80%.

Trong thế giới thực, kiểm tra đơn vị thường không tồn tại. Mặt khác, thực hiện bất kỳ việc tái cấu trúc nào mà không có kiểm tra đơn vị hoàn toàn có thể làm hỏng mã của bạn, khiến việc Quản lý thậm chí ít có khả năng cho phép bạn thực hiện các thay đổi trong tương lai. Phải làm gì?

Sử dụng công cụ như ReSharper, bạn có thể bắt đầu bằng cách áp dụng một số phép tái cấu trúc "an toàn hơn". Với sự quan tâm, không có lý do gì bạn không thể thành công liên tục bằng cách sử dụng "Phương pháp trích xuất" để di chuyển ADO của bạn.NET code thành các phương thức riêng biệt, "Make Method Static" nếu nó chưa được tĩnh, sau đó hoặc là "Move Method" hoặc "Make Method Non-Static" để di chuyển phương thức đó vào một lớp riêng biệt.

Khi bạn đã xóa mã, bạn có thể bắt đầu viết một số thử nghiệm tự động. Ở giai đoạn này, họ không cần phải là "kiểm tra đơn vị" theo nghĩa nghiêm ngặt của từ đó. Đặc biệt, các xét nghiệm này nên được phép làm việc với cơ sở dữ liệu.

Khi bạn chỉ còn lại với mã không thể dễ dàng được kiểm tra đơn vị, sau đó bạn có thể rất cẩn thận bắt đầu làm cho mã đó dễ kiểm tra hơn. Bạn có thể làm những việc như biến các phương thức tĩnh thành các phương thức dụ của các lớp mới. Bạn cũng có thể bắt đầu giới thiệu tiêm phụ thuộc, để làm cho nó dễ dàng hơn để thử nghiệm bằng cách sử dụng các đối tượng giả. Nhưng phải là rất cẩn thận ở đây - bạn đang sửa đổi mã không có kiểm tra tự động và bạn sẽ sử dụng các phép tái cấu trúc có thể thực sự phá vỡ nội dung.

Khi bạn đã có mã được kiểm tra đầy đủ, rồi bạn có thể tổ chức lại mã để hiểu rõ hơn, sau đó sửa đổi để làm cho nó sử dụng LINQ nếu bạn muốn.

2

Bạn vẫn có thể tận dụng tất cả các thủ tục/hàm được lưu trữ ban đầu được tạo cho giải pháp của bạn với Linq2SQL. Sử dụng một cái gì đó giống như các chiến lược thể hiện trong số Working with Legacy Code của Micheal Feather, bạn có thể tạo ra các ranh giới xung quanh các vùng của ứng dụng và cập nhật trong các ranh giới đó.

Chiến lược tôi đã sử dụng trong quá khứ là duy trì/bỏ qua cơ sở dữ liệu và các đối tượng của nó. Sau đó tôi từ từ lặp qua các cuộc gọi ADO khác nhau và thay thế bằng các cuộc gọi Linq2SQL cho đến khi toàn bộ ứng dụng đang sử dụng Linq2SQL. Sau đó tôi thấy dễ dàng hơn để chuyển đổi các cuộc gọi ADO trước đó đã hiển thị và chuyển DataSets/DataTables thành các thực thể phù hợp hơn.

Một cách tiếp cận (ví DataSet/giải pháp nặng DataTable) là để giữ cho ADO gọi tại chỗ và thay vào đó sử dụng phương pháp khuyến nông AsQueryable() và/hoặc OfType<T>() để chuyển đổi ds/mặt hàng dt vào các tổ chức thích hợp, sau đó tổng hợp những thay đổi này thành một DAL gắn kết hơn.

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