2010-08-03 19 views
9

khi nhìn vào mã nguồn Shrinkr 's (chúng tôi mã nguồn tất cả các xét khác của dự án để tìm hiểu, phải không ??? :)) Tôi nhận thấy mã kewl sau .. (viết tắt của tôi, bên dưới)Bất kỳ thư viện kiểm tra đối chứng .NET Fluent nào?

public virtual Foo Foo 
{ 
    get; 
    set 
    { 
     Check.Argument.IsNotNull(value, "value"); 
     // then do something. 
    } 
} 

Hãy chú ý đến cách thông thạo cách họ kiểm tra đối số? Nice :)

alt text http://cherrythian.com/images/borat.jpg

Vì vậy .. kiểm tra mã này, họ có một số lớp tùy chỉnh mà thực hiện điều này ...

public static class Check 
{ 
    public static class Argument 
    { 
     public static void IsNotNull(object parameter, 
            string parameterName) 
     { ... } 

     public static void IsNotNullOrEmpty(string parameter, 
              string parameterName) 
     { ... } 

.... etc .... 
} 

Có bất kỳ khuôn khổ chung out there?

gem install netFluentCheck?

:)

Trả lời

6

tôi đã kết thúc bằng CuttingEdge Conditions, được tìm thấy trên CodePlex.

ví dụ:

// Check all preconditions: 
Condition.Requires(id, "id") 
    .IsNotNull()   // throws ArgumentNullException on failure 
    .IsInRange(1, 999) // ArgumentOutOfRangeException on failure 
    .IsNotEqualTo(128); // throws ArgumentException on failure 

đẹp :)

+3

CuttingEdge.Conditions là shizzle ;-) – Steven

1

Here's one sử dụng Expressions. Kể từ khi nó khá tầm thường, tất cả mọi người dường như có thực hiện riêng của họ này ...

+0

Liên kết của bạn đã chết. –

+4

@ M.Babcock Thử lưu trữ.org. Câu trả lời của tôi là hơn 4 tuổi. Bạn không thể nghiêm túc mong đợi tôi duy trì tất cả 1600+ câu trả lời của tôi ở đây kể từ năm 2008. –

1
+0

FluentValidation được thực hiện để xác thực đối tượng chứ không phải để xác thực đối số – BoeseB

+2

Tôi sử dụng FluentValidation để xác thực đối số hành động ASP.NET MVC, là đối tượng nếu mô hình được nhập mạnh mẽ. Sẽ có nhiều lựa chọn.Nó chỉ là một trong những công cụ có sẵn vì vậy tôi chỉ nghĩ rằng tôi muốn đưa nó ra có trong trường hợp nó giúp một ai đó. –

1

Dưới đây là một lớp đơn giản chỉ là một vài dòng dài mà tôi đã viết một thời gian trước (từ đây: http://code.google.com/p/hotwire-queue/wiki/QuickAssert) mà làm điều gì đó tương tự để xác nhận thông thạo, sử dụng một phong cách hơi khác nhau mà tôi tìm một chút dễ đọc hơn (ymmv). Không yêu cầu bất kỳ thư viện của bên thứ ba nào và nếu xác thực không thành công, bạn sẽ nhận được một thông báo lỗi đơn giản với mã chính xác không thành công.

config.Active.Should().BeTrue(); 
config.RootServiceName.Should().Be("test-animals"); 
config.MethodValidation.Should().Be(MethodValidation.afterUriValidation); 
var endpoints = config.Endpoints; 
endpoints.Should().NotBeNull().And.HaveCount(2); 

này:

config.Ensure(c => c.Active, 
       c => c.RootServiceName == "test-animals", 
       c => c.MethodValidation == MethodValidation.afterUriValidation, 
       c => c.Endpoints != null && c.Endpoints.Count() == 2); 

Đây là lớp học, hy vọng nó hữu ích như là một điểm khởi đầu cho một người nào đó ;-D

using System; 
using System.Linq.Expressions; 
using NUnit.Framework; 

namespace Icodeon.Hotwire.Tests.Framework 
{ 
    public static class QuickAssert 
    { 
     public static void Ensure<TSource>(this TSource source, params Expression<Func<TSource, bool>>[] actions) 
     { 
      foreach (var expression in actions) 
      { 
       Ensure(source,expression); 
      } 
     } 

     public static void Ensure<TSource>(this TSource source, Expression<Func<TSource, bool>> action) 
     { 
      var propertyCaller = action.Compile(); 
      bool result = propertyCaller(source); 
      if (result) return; 
      Assert.Fail("Property check failed -> " + action.ToString()); 
     } 
    } 
} 

Đồng thời tôi đã viết Đảm bảo, hợp đồng đang là không được hỗ trợ trong Visual studio 2010, nhưng hiện tại, hãy xem http://msdn.microsoft.com/en-us/magazine/hh148151.aspx

1

Bạn có thể thử Bytes2you.Validation (Project). Đó là thư viện C# nhanh, có thể mở rộng, trực quan và dễ sử dụng cung cấp các API thông thạo để xác thực đối số. Cung cấp mọi thứ bạn cần để thực hiện lập trình phòng thủ trong ứng dụng .NET của bạn.

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