2010-03-23 25 views
13

Tôi muốn hỏi người dùng có kinh nghiệm, nếu bạn thích sử dụng các điều khiển nhận biết dữ liệu để thêm, chèn, xóa và chỉnh sửa dữ liệu trong DB hoặc bạn có thiện ý thực hiện điều đó.Cách sử dụng các điều khiển nhận thức dữ liệu "chính xác"?

Tôi đã phát triển một số ứng dụng DB, trong đó vì mục đích "chính sách thân thiện với người dùng", tôi chạy vào các sự kiện bảng phức tạp (afterinsert, afteredit, after ... và beforeedit, beforeinsert, before ...). Sau đó nó là một công việc khá khó chịu để gỡ lỗi ứng dụng.

Nhận thức được rủi ro này (sau này bởi một ứng dụng khác) Tôi đã cố gắng tránh vấn đề này, vì vậy tôi chú ý tăng cường viết mã tốt, dễ đọc và toàn diện. Dường như tất cả mọi thứ đều ổn ngay từ đầu, nhưng khi tôi cần xử lý một số công cụ tiền xử lý trước khi gửi và tải dữ liệu, v.v, tôi lại gặp phải vấn đề tương tự, "chậm rãi và chắc chắn". Đôi khi tôi không thể sử dụng điều khiển dataaware anyway, và những gì có vẻ là một "mát" tính năng của DAControl lúc đầu nó quay sang một trở ngại vào cuối. Tôi "đã phải" viết thường trình đặc biệt cho các điều khiển phi dữ liệu, để hành xử như dataaware. Sau đó, tôi tự hỏi, tại sao trên trái đất tôi nên sử dụng điều khiển dataaware? Có tốt hơn khi tìm kiến ​​trúc ứng dụng trên các điều khiển không có dữ liệu không? Nó đòi hỏi nhiều thời gian để viết mã chống lỗi, tất nhiên, nhưng nó có giá trị của nó? Tôi không biết ...

tôi xảy ra với tôi nhiều lần, giống như bị nguyền rủa: thiên đường trên địa ngục bắt đầu ở cuối dòng ...

Tôi không biết, nếu tôi sử dụng phương pháp sai lầm khi viết chương trình DB , nếu có một số thực hành phổ biến tiêu chuẩn làm thế nào để tiến hành. Hoặc nếu nó là vấn đề chung cho tất cả mọi người?

Thanx cho lời khuyên và kinh nghiệm của bạn

Trả lời

0

Bí quyết nên trong tự động hóa tham số DataSet, bạn có thể tạo một điều khiển mà keo bộ dữ liệu với nhau trong master-slave bằng cách nào, chỉ bằng cách định nghĩa kết nối giữa chúng. Ofcourse kiểm soát như vậy nên được cho ăn với các thông số hình thức trong một số cách tổng quát khác. Trong trường hợp này, hãy gọi biểu mẫu với định danh thực thể, tất cả các tập dữ liệu sẽ được điền theo thứ tự thích hợp và sẽ cho phép cập nhật dữ liệu trong cơ sở dữ liệu tự động bởi nhà cung cấp.

Nói chung tốt hơn là có DataSets là biểu diễn chính xác các bảng có trường được tính toán tùy chọn (fkInternalCalc đôi khi hoạt động tốt hơn khi cập nhật với thay đổi hàng không thay đổi trường) ràng buộc với điều khiển nhận biết dữ liệu. Kiểm soát nhận thức dữ liệu là phương pháp tối ưu nhất và ít bị lỗi hơn. Giống như mọi khía cạnh, có những ngoại lệ cho điều đó.

Nếu bạn phải viết quá nhiều hàm keo, vấn đề có thể là trong mẫu thiết kế không có trong VCL.

4

Tôi đã viết các ứng dụng sử dụng các thành phần nhận thức dữ liệu đối với các thành phần và ứng dụng kiểu TTable sử dụng các thành phần không nhận thức dữ liệu.

Tùy chọn của tôi những ngày này là sử dụng các thành phần nhận biết dữ liệu nhưng với TClientDataSets chứ không phải là thành phần kiểu TTable.

Sử dụng TClientDataSet Tôi không phải làm cho cấu trúc giao diện người dùng bắt chước cấu trúc cơ sở dữ liệu của mình. Nó đủ linh hoạt để điền nó với dữ liệu từ một vài bảng và sau đó khi bạn áp dụng các bản cập nhật trở lại cơ sở dữ liệu, bạn có thể thêm/xóa/cập nhật các bản ghi theo cách thủ công như bạn thấy phù hợp.

+0

Wayne Niddery đã viết về nó trong bài viết của mình "Thiết kế hướng đối tượng tốt có thể bao gồm Kiểm soát dữ liệu-Aware?" Bạn có thể tìm thấy nó trên http://www.logicfundamentals.com trong phần Bài viết. – Erwin

0

Rất nhiều lần tôi sử dụng các điều khiển nhận biết dữ liệu được liên kết với bảng trong bộ nhớ (kbmMemTable) được điền từ truy vấn.

Những lợi ích tôi thấy là:

  1. tôi có toàn quyền kiểm soát tất cả chèn/cập nhật/bài viết/chỉnh sửa cơ sở dữ liệu.
  2. Không cần phải lo lắng về việc người dùng để lại bản ghi ở chế độ cập nhật (có khả năng khóa người dùng khác)
  3. Tôi có đề cập đến toàn quyền kiểm soát tất cả các lần chèn/cập nhật/bài đăng/chỉnh sửa không?

Sử dụng trong bộ nhớ bảng là dễ dàng như:

dataset.sql.add('select a.field,b.field from a,b'); 
dataset.open; 
inMemoryTable.loadfromdataset(dataset); 
inMemoryTable.checkpoint; 

Và sau đó "giải quyết" truy cập trở lại cơ sở dữ liệu, bạn đang trao cho các dữ liệu gốc và mới cho mỗi lĩnh vực trong mỗi bản ghi (tương tự như cách kích hoạt) - bạn có thể dễ dàng giao dịch và giải quyết toàn bộ chỉnh sửa sau mili giây - ngay cả khi người dùng cuối mất 30 phút để điền vào các điều khiển nhận biết dữ liệu.

0

Bạn đã xem số O/R mapper cho Delphi như tiOPF hoặc hcOPF?

Điều này sẽ tách logic miền kinh doanh khỏi lớp cơ sở dữ liệu. Đối với các hệ thống lớn và kế thừa, việc thêm một lớp khác là 'Anti Corruption Layer' sẽ bảo vệ mô hình khỏi những thay đổi trong thiết kế cơ sở dữ liệu.

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