ユーザーがアイテムをサブスクライブし、新しいアイテムの定期的な通知を受け取ることができるシステムを構築しています。ユーザーは、特定のプロパティでフィルタリングして、必要なアイテムを定義する必要があります。
仕様パターンを使用してアイテムをフィルタリングしています。私の考えでは、ユーザーは Web GUI で独自の仕様を定義する必要があります。
フィルタリングは単純です:
ItemService
{
public IEnumerable<Item> GetMatching(IEnumerable<Item> items, IItemSpecification spec)
{
return items.Where(spec.IsMatch);
}
}
IItemSpecification
{
IsMatch(Item item);
}
問題は、ユーザーごとに異なる仕様を維持するための最良の方法は何ですか? 永続化する方法についての要件はありません。リレーショナル データベース、ドキュメント データベース、xml など、機能するものは何でも。
私は考えることができます:
外部 DSL を記述します (そして、rdb の単純な列に格納します)
仕様内の各プロパティの行を (rdb に) 格納します。これは、何をフィルター処理するか、および修飾子 (等しい、より大きい) を示します。これにより、かなり多くの行が生成されます。
仕様ごとに新しい表を作成 (これが現実的かどうかは不明)
DSL オプションが最もクリーンなソリューションのようです (DSLDSLSpecification
を受け取り、それを Itemservice に渡す a を作成するだけで済みます。複雑にしすぎているのかもしれません。