13
RavenDBを使用するアプリケーションフレームワークを取得しようとしています。セッションと1対1の関係を持ち、効果的に作業抽象化の単位となるビジネスロジックサービスをセットアップしました。RavenDBの変更が検証をバイパスします
ビジネスロジックサービスの一部は、すべての検証を含むことになります。サービスからの方法は
public void StoreUser(User user)
{
//Some validation logic
if(string.IsNullOrWhiteSpace(user.Name))
throw new Exception("User name can not be empty");
Session.Store(user);
}
問題があるようなものであるかもしれない、そのユーザーはすぐに私が店の方法上の任意の検証をバイパスするが、その後、正しい値を格納し、後で
それを変更することができます保存されているように追跡されているため、public void TestUserStore()
{
var u1 = new User() {Name = "John"};
var u2 = new User() { Name = "Amy" };
Service.StoreUser(u1);
u1.Name = null; //change is tracked and will persist on the next save changes
Service.StoreUser(u2);
Service.SaveChanges();
//The following fails, as we have stored null as the name rather than "John" bypassing our validation
Assert.IsTrue(Service.AdhocQuery<User>().Any(u => u.Name == "John"));
}
RavenDBに格納された項目のスナップショットのみを保存し、それ以上の変更を追跡しないようにするには、違法な更新を防ぐために、ビジネスロジックサービスに出入りするすべてのものを複製する必要がありますか?または間違った場所でバリデーションを行っていますか?このロジックを置くには良い場所がありますか?
偉大な拡張ポイント、それは現在ドキュメントよりも多くの広報を受ける必要があります – Alex
あなたの応答に感謝します。 –