3

既存のasp.net(c#)アプリケーションがあります。採用日と登録日を指定して発効日を計算するための柔軟なルールを作成する方法をユーザーに提供する必要があります。

使用される可能性のあるルールの例:

  1. 採用日または登録日の遅い方
  2. HireDate+90日
  3. 登録日から1か月後
  4. 登録日がその月の15日より前の場合、発効日は翌月の1日です。15日以降の場合は、その翌月の1日です。

最初はいくつかのオフセットフィールド(日オフセット、月オフセットなど)から始めましたが、新しい要件に遭遇すると、現在のアプローチには十分な柔軟性がないことに気付くようになります。

私がやりたいのは、エンドユーザーが2つのパラメーター(hiredate、enrollmentdate)を指定して日付を返す関数を定義し、その関数をデータベースに格納できるようにすることです。発効日を計算する必要がある場合は、この関数をデータベースから引き出して実行し、パラメーターを渡して発効日を取得します。

私が必要とするのは(私が思うに)この関数の作成を可能にするドメイン固有言語(DSL)です。その構文では、日付を簡単に操作できるようにする必要があります。

要件に合ったDSLに関する推奨事項を探しています。私のDSL戦略がベースから外れている場合は、別の方法をお勧めしてください。ありがとうございました。

4

2 に答える 2

1

このような DSL は見たことがありません (そして、関連するトピックを調べるのに多くの時間を費やしました)。

ユーザーが日付/時刻式を指定できるようにすることは、非常に難しい問題です。私自身の自然言語エンジンは、適切な出発点またはアイデアを得るのに適した場所かもしれません。

そのエンジンには、 の概念がありTemporalExpressionます。NLP エンジンは、「昨年の 5 月の金曜日の午後 5 時以降」のような複雑な文字列を解析し、そのための正確な式ツリーを作成できます。AboditNuget からさまざまなパッケージを取得すると、このアイデアに関連するクラスとメソッドを調べることができます。役立つ時間間隔を含む測定単位のクラスもあります (TimeSpanたとえば、「1 か月と 2 日」を処理できません)。

エンジンを拡張して、独自のトークンを解析することができます (「雇用日」のような単純なものと、特定の休日を名前で認識して新しい を作成するような複雑なものの両方TemporalExpression)。

また、セマンティック Web で時間式を表現する方法については、DAML とOWL-Timeを参照してください。

免責事項: 私が書いたものです。これは私のサイトへのリンクです。まだ作業中です。「プロダクション ルール」と大幅に改善されたパフォーマンスを備えた新しいバージョンがまもなく登場します。オフラインで議論できれば幸いです。

于 2013-02-01T23:11:22.390 に答える
0

私は現在、フリーエクスプレッションパーサーを使用してソリューションを提供しています。これにより、.NETDateTime構造体が提供するほとんどのメソッドとプロパティを使用できます。以下に示すように、質問を再投稿することで、この方向を示しました。

https://stackoverflow.com/a/14730487/21155

于 2013-02-08T05:32:13.963 に答える