2012-09-11 17 views
6

Tôi đang xây dựng một nguyên mẫu dự án web cho công ty của mình, ý tưởng là có một mẫu để bắt đầu xây dựng một dự án mới với mọi thứ cần thiết, bảo mật, IoC, Logging, v.v ...Đang thêm System.Web vào các dự án khác hơn là một trang web có thực hành không tốt?

I đang làm việc trên mặt bảo mật của mẫu ... và lúc bắt đầu tôi muốn tạo một nhà cung cấp bảo mật tùy chỉnh ... nhưng sau đó tôi nhận ra rằng Microsoft đã làm điều đó với tư cách thành viên ... nếu có dự án nào cần một nhà cung cấp ... họ sẽ chỉ cần thay đổi web.config và đó là nó ....

Nhưng sau đó nói đến vấn đề của tôi ... Nếu tôi muốn các lớp khác nhau có thể nhận thông tin người dùng .. như lớp dịch vụ (dịch vụ kinh doanh ... không phải dịch vụ web), tôi sẽ cần phải bao gồm System.Web và System.Web.ApplicationServices vào thư viện lớp đó.

Đó có phải là thực tiễn không tốt? Tôi không muốn tái phát minh ra bánh xe và mô hình thành viên Microsoft là đủ cho kịch bản của tôi.

Cảm ơn!

Trả lời

3

Thực tế là System.Web là một phần của ASP.NET. Nhiều phương thức trong System.Web sử dụng HttpContext.Current chẳng hạn - đó là ngữ cảnh về yêu cầu HTTP hiện tại. Sử dụng System.Web trong một ứng dụng non -ASP.NET có nguy cơ thất bại theo những cách kỳ lạ vì bạn có quyền truy cập vào các lớp với các phương thức có thể sử dụng HttpContext. Đây là một ý tưởng tồi; do đó, cũng nên được coi là một thực hành xấu.

Ngoài ra còn có ý định của System.Web. Có, nó chỉ là một hội đồng và IDE sẽ cho phép bạn tham khảo khá nhiều bất kỳ lắp ráp mà bạn thích. Tuy nhiên, mục đích của System.Web là trong ngữ cảnh của một ứng dụng ASP.NET. Đó là những gì các nhà phát triển tại Microsoft đang giả định; vì vậy, họ sẽ phát triển nó theo giả định đó. Trong tương lai, chúng có thể phá vỡ ứng dụng của bạn một cách hiệu quả do thay đổi có lợi cho các ứng dụng ASP.NET.Nếu điều đó xảy ra, bạn không có quyền truy đòi để thiết kế lại ứng dụng của bạn để đáp ứng điều đó, không phải tại thời điểm bạn đang thực sự lên kế hoạch thiết kế (hoặc thiết kế lại) phần này của ứng dụng của bạn.

+0

Tôi hiểu điều đó, nhưng làm cách nào để có thể hiển thị nhà cung cấp tư cách thành viên xác thực của mình theo cách minh bạch cho cả dự án Mặt trận và Lớp kinh doanh của tôi? Ví dụ ... trong một số trường hợp, tôi muốn cho phép hoặc từ chối một số phương thức dựa trên vai trò người dùng ... Ủy quyền thông qua Ủy quyền trên bộ điều khiển sẽ không đủ. – varholl

1

Thực tiễn không tốt cho lớp doanh nghiệp của bạn để sử dụng nó, vì lớp doanh nghiệp phải là nguồn dữ liệu độc lập.

Vì vậy, thay vào đó bạn sẽ thực hiện bất kỳ yêu cầu web nào trong lớp dữ liệu của mình và chỉ hiển thị dữ liệu được thu thập cho lớp doanh nghiệp của bạn hoặc bất kỳ thành phần xác thực riêng biệt nào nếu cần.

Theo quy tắc - mọi thứ trong lớp doanh nghiệp của bạn không phải là doanh nghiệp nghiêm ngặt cần được tóm tắt thành các lớp học với giao diện được xác định.

+0

Điều gì về 'System.Web.Mail' (trước .NET 2.0). Bạn muốn BL gửi email chứ không phải giao diện người dùng của mình. – Laoujin

+2

Một lần nữa, lớp doanh nghiệp không nên được triển khai cụ thể, vì vậy bạn sẽ trừu tượng nó ra lớp khác với giao diện chuẩn. Đã cập nhật câu trả lời của tôi. – PhonicUK

0

System.Web là thư viện giống như bất kỳ thư viện nào khác. Có, nó chứa rất nhiều mã, không được bao gồm trong khung công tác nhỏ gọn và một số chức năng của nó đang được sao chép bên ngoài nó, ví dụ WebUtility là mới trong .Net 4.5 và thực hiện nhiều trong số những gì HttpUtility làm. Tuy nhiên, nó chỉ là một thư viện lớp.

+0

@exacerbatedexpert Tôi nghĩ rằng tuyên bố đó là sự khái quát hóa và do đó không đúng trong mọi tình huống. Ví dụ: nếu lớp kinh doanh đề cập đến các vấn đề trên web, thì đó có thể là một lựa chọn tốt. – akton

-1

Tôi nghĩ rằng nó không tệ chút nào. System.Web là một phần của .NET framework vì vậy nó sẽ có sẵn ở mọi nơi mà .NET có sẵn. Tôi sử dụng System.Web trong các ứng dụng không phải web khi tôi cần làm việc với xử lý html và url.

0

Có thể có vấn đề vì System.Web không nằm trong số Hồ sơ khách hàng .NET Framework. Tham chiếu nó sẽ yêu cầu người tiêu dùng cài đặt gói khung đầy đủ. Đây có lẽ không phải là vấn đề nếu bạn đang xây dựng một ứng dụng máy chủ.

Tham chiếu: Assemblies in the .NET Framework Client Profile

+0

Xin lưu ý rằng .NET Framework Client Profile đã ngừng hoạt động bắt đầu với .NET 4.5. –

0

System.Web chỉ nên ở trên giao diện người dùng của bạn. Không phải mọi nơi trong kiến ​​trúc của bạn. Ví dụ tốt nhất là những gì đang xảy ra với Asp.Net 5, họ đang loại bỏ nó. Bằng việc có thành phần web được tách riêng với lớp giao diện người dùng của bạn, bạn tránh sửa đổi tất cả các lớp của kiến ​​trúc. Bạn nên luôn luôn cố gắng cách ly mặt trước (web, web api, signalR, vv) từ giữa (logic nghiệp vụ, logic chuyển đổi, v.v.) và phần cuối (cơ sở dữ liệu, Khuôn khổ thực thể, cuộc gọi api trên web).

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