2008-09-05 19 views
7

Tôi đã tạo một ứng dụng máy tính để bàn đơn giản trong C# 3.0 để tìm hiểu một số C#, wpf và .Net 3.5. Ứng dụng của tôi về cơ bản đọc dữ liệu từ tệp csv và lưu trữ nó trong cơ sở dữ liệu CE của máy chủ SQL. Tôi sử dụng sqlmetal để tạo mã ORM cho cơ sở dữ liệu. Lần lặp đầu tiên của tôi về ứng dụng này là xấu xí như địa ngục và tôi đang trong quá trình tái cấu trúc nó.Làm thế nào bạn sẽ kiến ​​trúc một ứng dụng máy tính để bàn trong C# 3.0

Điều này đưa tôi đến câu hỏi của tôi. Làm thế nào bạn sẽ kiến ​​trúc một ứng dụng cơ sở dữ liệu máy tính để bàn trong C#? Các phương pháp hay nhất là gì?

Bạn có tạo Lớp trừu tượng cơ sở dữ liệu (DAL) sử dụng mã tạo sqlmetal không? Hoặc là mã được tạo ra có đủ trừu tượng không?

Nếu bạn sử dụng mẫu DAL, bạn có biến nó thành một thành viên đơn lẻ hay một thành viên tĩnh không? Bạn có sử dụng mẫu View-Model-ModelView với mẫu DAL không?

Xin lỗi nếu điều này có vẻ như một câu hỏi mở kết thúc lâu, nhưng tôi đã đưa ra rất nhiều suy nghĩ gần đây. Tôi thấy rất nhiều ví dụ về cách kiến ​​trúc sư một ứng dụng n-tier doanh nghiệp trong C# nhưng không phải là nhiều về kiến ​​trúc ứng dụng máy tính để bàn độc lập.

Trả lời

4

tôi sẽ bắt đầu với Composite Application Guidance for WPF (ho PRISM ho) từ nhóm P P & của Microsoft. Với việc tải xuống có một ứng dụng tham chiếu tuyệt vời, đó là điểm khởi đầu cho hầu hết các phát triển WPF của tôi ngày nay.

DotNetRocks crew vừa được phỏng vấn Glenn BlockBrian Noyes về việc này nếu bạn muốn nghe nhiều hơn từ họ.

Thậm chí tốt hơn, Prism không nặng bằng CAB, nếu bạn quen thuộc với điều đó từ những ngày WinForms.

1

Trước khi kiến ​​trúc mọi thứ bạn nên xác định các yêu cầu cho ứng dụng của mình.
Đó là một lỗi phổ biến của các nhà phát triển mới bắt đầu - bắt đầu viết mã trước suy nghĩ về cách nó sẽ thực hiện. Lời khuyên của tôi sẽ là cố gắng mô tả một số tính năng của ứng dụng của bạn. Nó sẽ giúp bạn cảm thấy nó nên được thực hiện như thế nào.

Đối với tài nguyên học tập hữu ích, tôi rất muốn giới thiệu bạn xem CompositeWPF là một dự án được thiết kế đặc biệt để hướng dẫn các nhà phát triển thực tiễn tốt nhất về phát triển ứng dụng dành cho máy tính để bàn.

2

Câu trả lời là "nó phụ thuộc" như mọi khi.

Một số điều cần suy nghĩ về: Bạn có thể muốn ứng dụng khách hàng này trở thành ứng dụng web (ví dụ) tại một số thời điểm. Nếu vậy, bạn nên chắc chắn giữ tách biệt giữa lớp kinh doanh (và bên dưới) và bản trình bày. Cách đơn giản nhất để làm điều này là đảm bảo tất cả các cuộc gọi đến logic nghiệp vụ đều đi qua một giao diện nào đó. Một cách phức tạp hơn là thực hiện cài đặt MVC đầy đủ.

