Since the release of Lucene2Objects I've seen a few people downloading it and some have left a couple comments, some have directly emailed me and others even found me on BitBucket and sent me a message over there. I think that is awesome, which is why I plan to devote a bit more of my time to get more cool stuff into Lucene2Objects, also there is the fact that I actively use it on a couple projects :)
So far, there is only one thing that comes to mind that we need to have released on L2O, which is the fact of self tracking objects, that is having the object been able to track any changes to it and update them on the Index. I've been devoting some time into this matter and I've come with a couple of ideas, but to get them, there is a couple of basic principles I need to keep in mind:
- Lucene2Objects tracking system needs to be as unobtrusive as possible (And not because the word is trendy)
- As it has been so far, getting the tracker up and running should be easy for anyone not interested in getting too deep
- If somebody is indeed interested in going deep it needs to be also easier than going into Lucene .NET(which is not easy at all!!)
But, if you think of it, these are just basic design principles, the first one is basically YAGNI and KISS and the other two are just plain old Bertrand Meyer's Open Closed Principle. Despite the fact that these should rule most development projects, the actual panorama is not like that. Anyways, I digress...
The other thing that so far I think that is necessary in order to have self-tracking entities (and collections, which are after all, entities) is that to be able to do some self-tracking, the entities to be tracked need to have some sort of primary key, or something that distinguishes them. Having said that, I can think only of forcing the use of a primary key on any entity to be tracked, for instance, using the [PrimaryKey] attribute. The alternative is generating a key somehow, but since you don't always (actually almost never...) know which fields identify an entity, there is no way of warrantying that this is a safe or unique procedure.
There is an idea for Sharp Lite users which is using the [DomainSignature] attribute for auto generating the so called key. For those of you who don’t know what SharpLite is, is a really nice development framework made mostly by Billy McAfferty for developing .NET apps, and although it has a couple detractors it’s a really good way to start any small and mid-sized projects. So, for all of you developers reading this post and interested on how L2O progresses, Is there something you want to see on L2O? Feel free to comment or email me, I'm interested on hearing your thoughts.