2

新しいビジネス ルールを簡単に追加できるスケーラブルな販売注文プロジェクトを作成する方法を探しています。

public class OrderLine
{
    public int OrderId { get; set; }
    public int Line { get; set; }
    public string Product { get; set; }
    public string Description { get; set; }
    public decimal Quantity { get; set; }
    public int LeadTimeDays { get; set; }        
    public DateTime ShipDate { get; set; }
}

注文明細行が有効であることを確認するためのビジネス ルールを作成するためのベスト プラクティスは何ですか? そして、それぞれにチェックメソッドを追加せずに複数のルールを適用する簡単な方法はありますか?

public static class OrderLineChecks
{
    public static void CheckLeadTime(this OrderLine orderLine)
    {
        if( (orderLine.ShipDate - DateTime.Today).TotalDays < orderLine.LeadTimeDays )
            throw new Exception("Order is within lead time.");
    }

    public static void CheckShipDateError(this OrderLine orderLine)
    {
        if(orderLine.ShipDate < DateTime.Today)
            throw new Exception("Ship date cannot be before today.");
    }
    public static void ShouldBeOrderedInPairs(this OrderLine orderLine)
    {
        if(orderLine.Description.Contains("pair") && (orderLine.Quantity % 2 !=0))
            throw new Exception("Quantities must be even numbers.");
    }
    public static NextFutureRuleHere(...)
    {
    }
}

アドバイスありがとうございます。

4

2 に答える 2

1

Fluent Validation をチェックしてください: http://fluentvalidation.codeplex.com/

このフレームワークがどのようにルールを実装するかをたどると、探しているものを理解するのに役立ちます。

于 2013-01-28T22:55:44.947 に答える
0

要件によってはやり過ぎかもしれませんが、Rhino DSL & Booを使用して DSL を作成することを検討したことがありますか。正しくコーディングすれば、プログラマーでなくても一連のビジネス ルールを非常に簡単に拡張/維持できます。

于 2013-01-28T23:51:08.560 に答える