Một điều khác mà bạn có thể xem xét là làm cho lớp truy cập dữ liệu độc lập với logic nghiệp vụ và giao diện người dùng. Bằng cách này, tôi có nghĩa là tất cả các cuộc gọi từ logic nghiệp vụ vào DAL phải là chung chung "lấy cho tôi dữ liệu này" thay vì "lấy cho tôi dữ liệu này từ SQL" hoặc thậm chí tệ hơn "chạy câu lệnh SQL này". Bằng cách này, bạn có thể thay thế DAL của bạn bằng một DAL truy cập một cơ sở dữ liệu khác, các tệp XML, hoặc thậm chí là một cái gì đó icky như các tệp phẳng.

Tóm lại, tách mối quan ngại.Điều này cho phép bạn phát triển trong tương lai bằng cách thêm một giao diện người dùng khác, phân đoạn cả ba khu vực thành cấp của riêng họ hoặc thay đổi công nghệ có liên quan.

0

Tôi sẽ nói có, nó có thể dễ dàng được cấu trúc theo hướng các ứng dụng nhỏ hơn. Có một đường cong học tập hướng tới việc bắt đầu, nhưng thành thật mà nói, nó giúp tôi hiểu WPF tốt hơn là cố gắng bắt đầu từ đầu. Sau khi bắt đầu một dự án với CompositeWPF và sau đó bắt đầu một dự án khác mà không có nó, tôi thấy mình cố gắng để nhân đôi các tính năng của CompositeWPF của riêng tôi bởi vì tôi đã bỏ lỡ các tính năng đó! :)

1

Tôi bắt đầu với chuỗi Build Your Own Cab của Jeremy Miller.

Tôi là người đăng ký CAB sớm. Tôi đã học được rất nhiều từ việc đào sâu vào công nghệ đó và đọc tất cả các blog .NET về kiến ​​trúc ứng dụng. Nhưng gần đây tôi đã có cơ hội để bắt đầu một dự án mới, và thay vì sử dụng CAB, tôi đã đi với StructureMap & NHibernate và mượn một số mẫu mà Jeremy sử dụng (đặc biệt là cách xử lý sự kiện tổng hợp). Kết quả là một khung công cụ thủ công được đơn giản hóa thực hiện mọi thứ tôi cần và tôi thích làm việc với nó.

Đối với chi tiết cụ thể của câu hỏi của bạn: Tôi sử dụng Kho lưu trữ để truy cập dữ liệu. Ban đầu tôi đã viết một số mã ADO.NET và các trình đọc dữ liệu được sử dụng và ánh xạ các đối tượng của tôi. Nhưng điều đó đã thực sự nhanh chóng, vì vậy tôi nắm lấy NHibernate và thực sự hài lòng. Các kho lưu trữ sử dụng NHibernate để truy cập dữ liệu và nhu cầu truy cập dữ liệu của tôi khá đơn giản trong ứng dụng cụ thể này.

Tôi có một lớp dịch vụ (được tiếp xúc qua WCF, kênh song công) sử dụng các kho lưu trữ. Ứng dụng của tôi về cơ bản là máy khách-máy chủ với cập nhật thời gian thực (và tôi biết câu hỏi của bạn chỉ là về khách hàng, nhưng tôi sẽ sử dụng cùng một công nghệ và các mẫu). O

n phía máy khách, tôi sử dụng MVP với StructureMap cho IoC và một số chiến lược tổng hợp sự kiện rất đơn giản cho liên lạc chéo. Tôi mã hóa giao diện cho mọi thứ. Điều duy nhất tôi đã làm là mượn từ CAB ý tưởng về một "không gian làm việc" linh hoạt để hiển thị tự động các khung nhìn. Tôi đã viết giao diện Workspace của riêng mình mặc dù và đã triển khai DeckWorkspace và TableWorkspace của riêng tôi để sử dụng trong ứng dụng của tôi (đây là những thứ thực sự đơn giản để viết).

Rất nhiều quyết định của tôi trong ứng dụng gần đây nhất này là kết quả của trải nghiệm và nỗi đau mà tôi cảm thấy khi sử dụng các công cụ và khung công tác khác. Tôi đã đưa ra các quyết định khác nhau lần này. Có lẽ cách duy nhất để thực sự hiểu làm thế nào để kiến ​​trúc sư một ứng dụng là để cảm thấy nỗi đau của việc làm điều đó sai trước.

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