Mark thank you for your reply! What you are saying is that the example Car ( engine.cylinderCount == 4 ) is wrong and correct is: $e: Engine ( cylinderCount == 4 ) Car ( engine == $e ) which is representation of real relations? I thought about the example I wrote here overnight and I realized that the solution without 'from' in fact can be optimal as it can easily eliminate non-matching facts without going through the object structure.
Cheers, Libor Mark Proctor wrote: > > Java pojo's nested fields is just a weak way to represent relations > between objects. If you want to exploit those properly in a rule engine, > best to use real relations. > > Mark > Libor Nenadál wrote: >> Mark Proctor wrote: >> >>> We can exploit cartesian products and indexing for == constraints. If >>> its a nested model we have to iterate over all possible instances. The >>> other problem is if the nested model changes the engine has no idea this >>> has happened, which if you are not careful can lead to data integrity >>> issues. >>> >>> >> I think that plain flat model is too limited for real life. In fact in >> most >> situations you just cannot avoid nesting. >> For example when I try to search for cars with 4 cylinder engine the best >> approach I found is: >> >> rule "get 4 cylinder cars" >> when >> Car ( $e: engine != null ) // car without engine? where are we? :) >> Engine ( cylinderCount == 4 ) from $e >> then >> System.out.println("Found 4 cylinder car."); >> end >> >> This should be quite effective. I doubt that the following solution with >> cartesian product has the same complexity: >> >> rule "get 4 cylinder cars" >> when >> $e: Engine ( cylinderCount == 4 ) >> Car ( engine == $e ) >> then >> System.out.println("Found 4 cylinder car."); >> end >> >> Using approach Car ( engine.cylinderCount == 4 ) tends to raise >> NullPointerException and I had problems with assigning the cylinderCount >> to >> variable so this was not a way to go for me. >> >> But this is not much a problem for me as I am a programmer and I can >> understand the rule language and data structures. But when business users >> are to edit rules (using Guvnor as the tool of choice) we come to >> troubles. >> I think that guided editor for rules does not allow "from". More >> importantly >> - can you create such a structure for a test scenario? I failed. :( >> > > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > -- View this message in context: http://www.nabble.com/Why-is-a-flat--object-recommended--tp15567690p24967167.html Sent from the drools - user mailing list archive at Nabble.com. _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users