I think the difference is less dramatic than some make it sound. It’s a tradeoff really:
For UI based rules (and Things, Items etc.), you have the convenience of editing them in the UI. File based entities are read-only, so you can view them in the UI, but not change them.
In return, you get more “control” when things are file based. Nothing will change unless you do so, there will be no surprises because you happen to change something you didn’t mean to when you operate the UI, there will be no potential bugs that “corrupt” your data, and upgrade scripts won’t be able to “help you” convert stuff when you upgrade. You also have the benefit of being able to organize and back up the files exactly as you wish, using Git for example, and have the file (and the back-up itself) be in a format that is easily readable. You can also change the files while OH is running, and they will be reparsed and things updated in OH.
UI based entities are all stored in the JSONDB. It, too, can be backed up, but it will all be in a somewhat less readable format (JSON), and you can’t make changes to them while OH is running. If you want to change UI based entities while OH is running, you must do it using the UI.
The perhaps biggest advantage with file based rules in particular, is that you can use the scripting languages themselves to create the rules (this is easiest in the languages that have helper libraries that aid you, like JavaScript, Python, Ruby, Java223). These rules have some drawbacks in that they can’t do everything other rules can do, but they can usually do what most people need, and when you create the rules this way, you can make them in your favorite IDE or editor, with syntax highlighting, suggestions, automatic lookup and all those things that makes writing correct syntax much easier.
New in 5.2 is that also rules can be YAML, which is a kind of “file-based variant of UI rules”. You don’t get syntax highlighting and all that, but you get the “control” over changes, back-ups etc. that you get from other file-based variants. You can even export your existing UI rules to YAML from the UI, so you don’t have to create the files yourself. But, this requires 5.2.
In the end, it’s all up to you and what you prefer. Any solution is “as valid” as any other as I see it.